web监听器
web監聽器的定義;
web監聽器是servlet規范中定義的一種特殊類;
用于監聽servletContext(application) 、 HttpSession (session)、ServeletRequest (request)等域對象的創建與銷毀事件;
WEB容器在啟動時,它會為每個WEB應用程序都創建一個對應的ServletContext對象,它代表當前web應用。
? ServletConfig對象中維護了ServletContext對象的引用,開發人員在編寫servlet時,可以通過ServletConfig.getServletContext方法獲得ServletContext對象。? 由于一個WEB應用中的所有Servlet共享同一個ServletContext對象,因此Servlet對象之間可以通過ServletContext對象來實現通訊。ServletContext對象通常也被稱之為context域對象。
在Servlet API中有一個ServletContextListener接口,它能夠監聽ServletContext對象的生命周期,實際上就是監聽Web應用的生命周期。
可以在事件發生前、發生后做一些必要的處理;用于監聽域對象的屬性發生修改的事件;
web監聽器的用途;
1.統計在線人數和在線用戶;
2.系統啟動時加載初始化信息;
3.統計網站訪問量;
4.跟SPring結合;
第一個web監聽器;
步驟:1.創建一個實現監聽器接口的類;2.配置web.xml 進行注冊;(點擊desgin)然后選中Lister,之后把實現的類路徑選中,就好了
?按監聽的對象劃分:
1.用于監聽應用程序環境對象(ServletContext)的事件監聽器;
2.用于監聽用戶會話對象(HttpSession)的事件監聽器;
3.用于監聽請求消息對象(ServletRequset)的事件監聽器;
按監聽的事件劃分:
1.監聽域對象自身的創建和銷毀的事件監聽器;
2.監聽域對象的屬性的增加和刪除監聽器;
3.監聽綁定到HttpSession域的某個對象的事件監聽器;
監聽域對象自身的創建和銷毀的事件監聽器;
在servlet規范中呢,定義了三個接口,分別是ServletContextListener HttpSessionLister ,ServletRequestLister來監聽ServletContext,HttpSession,ServletRequset
對象的創建和銷毀;
1.ServletContext的創建和銷毀:
ServletContext實現了ServletContextListener 這個接口;來監聽這個對象的創建和銷毀;
ServletContextListener 有兩個方法:
public void contextInitialized(ServletContextEvent sce)
ServletContext創建時調用;
public vod contextDestoryed(ServletContextEvent sce)
ServletContext銷毀時調用;
事例代碼:
public class MyServletContextListener implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent arg0) {System.out.println("contextDestroyed");}@Overridepublic void contextInitialized(ServletContextEvent arg0) {System.out.println("contextInitialized");}} View Code2.HttpSession的對象創建與銷毀;
HttpSession實現了HttpSessionLister?這個接口;來監聽這個對象的創建和銷毀;
HttpSessionLister有兩個方法:
public void sessionCreated(HttpSessionEvent?sce)
Session創建時調用;
public vod sessionDestroyed(((HttpSessionEvent?sce);
Session銷毀時調用; 用途:統計訪問人數;記錄訪問日志;
session創建的時間,當用戶打開瀏覽器,第一次訪問我們的網站的時候,這個時候,session對象就會被創建;可以在session保存一些信息;
銷毀session對象:有三種方法;1.手動的點擊退出的時候,程序會去調用銷毀的方法,2,當關閉瀏覽器的時候,session對象也會被銷毀。3,沒有關閉瀏覽器,
但是會話超時了,這個時候session對象也會被銷毀;
我們可以在web.xml中配置
<session-config><time-out>1</time-out> </session-config> View Code事例代碼:
package com.imooc.listener;import java.util.ArrayList;import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener;import com.imooc.entity.User; import com.imooc.util.SessionUtil; @WebListener public class MyHttpSessionListener implements HttpSessionListener {private int userNumber = 0;@Overridepublic void sessionCreated(HttpSessionEvent arg0) {userNumber++;arg0.getSession().getServletContext().setAttribute("userNumber", userNumber);}@Overridepublic void sessionDestroyed(HttpSessionEvent arg0) {userNumber--;arg0.getSession().getServletContext().setAttribute("userNumber", userNumber);ArrayList<User> userList = null;//在線用戶List userList = (ArrayList<User>)arg0.getSession().getServletContext().getAttribute("userList");if(SessionUtil.getUserBySessionId(userList, arg0.getSession().getId())!=null){userList.remove(SessionUtil.getUserBySessionId(userList, arg0.getSession().getId()));}}} View CodeServletRequest實現了ServletRequestListener 接口;
public void?requestDestroyed(ServletRequestEvent arg0)?
Request創建時調用;
public void requestInitialized(ServletRequestEvent arg0)
Request銷毀時調用; 用途:讀取參數;記錄訪問歷史;
事例代碼:
import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpServletRequest;@WebListener public class MyServletRequestListener implements ServletRequestListener {@Overridepublic void requestDestroyed(ServletRequestEvent arg0) {}@Overridepublic void requestInitialized(ServletRequestEvent arg0) {System.out.println("fff");}} View Code?
轉載于:https://www.cnblogs.com/zht0915/p/4688854.html
總結
- 上一篇: 《世界因你而不同-李开复自传》读书笔记(
- 下一篇: 坑爹的uint32_t