1. 程式人生 > 其它 >javaweb學習23:監聽器

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.OnlineCountListener</listener-class>
       </listener>

       <!--session銷燬時間:以分鐘為單位-->
       <session-config>
           <session-timeout>1</session-timeout>
       </session-config>
    </web-app>