-
監聽器概念
查看全部 -
監聽哪些對象
查看全部 -
監聽器的類比
查看全部 -
Http是沒有http的子類,
得到全局是http類型的request.getSession().getServletContext();
而監聽事件接口有三種,httpSession,servletRequest和servletContext,因為最終得到的是servlet的context,所以servlet類型的request可以直接得到,http類型的request要先得到http的session才能getServletContext。
查看全部 -
Servlet3.0下監聽器的使用(web.xml<web-app>標簽查看Servlet版本)
Servlet2.5下可以定義監聽器的順序,通過在web.xml中定義,Servlet3.0通過注解@WebListener不能實現順序這一功能。
查看全部 -
綁定到HttpSession域中的對象狀態的事件監聽器
綁定到HttpSession域中的對象有多種狀態如下:
綁定(相當于保存,通過session.setAttribute()把對象保存到域對象session中)——>解除綁定 (相當于session.removeAttribute()) ? ? ? ? ? ?鈍化(將session對象持久化到存儲設備上)——>活化(從存儲設備上進行恢復)Session鈍化機制:session正常情況下,存儲在服務器內存當中,服務器會對每一個在線用戶創建一個session對象,當在線用戶很多時,session內存的開銷將是巨大的,會直接影響Web服務器的性能,Session的鈍化機制就解決了這個問題。
Session鈍化機制本質:把服務器不經常使用的session對象暫時序列化到系統文件或者數據庫內存當中,當使用的時候,反序列化到服務器內存當中,整個過程由服務器自動完成。
Tomcat中有兩種Session鈍化管理器(Session鈍化機制由SessionManager管理)
第一種鈍化管理器:StandardManger,有兩種情況,第一種情況,當Tomcat服務器被關閉或重啟時,Tomcat服務器會將當前內存中的Session對象鈍化到服務器文件系統中,第二種情況是Web應用程序被重新加載時(重新覆蓋web.xml,或者從新覆蓋Spring.xml,或者在Tomcat服務器里點擊重新加載按鈕時),內存中的Session對象也會被鈍化到服務器的文件系統中,鈍化后的文件會保存到Tomcat目錄下的work/Catalina/hostname/applicationname/SESSION.ser,當Tmocat服務器重新啟動時,這個文件就會被加載,然后就會被刪掉,也是默認的StandardManger。
第二種鈍化管理器:Persistentmanager,它在Tomcat下的conf下的context.xml中進行配置,首先在鈍化的基礎上進行了擴張。前兩種如上,第三種情況,可以配置主流內存的Session對象數目,將不長使用的Session對象保存到文件系統或數據庫,當用時再重新加載,默認情況下,Tomcat提供了兩個鈍化驅動類,一個是FileStore另一個是JDBCStore。
Servlet規范提供了兩個接口(這兩個監聽器不需要在web.xml中進行注冊)
HttpSessionBindingListener接口:提供了綁定方法valueBound()
和解除綁定方法valueUnbound()。
HttpSessionActivationListener:提供了鈍化方法sessionWillPassivate()和活化方法sessionDidActivate()。
創建的這個類不是監聽器,而是一個普通javaBean,因為這個狀態指的是session當中的對象,是對象的狀態,而不是監聽器的狀態,當前端頁面把這個對象存入session中,就會觸發相應(添加和移除)事件。
HttpSessionActivationListener接口:如果想實現鈍化和活化,一定要實現序列化接口Serializable
查看全部 -
按監聽的事件劃分(域對象屬性的增加和刪除的事件監聽器)
監聽域對象中的屬性的增加和刪除的事件監聽器,Servlet規范中專門定義了監聽這些對象的監聽接口,并且這三個接口都定義了三個方法來處理域對象的屬性的增加、刪除、替換的事件(attributeAdded、attributeRemoved、attributeReplaced)。
【a】ServletContext——>ServletContextAttributeListener
【b】HttpSession——>HttpSessionAttributeListener
【c】ServletRequest——>ServletRequestAttributeListener
步驟1:創建監聽事件的類,并實現相應接口,配置web.xml監聽器。
步驟2:創建一個增加各個屬性值的界面(留意:Tomcat容器監視ServletContext會自動加載一個JSF的類,請求訪問時,還會加載一個jsp的實現類,只需了解)。
開啟????Tomcat容器
request.getAttribute():值放在request域對象里面的一個屬性。
request.getParameter():request請求的一個請求參數(例如:http://www.xianlaiwan.cn/username=zhangsan,通過getAttribute不能獲取)
查看全部 -
ServletRequest的監聽器
ServletRequest對象的創建和銷毀:ServletRequest的創建和銷毀是實現了ServletRequestListener接口,一個ServletRequest對象可以注冊多個ServletRequestListener接口,并且實現了requestInitialized(ServletRequestEvent sre)request創建時被調用,requestDestroyed(ServletRequestEvent sre)request銷毀時調用。
ServletRequestListener主要用途:讀取request里的參數,記錄訪問歷史、訪問路徑,都可以通過它來進行監聽(監聽到每一個用戶的訪問請求,請求結束后就會執行銷毀方法,有getServletContext方法和getServletRequest方法)。
查看全部 -
HttpSession的事件監聽器
監聽域對象(HttpSession):HttpSession實現了HttpSessionListener接口,用于監聽該對象的創建及銷毀事件,一個HttpSession對象可以注冊多個HttpSessionListener接口,一個Web應用中也可以有多個HttpSession對象,HttpSessionListener有sessionCreated(HttpSessionEvent se)和sessionDestroyed(HttpSessionEvent se),分別是session創建和銷毀時調用,方法里的參數可以獲取當前創建的HttpSession對象。
HttpSessionListener主要用途:統計在線人數,記錄訪問日志(在后臺把訪問人的訪問時間和ip做一些統計數據)
HttpSession對象的創建和銷毀:session對象的創建是在用戶第一次打開瀏覽器,第一次訪問Wen應用時,這次對話Web容器就會分配一個session,用戶可以在session里保存一些信息,session對象的銷毀第一是關閉服務器,會調用銷毀方法,第二種是關閉瀏覽器session會被銷毀(session不一定會立即銷毀,該時間不是一個量化的),第三種,不關閉瀏覽器,session超時(可以通過在web.xml中配置
<session-config>
? <session-timeout>1</session-timeout>
? </session-config>
設置超時時間,銷毀并不會一定是1分鐘)。
查看全部 -
監聽器的分類
按監聽的對象劃分
【a】用于監聽應用程序環境對象(ServletContext)的事件監聽器。
【b】用于監聽用戶會話對象(HttpSession)的事件監聽器
【c】用于監聽請求消息對象(ServletRequest)的事件監聽器
按監聽的事件劃分
【a】監聽域對象自身的創建和銷毀的事件監聽器
定義:監聽的對象包括ServletContext、HttpSession、ServletRequest,Servlet規范中定義了三個接口ServletContextListener、HttpSessionListener、ServletRequestListener來監聽這三個對象的創建及銷毀事件。
ServletContext的創建及銷毀:ServletContext實現了ServletContextListener接口來監聽該對象的創建及銷毀事件,一個Web應用下可以創建多個ServletContextListener,但是一個Web應用中只有一ServletContext對象,ServletContextListener對象的contextInitialized方法和contextDestroyed方法(主要用于數據庫連接關閉時,可以釋放一些資源,以免過度的占用),方法里的參數ServletContextEvent可以獲取ServletContext以及獲取一些初始化參數。
ServletContextListener主要用途:做一些定時器:可以加載一些全局屬性對象,可以創建全局的數據庫連接,以及加載一些緩存信息。
getServletContext():通過參數ServletContextEvent獲取ServletContext對象,并且可以往全局變量ServletContext中存入變量,通過setAttribute方法,這樣就可以在其他地方進行獲取。
getInitParameter():通過ServletContext對象獲取初始化參數(初始化參數在web.xml中進行配置)。
【b】監聽域對象中的屬性的增加和刪除的事件監聽器
【c】監聽綁定到HttpSession域中的某個對象的狀態的事件監聽器
查看全部 -
監聽器的啟動順序(一個web.xml下的多個監聽器)
順序:注冊順序加載監聽器,如果注冊含有過濾器、監聽器、Servlet,監聽器優先級>過濾器優先級>Servlet優先級
查看全部 -
第一個監聽器案例
步驟1:創建一個類并實現ServletContextListener接口(javax.servlet),并且實現了contextInitialized方法和contextDestroyed方法
步驟2:web.xml配置監聽對象
查看全部 -
Web監聽器的主要用途
1、統計在線人數和在線用戶(監聽器的主要用途之一)
2、系統啟動時加載初始化信息(包括緩存、一些公用的定時器、一些公共的數據庫的連接等等)
3、統計網站訪問量(每次請求都可以通過監聽器的request對象進行獲取)
4、跟Spring結合
一、第一個Web監聽器(Servlet規范對每一個監聽器定義了一個接口)
步驟:
【a】創建一個實現監聽器接口的類
【b】配置web.xml進行注冊
查看全部 -
課程目標
1、監聽器的定義(專門用于對其他對象身上發生的事件或狀態改變進行監聽和相應處理的對象,當被監視的對象發生變化時,立即采取相應的行動)
2、監聽器的主要用途
3、第一個實例講解
4、監聽器的分類(監聽的對象和監聽的事件)
5、Servlet3.0下監聽器的使用
6、實際項目中常用案例
一、監聽器的定義
定義:Servlet規范中定義的一種特殊的類,用于監聽ServletContext、HttpSession和ServletRequest等域對象的創建與銷毀時間,以及用于監聽域對象的屬性發生修改的事件,監聽器對象可以在事件發生前、發生后做一些必要的處理。
WEB應用中的監聽器:由Servlet規范提供的,可以監視客戶端的請求以及服務端的操作,同時可以監視ServletContext(application,容器創建并且初始化的,范圍整個Web應用,整個Web應用只有一個application對象,Web容器關閉就會銷毀application對象)、HttpSession(session,是一種保存上下文的機制,針對每一個會話,放在服務器端,通過session的id進行區分的,瀏覽器和服務器結束后,就會把session進行銷毀)、ServletRequest(request,客戶發送請求時,容器就會創建一個ServletRequest對象,進行封裝請求數據,同時會創建一個ServletResponse對象,進行封裝響應數據,訪問請求結束之后,request對象就會被銷毀)。
例如統計用戶在線人數。
Web監聽器監視三個對象:監聽這三個對象的創建、銷毀、以及這三個屬性之間的變化
查看全部 -
session鈍化與活化
查看全部
舉報