Java Servlet里提供了很多的服务器监听接口,但是却没有明确地说明它们的使用方法.J2EE的API文档里面也没有Useage参考了.我就写一篇文章给不会使用它们的java爱好者们一点参考吧.其实这些也是很简单的.
大多数的Listener都不是用在javabean或其它类里面的,它们都应该作为服务器的一部分,也就是说,当这些事情发生时,由服务器回调这些监听器里的方法,对于jsp或servlet程序就是透明的了.这样的listener有:ServletContextListener,ServletContextAttributeListener, HttpSessionListener,HttpSessionAttributeListener, ServletRequestListener,ServletRequestAttributeListener .
大多数的Listener都不是用在javabean或其它类里面的,它们都应该作为服务器的一部分,也就是说,当这些事情发生时,由服务器回调这些监听器里的方法,对于jsp或servlet程序就是透明的了.这样的listener有:ServletContextListener,ServletContextAttributeListener, HttpSessionListener,HttpSessionAttributeListener, ServletRequestListener,ServletRequestAttributeListener .
- ServletContextListener:监听服务器启动时和关闭
- ServletContextAttributeListener:监听服务器上下文(全局)属性的变化
- HttpSessionListener:监听session
- HttpSessionAttributeListener:监听session的属性表变化
- ServletRequestListener:监听请求变化
- ServletRequestAttributeListener:监听request属性变化 要使用它们,我们就必须写一个类,实现上面的一个或几个接口,然后在web-inf的web.xml中加入配置:
<listener>
<listener-class>包名.类名</listener-class>
</listener>
(注意:类放在class文件夹里.)这样,我们的服务器监听就完成了,给大家举个例子:
统计在线人数
方法:统计在线人数,我们可以在服务器里设一个全局int变量(4个字节就够了,一点也不占用服务器的内存资源,当然,如果你的网站同时在线人数大于2的32次方,也可以用8个字节!呵呵),然后当我们服务器产生一个session的时候,把那个值加1,删除一个session的时候,把那个值减1就OK了.所以我们用到的就是HttpSessionListener...因为是全局变量,所以用户在任何情况下都可以取得这个值.
大致程序如下:
class Online implements HttpSessionListener{
//.....其它的变量和方法就不写了
public void sessionCreated(HttpSessionEvent se) {
ServletContext sc=se.getSession().getServletContext();
Integer i=(Integer)sc.getAttribute("online");
if(i==null) i=new Integer(0);
i++;
sc.setAttribute("online",i);
}
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext sc=se.getSession().getServletContext();
Integer i=(Integer)sc.getAttribute("online");
i--;
sc.setAttrbute("online",i);
}
}
说明:程序随手写的,还要在每行结尾写br,烦死了,可能有点输入错误什么的,请原谅了.呵呵.
在jsp中使用时,就用
在线人数为:<%=config.getServletContext().getAttribute("online")%>就行了,很简单.