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