Web监听器

大量内容来源于:http://www.tuicool.com/articles/bIJJvuE

 

1 什么是web监听器?

web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,HttpSession,ServletRequest的创建和销毁;变量的创建、销毁和修改等。可以在某些动作前后增加处理,实现监控。

2 监听器常用的用途

通常使用Web监听器做以下的内容:

统计在线人数,利用HttpSessionLisener

加载初始化信息:利用ServletContextListener

统计网站访问量

实现访问监控

3 接下里看看一个监听器的创建以及执行过程

首先需要创建一个监听器,实现某种接口,例如我想实现一个对在线人数的监控,可以创建如下的监听器:

public class MyListener implements HttpSessionListener{
private int userNumber = 0;

public void sessionCreated(HttpSessionEvent arg0){
userNumber++;
arg0.getSession().setAttribute("userNumber", userNumber);
}
public void sessionDestroyed(HttpSessionEvent arg0){
userNumber--;
arg0.getSession().setAttribute("userNumber", userNumber);
}
}

然后在web.xml中配置该监听器,在web-app中添加:

<listener>        
  <listener-class>com.test.MyListener</listener-class>
</listener>

在JSP中添加访问人数:

<body>
    在线人数:<%=session.getAttribute("userNumber") %><br/>
</body>

 

以下两种情况下就会发生sessionDestoryed(会话销毁)事件:
   1.执行session.invalidate()方法时 
      既然LogoutServlet.java中执行session.invalidate()时,会触发sessionDestory()从在线用户 列表中清除当前用户,我们就不必在LogoutServlet.java中对在线列表进行操作了,所以LogoutServlet.java的内容现在是 这样。

public void doGet(HttpServletRequest request,HttpServletResponse response)  
    throws ServletException, IOException {  
    // 销毁session  
    request.getSession().invalidate();  
    // 成功  
    response.sendRedirect("index.jsp");  
}  

   2.
      如果用户长时间没有访问服务器,超过了会话最大超时时间 ,服务器就会自动销毁超时的session。
      会话超时时间可以在web.xml中进行设置,为了容易看到超时效果,我们将超时时间设置为最小值。

<session-config>  
    <session-timeout>1</session-timeout>  
</session-config>

      时间单位是一分钟,并且只能是整数,如果是零或负数,那么会话就永远不会超时。

你可能感兴趣的:(session)