请教一下用servlet实现counter的问题

问题描述

想用servlet实现在线计数的功能,但是运行的时候不管打开几个浏览器计数总是0,困扰了我好久也不知道为什么,请大家帮忙看看吧,下面是我的代码:counter.java文件:packagesamples.javabean;publicclassCounter{privatestaticintcount=0;publicstaticintgetOnline(){returncount;}publicstaticvoidraise(){count++;}publicstaticvoidreduce(){count--;}}OnlineCounterListener文件:packagesamples.servlet;importjavax.servlet.http.HttpSessionEvent;importjavax.servlet.http.HttpSessionListener;importsamples.javabean.Counter;publicclassOnlineCounterListenerimplementsHttpSessionListener{publicvoidsessionCreated(HttpSessionEventhse){Counter.raise();}publicvoidsessionDestroyed(HttpSessionEventhse){Counter.reduce();}}在web.xml中加入下面代码:<listener><listener-class>samples.servlet.OnlineCounterListener</listener-class></listener>然后运行这个文件:<%@pagelanguage="java"contentType="text/html;charset=GB2312"pageEncoding="GB2312"%><%@pageimport="samples.javabean.*"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=GB2312"><title>使用Listener</title></head><body><fontsize=2>在线人数:<%=Counter.getOnline()%><br></font></body></html>请大家帮帮忙,万分感谢!!

解决方案

解决方案二:
补充一下,有的时候运行结果是最多只可以增加到2,然后就不再变了,很奇怪,不知道为什么啊?
解决方案三:
统计在线人数(及其信息),就是统计现在有多少个Session实例存在,我们可以增加一个计数器(如果想存储更多的信息,可以用一个对象来做计数器,随后给出的实例中,简单起见,用一个整数变量作为计数器),通过在valueBound方法中给计数器加1,valueUnbound方法中计数器减1,即可实现在线人数的统计。当然,这里面要利用到ServletContext的全局特性。(有关ServletContext的叙述请参考Servlet规范),新建一个监听器,并将其实例存入ServletContext的属性中,以保证此监听器实例的唯一性,当客户登录时,先判断ServletContext的这个属性是否为空,如果不为空,证明已经创建,直接将此属性取出放入Session中,计数器加1;如果为空则创建一个新的监听器,并存入ServletContext的属性中。举例说明:实现一个监听器://SessionListener.javaimportjava.io.*;importjava.util.*;importjavax.servlet.http.*;//监听登录的整个过程publicclassSessionListenerimplementsHttpSessionBindingListener{publicStringprivateInfo="";//生成监听器的初始化参数字符串privateStringlogString="";//日志记录字符串privateintcount=0;//登录人数计数器publicSessionListener(Stringinfo){this.privateInfo=info;}publicintgetCount(){returncount;}publicvoidvalueBound(HttpSessionBindingEventevent){count++;if(privateInfo.equals("count")){return;}try{Calendarcalendar=newGregorianCalendar();System.out.println("LOGIN:"+privateInfo+"TIME:"+calendar.getTime());logString="nLOGIN:"+privateInfo+"TIME:"+calendar.getTime()+"n";for(inti=1;i<1000;i++){Filefile=newFile("yeeyoo.log"+i);if(!(file.exists()))file.createNewFile();//如果文件不存在,创建此文件if(file.length()>1048576)//如果文件大于1M,重新创建一个文件continue;FileOutputStreamfoo=newFileOutputStream("yeeyoo.log"+i,true);//以append方式打开创建文件foo.write(logString.getBytes(),0,logString.length());//写入日志字符串foo.close();break;//退出}}catch(FileNotFoundExceptione){}catch(IOExceptione){}}publicvoidvalueUnbound(HttpSessionBindingEventevent){count--;if(privateInfo.equals("count")){return;}try{Calendarcalendar=newGregorianCalendar();System.out.println("LOGOUT:"+privateInfo+"TIME:"+calendar.getTime());logString="nLOGOUT:"+privateInfo+"TIME:"+calendar.getTime()+"n";for(inti=1;i<1000;i++){Filefile=newFile("yeeyoo.log"+i);if(!(file.exists()))file.createNewFile();//如果文件不存在,创建此文件if(file.length()>1048576)//如果文件大于1M,重新创建一个文件continue;FileOutputStreamfoo=newFileOutputStream("yeeyoo.log"+i,true);//以append方式打开创建文件foo.write(logString.getBytes(),0,logString.length());//写入日志字符串foo.close();break;//退出}}catch(FileNotFoundExceptione){}catch(IOExceptione){}}}

时间: 2025-01-07 04:55:30

请教一下用servlet实现counter的问题的相关文章

请教下用servlet实现对一个学生系统的登录查询删除添加等功能如何实现,急!!!!在线等待

问题描述 请教下用servlet实现对一个学生系统的登录查询删除添加等功能如何实现,要求不要牵涉数据库,如果是数据库我都会做. 解决方案 解决方案二:那就把数据放在一个静态变量中吧,简单点可用map<Integer,Po>,Po为映射数据库表字段的vo类.解决方案三:道理不是一样的吗,莫非用数据库的时候你是直接在页面上写的?解决方案四:查询我是做出来了.但在注册页面中的值如何添加到这个列表中去呢解决方案五:根据表单的字段,做一个vo(值对象)类,把这个类存进一个静态变量的list.set或ma

请教:

问题描述 请教:exceptionjavax.servlet.ServletException:java.lang.NullPointerExceptionorg.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:422)rootcausejava.l

JSP实现网页访问统计_JSP编程

最近学习Jave EE 中的jsp网页开发,需要实现网页访问量的统计,刚开始不知道如何实现,后来问了一下老师,老师是这样回答我的:要实现网页访问的统计,你可以利用application对象来实现,不能用seesion对象,因为session是属于同一个会话的,关掉浏览器数据就没有了,而application是在同一浏览器下的,只要是同一个浏览器,将数据保存在applicaiton对象中,这样就可以保证数据的不变性.其实这些我都懂,我只是不知道如何在jsp用代码实现.后来我只能上网看看有没有具体的

【菜鸟请教】jsp如何调用到servlet中的函数

问题描述 首先说一下,我刚学习,问题可能很菜,请大家帮忙!之间接触过javabean的东西,jsp页面中可以调用java文件中的函数,比如,bean.java中可以写一个geturl的函数,bean.jsp中可以通过<iframesrc=<%=geturl()%>>,来实现对于iframe的设定.现在,我学习使用jsp.servlet来实现上述需求,在servlet.java文件中写了一个geturl函数,在jsp中编写<iframesrc=<%=geturl()%&g

请教一个servlet在web.xml配置访问路径的问题

问题描述 首先我在tomcat的service.xml中配置了<Contextpath="/demo"docBase="D:WorkSpaceMyEclipse8.5testWebRoot"reloadable="true"/>在webroot下新建了aaa文件夹,里面有start.jsp和end.jsp.start.jsp的表单:<body><formaction="StartServlet"m

请教下,一个servlet处理增删改查方法

问题描述 就像struts.xml中method可以指定哪个方法.springMVC通过url映射去找那个方法,servlet请求都是在service这个方法中处理,如果增删改查方法都写在一个servlet中,怎么处理呢,忘了基础了,大家指点下呀,谢谢 解决方案 在url中带一个method参数,给出详细代码:@SuppressWarnings("serial")public class TestHttpServlet extends HttpServlet{ @Override pr

请教各位大侠:关于Servlet在本地可以访问,打包 放到服务器上就不能访问?

问题描述 非常感谢 解决方案 解决方案二:IP地址的问题?解决方案三:服务器能从外部访问吗?解决方案四:能从外部访问,只有写的这个servlet不能访问解决方案五:问个问题的篇幅比写个HelloWorld还简单!

弱弱请教一个servlet和Applet通信问题

问题描述 请高手做一个小程序,实现功能如下:1.客户端发送文件名和文件内容,服务器保存成txt格式.2.客户端请求文件名,服务器端返回文件内容.发到我邮箱xonorya@gmail.com 解决方案 解决方案二:这样问没人会发给你的解决方案三:好像老板在招呼小弟!解决方案四:就一点分数打发别人怎么可能有人回答啊不过我是回答不出来啦解决方案五:就是处理字节流字符流的问题不过貌似是课堂作业--

J2EE1.4中的Servlet部署

j2ee|servlet 第一步:我们要编写一个Servlet的代码,我编写一个记录访问网站次数的Servlet,代码如下: import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class hitcountServlet extends HttpServlet{public void init(ServletConfig config)throws Servle