亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java listener簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年07月31日 10:25:54   作者:CBDoctor  
這篇文章主要介紹了Java listener簡介,可以用于統(tǒng)計(jì)用戶在線人數(shù)等,有興趣的可以了解一下

1: 監(jiān)聽器的定義:

監(jiān)聽器實(shí)際上是一個(gè)類,這個(gè)類實(shí)現(xiàn)了特定的接口,然后將這個(gè)類在 web.xml 文件中進(jìn)行描述,這樣服務(wù)器在啟動(dòng)的時(shí)候就可以實(shí)例化這個(gè)類,啟動(dòng)監(jiān)聽器。當(dāng)范圍對象的狀態(tài)發(fā)生變化的時(shí)候,服務(wù)器自動(dòng)調(diào)用監(jiān)聽器對象中的方法。例如統(tǒng)計(jì)用戶在線人數(shù)。

web監(jiān)聽器是Servlet規(guī)范中定義的一種特殊類,用于監(jiān)聽ServletContext,HttpSession,ServletRequest等域?qū)ο蟮膭?chuàng)建、銷毀、以及屬性的變化等,可以在事件發(fā)生前、發(fā)生后進(jìn)行一些處理。

2、監(jiān)聽器的用途

  • 統(tǒng)計(jì)在線人數(shù)和在線用戶
  • 系統(tǒng)加載時(shí)進(jìn)行信息的初始化工作
  • 統(tǒng)計(jì)網(wǎng)站的訪問量
  • 跟Spring結(jié)合

3、實(shí)例

在web.xml文件中進(jìn)行配置

listenr-class中是自己定義的Listener的類路徑

public class MyRequestListener implements ServletContextListener{
  public void contextInitialized(ServletContextEvent event){
    System.out.println("啟動(dòng)監(jiān)聽器");
  }
 
  public void contextDestroy(ServletContextEvent event){
    System.out.println("結(jié)束監(jiān)聽器");
  }
}

編譯器會(huì)為我們自動(dòng)生成contextInitialized和contextDestroy兩個(gè)函數(shù)

監(jiān)聽器>過濾器>serlvet,在 web.xml 文件中配置的時(shí)候注意順序

4 監(jiān)聽器的分類

按監(jiān)聽的對象劃分,可以分為監(jiān)聽

  • ServletContext對象
  • HttpSession對象
  • ServletRequest對象

按監(jiān)聽的事件劃分

  • 域?qū)ο笞陨淼膭?chuàng)建和銷毀
  • 域?qū)ο笾袑傩缘膭?chuàng)建和消除
  • 綁定到session中的某個(gè)對象的狀態(tài)

由于很多監(jiān)聽的方式一致,因此我們只考慮其中的HttpSession對象:

在web.xml中配置session超時(shí)

<session-config>
  <session-timeout> 30 </session-timeout>
</session-config>

當(dāng)超過30秒后,session會(huì)自動(dòng)過期

public class MyRequestListener implements HttpSessionListener{
  public void sessionCreate(HttpSessionEvent event){
    System.out.println("event 創(chuàng)建:");
  }
 
  public void sessionDestroy(HttpSessionEvent event){
    System.out.println("event 銷毀:");
  }
}

另外,我們可以實(shí)現(xiàn)HttpSessionAttributeListener來實(shí)現(xiàn)session對象屬性的增加(added)、刪除(removed)、替換(replaced)的功能

public class MyRequestListener implements HttpSessionAttributeListener{
  public void attributeAdded(HttpSessionBindEvent event){
     
  }
 
  public void attributeRemoved(HttpSessionBindEvent event){
     
  }
 
  public void attributeReplaced(HttpSessionBindEvent event){
     
  }
}

5、Servlte3.0下的使用

在Servlet3.0下通過注解@WebListener("")就可以實(shí)現(xiàn)了,不需要在web.xml中進(jìn)行配置

6、實(shí)戰(zhàn)(偽代碼)

public class MyRequestListener implements HttpSessionListener{
  private int counts = 0;//用于統(tǒng)計(jì)在線人數(shù)
  public void sessionCreate(HttpSessionEvent event){
    counts++;
    event.getSession().getServletContext.setAttribute("name",counts); //用戶人數(shù)+1
  }
 
  public void sessionDestroy(HttpSessionEvent event){
    counts--;
    event.getSession().getServletContext.setAttribute("name",counts);//用戶人數(shù)-1
  }
}
 
@WebListener
public class MyRequestListener2 implements ServletRequestListener{
  private ArrayList<User>list; //創(chuàng)建一個(gè)在線用戶的列表
  public void requestCreate(ServletRequestEvent event){
    HttpServletRequest request = (HttpServletRequest) request.getServletContext();
    String sessionId = request.getSession().getSessionId();
    if(sessionId ...){
      ....
      list.add(...);
    }
  }
 
  public void requestDestroy(ServletRequestEvent event){
 
  }
}
 
public class User{
  private int sessionId;
   
}

相關(guān)文章

最新評論