在JavaWeb中有個叫監聽器的東西,這監聽器主要用來監聽三大對象:HttpServletRequest、HttpSession、ServletContext,每個對象對應着各自的監聽器接口。監聽器可以監聽這三個對象中的對象建立、初始化與銷毀資訊的事件,也可以監聽對象中的屬性變更資訊的事件,例如對象的屬性添加或删除屬性等變更資訊。
是以會有六個主要的監聽器接口,ServletRequestListener、ServletContextListener和HttpSessionListener接口是用于監聽對象的建立與銷毀資訊。
ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,這三個接口則是定義了三個方法來處理被監聽對象中的屬性的增加,删除和替換的事件,同一個事件在這三個接口中對應的方法名稱完全相同,隻是接受的參數類型不同。
配置監聽器的方式有兩種,第一種是以注解的方式配置,第二種則是以web.xml檔案的方式配置。參考以下示例:
使用注解配置監聽器:
使用注解的方式配置監聽器很簡單,實作一個或多個監聽器接口,然後寫上@WebListener注解即可。
<br>
使用web.xml檔案配置監聽器:
代碼:
以上代碼隻是實作了監聽Session對象的接口,此接口可以監聽對象的建立和銷毀,然後編寫一個Servlet類來測試一下是否能正常監聽,代碼示例:
運作結果:
由于以上示例中我使用注解和web.xml的方式配置了兩個監聽器,是以一個session對象被兩個監聽器所監聽了。
以下示範其他兩個監聽器接口:
ServletRequestListener接口:
ServletContextListener接口:
如圖,由于ServletContext是伺服器啟動時就建立,伺服器關閉時才銷毀,是以隻有在這兩種情況下才能監聽到ServletContext對象的建立和銷毀。
以上示範的是監聽對象的建立與銷毀的三個接口,下面我們再來看一下監聽對象屬性的三個接口:
HttpSessionAttributeListener接口:
Servlet代碼:
如圖,可以看到session對象銷毀後,會把屬性給删除掉,并且這個過程會被監聽器監聽,是以監聽器還能幫助我們檢視這些對象的一些規律和順序。
ServletRequestAttributeListener接口:
ServletContextAttributeListener接口:
<br><br><br>
配置預設頁面,這個轉發機制會讓你看不到URL位址的變動:
web.xml中預設會配置為以index、default為檔案名字首的.jsp或者.html檔案。是以隻要你的工程目錄下有一個名稱與上圖中配置的檔案名稱一樣的檔案的話,那麼當你通路這個web工程的時候,就會預設通路這個檔案。
例如我在web工程目錄下建立一個index.jsp,然後再浏覽器上通路這個web工程:
浏覽器通路:
如圖,可以看到URL位址沒有發生任何變動,但是卻通路到了這個index.jsp上,平時我們通路某個網站域名的時候,也是通路到這樣的一個預設頁,但是URL上不會有所變動,這就是這種轉發機制的特殊之處。
<br><br>
配置發生http錯誤狀态碼後跳轉的頁面:
當發生404錯誤的時候,就跳轉到根目錄下的404.html檔案上。
配置session的過期時間與ID名稱:
ServletContext對象初始化參數配置:
可以配置多個context-param标簽,param-name配置參數的名稱,param-value配置參數的值,這兩個标簽需要配置在context-param标簽内。
本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/2044400,如需轉載請自行聯系原作者