介紹之前束倍,先看下對(duì)這三大作用域的簡(jiǎn)短介紹铣鹏。如果有興趣可以參見這篇博客(http://blog.csdn.net/lvzhiyuan/article/details/4664624)
ServletContext,是一個(gè)全局的儲(chǔ)存信息的空間私爷,服務(wù)器開始,其就存在侮邀,服務(wù)器關(guān)閉蒂培,其才釋放。request奠伪,一個(gè)用戶可有多個(gè)跌帐;session,一個(gè)用戶一個(gè)绊率;而servletContext谨敛,所有用戶共用一個(gè)。所以滤否,為了節(jié)省空間脸狸,提高效率,ServletContext中藐俺,要放必須的炊甲、重要的、所有用戶需要共享的線程又是安全的一些信息欲芹。
下面開始正式介紹今天這三大域?qū)ο蟊O(jiān)聽器卿啡。(這里只簡(jiǎn)單介紹三大域?qū)ο笊芷诘谋O(jiān)聽)
先了解下監(jiān)聽器的作用吧
ServletContext
生命周期監(jiān)聽:ServletContextListener
public void contextInitialized(ServletContextEvent servletContextEvent)ServletContext創(chuàng)建時(shí)調(diào)用
public void contextDestroyed(ServletContextEvent servletContextEvent)ServletContext銷毀時(shí)調(diào)用
代碼
HttpSession
生命周期監(jiān)聽:HttpSessionListener
public void sessionCreated(HttpSessionEvent httpSessionEvent)HttpSession創(chuàng)建時(shí)調(diào)用
public void sessionDestroyed(HttpSessionEvent httpSessionEvent)HttpSession過期時(shí)調(diào)用
代碼
HttpRequest
生命周期監(jiān)聽:ServletRequestListener
public void requestDestroyed(ServletRequestEvent servletRequestEvent)在ServletRequest對(duì)象被銷毀前調(diào)用
public void requestInitialized(ServletRequestEvent servletRequestEvent)在ServletRequest對(duì)象被創(chuàng)建后調(diào)用
代碼
相應(yīng)監(jiān)聽的類都創(chuàng)建好了,但是tomcat容器并不知道菱父,所以需要告訴他我們定義的監(jiān)聽器(為了更好的演示HttpSessionListener颈娜,我們這里設(shè)置了session過期時(shí)效),因?yàn)橛衘ava項(xiàng)目中還有可能出現(xiàn)過濾器浙宜,攔截器官辽,所以下面用一張圖來幫助區(qū)分和各自的生命周期
所以在web.xml中配置監(jiān)聽器。注意:監(jiān)聽器>過濾器>serlvet粟瞬,配置的時(shí)候要注意先后順序
然后看監(jiān)聽器配置
項(xiàng)目還配置了攔截器同仆,不過沒有什么區(qū)別,正好來研究下各自的生命的周期
下面是項(xiàng)目啟動(dòng)后的后臺(tái)打印信息裙品,把它拼在一起
各監(jiān)聽器俗批,攔截器執(zhí)行順序
1.項(xiàng)目啟動(dòng)時(shí)便進(jìn)入了ServletContext的contextInitialized方法
2.執(zhí)行HttpRequest的requestInitialized方法
3.攔截器的preHandle方法
4.HttpSession的sessionCreated方法
5.攔截器的postHandle方法
6.攔截器的afterCompletion方法
7.執(zhí)行HttpRequest的requestDestroyed方法
8.執(zhí)行HttpSession的sessionDestroyed方法
9.這個(gè)自然是ServletContextcontextDestroyed方法
從上面的執(zhí)行順序可以很好的證明了上面那張生命周期的圖(這里的session是在攔截器之后才執(zhí)行的是因?yàn)椋覀冊(cè)跀r截器里面和模擬的登陸接口才創(chuàng)建了session對(duì)象清酥,攔截器里的session是為了驗(yàn)證當(dāng)前用戶登陸過而使用的)
三大三大域?qū)ο笊芷诘谋O(jiān)聽就到這里了,后面再介紹三大域?qū)ο蟮膶傩员O(jiān)聽蕴侣,希望能幫到前進(jìn)路上的你焰轻,同時(shí)方便自己復(fù)習(xí),謝謝網(wǎng)上眾多的參考博客昆雀,不喜勿噴