javaweb学习23:监听器


javaweb学习23:监听器

  • 监听器:

    • 编写一个监听器:实现一个监听器的接口;(有N种)

    • web.xml中配置监听器;

 

 

  • 代码案例:

    /**
    * 统计网站在线人数:
    * 其实就是统计session:因为
    */
    public class OnlineCountListener implements HttpSessionListener {
    ?
       //创建session监听:看你的一举一动
       //一旦创建一个session,就会触发一次这个事件!(观察者模式)
       public void sessionCreated(HttpSessionEvent se) {
           ServletContext context = se.getSession().getServletContext();
           System.out.println("Session ID:"+se.getSession().getId());
           Integer onlineCount= (Integer)context.getAttribute("OnlineCount");
           if(onlineCount ==null){
               onlineCount=new Integer(1);
          }else{
               int count=onlineCount.intValue();
               onlineCount=new Integer(count+1);
          }
    ?
           context.setAttribute("OnlineCount",onlineCount);
    ?
      }
    ?
       //销毁session监听
       //一旦销毁一个session,就会触发一次这个事件!
       public void sessionDestroyed(HttpSessionEvent se) {
           ServletContext context = se.getSession().getServletContext();
           se.getSession().invalidate();//销毁session
           Integer onlineCount= (Integer)context.getAttribute("OnlineCount");
           if(onlineCount ==null){
               onlineCount=new Integer(0);
          }else{
               int count=onlineCount.intValue();
               onlineCount=new Integer(count-1);
          }
    ?
           context.setAttribute("OnlineCount",onlineCount);
      }
    ?
       /**
        * Session销毁:
        * 1,手动销毁: se.getSession().invalidate();
        * 2,自动销毁:
        */
    }
    ?

     

  • 代码案例:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
            version="4.0">
    ?
       
       <listener>
           <listener-class>com.listener.OnlineCountListenerlistener-class>
       listener>
    ?
       
       <session-config>
           <session-timeout>1session-timeout>
       session-config>
    web-app>
    ?