在上一篇文章“過濾器應用”中我們提到過Servlet一共有三種:簡單Servlet、過濾Servlet和監聽Servlet,和大家一起學習過了前兩種Servlet之後,我們再一起來學習第三種Servlet--監聽Servlet監聽器)
監聽器
對某一些操作進行監聽,就成為監聽器,比如:有人走過,被網路攝影機拍下,這就是監聽,很好理解。
在WEB 中的監聽主要的功能是用於對ServletContext、session、Request進行監聽的一種操作
當相關事件觸發之後將產生事件,並對此事件進行處理。
對application進行監聽
application是ServletContext介面的對象,表示的是整個內容相關的環境
如果要想實現對application監聽,則可以使用如下兩個介面:
ServletContextListenter:是對整個上下文環境的監控
ServletContextAttributeListener:對屬性的監聽
第一種介面;ServletContextListenter(對整個上下文環境的監控)
對Servlet上下文狀態監聽可以使用javax.servlet.ServletContextListener 介面,此介面定的方法如下表:尋找API文檔 在javax.servlet中有個ServletContextListener。)
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1142543015-0.png" title="圖片1.png" />
我們可以看到在兩個方法中都有一個ServletContextEvent sce, 這是個事件 開啟這個事件可以找到這樣的一個方法。
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1142546039-1.png" title="圖片2.png" />
在上下文狀態的監聽操作中,一旦觸發了ServletContextListener介面中定義的事件後,可以通過ServletContextEvent進行事件的處理
package listener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class ServletContextListenerDemo implements ServletContextListener{ public void contextInitialized(ServletContextEvent event){//對上下文初始化觸發 System.out.println("**容器初始化-->"+event.getServletContext().getContextPath()); } public void contextDestroyed(ServletContextEvent event){//上下文銷毀時觸發 System.out.println("**容器銷毀-->"+event.getServletContext().getContextPath()); }}zai
在完成之後,老規矩,配置web.xml。
簡單Servlet需要:<servelt><servlet-mapping>
過濾器需要:<filter><filter-mapping>
但是現在的監聽器就省事多了,直接編寫<listener>即可
<listener> <listener-class> listener.ServletContextListenerDemo </listener-class></listener>
啟動伺服器,如所示,出現了初始化,當關閉伺服器的時候就執行銷毀了。
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1142541M6-2.jpg" title="z111111111111111.jpg" />
只要是容器的啟動和關閉都呀執行這些操作,但是這樣有什麼用處,我們待會再說吧650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1142542931-3.gif" />
第二種介面:ServletContextAttributeListener對屬性的監聽)
此介面可以直接對屬性監聽
看一下這個介面的方法: 在API中javax.servlet中的ServletContextAttributeList
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1142542013-4.png" title="圖片3.png" />
在內容屬性監聽中,一旦觸發了ServletContextAttributeListener介面中定義的事件後,可以通過ServletContextAttributeEvent進行事件的處理,事件定義方法如下:
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1142542914-5.png" title="圖片4.png" />
package listener;import javax.servlet.*;public class ServletContextAttributeListenerDemo implements ServletContextAttributeListener { public void attributeAdded(ServletContextAttributeEvent event){//屬性增加時觸發 System.out.println("**增加屬性->:"+event.getName()+",屬性內容:"+event.getValue()); } public void attributeRemoved(ServletContextAttributeEvent event){//屬性刪除的時觸發 System.out.println("**刪除屬性->屬性名稱:"+event.getName()+",屬性內容:"+event.getValue()); } public void attributeReplaced(ServletContextAttributeEvent event){//屬性替換時觸發 System.out.println("**增加替換->屬性名稱:"+event.getName()+",屬性內容:"+event.getValue()); }}
配置web.xml檔案如下
<listener> <listener-class> listener.ServletContextAttributeListenerDemo </listener-class></listener>
這個時候啟動伺服器是沒有效果顯示的
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1142542029-6.png" title="圖片5.png" />
這個時候為了看出我們設定的application,可以寫一個JSP頁面
application_attribute_add.jsp<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%><html><head><title>WEB開發項目</title></head><body><% //設定application範圍屬性 this.getServletContext().setAttribute("info","http://zhaoyuqiang.blog.51cto.com");%></body></html>
啟動伺服器,然後在瀏覽器中輸入:http://localhost:8080/test/jsp/application_attribute_add.jsp
頁面什麼都東西都沒有 但是看我們的伺服器,如所示:
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1142545J7-7.png" title="圖片6.png" />
當我們重新整理瀏覽器的時候,伺服器顯示替換屬性了,重複重新整理就重複替換,如所示
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/11425431B-8.png" title="圖片7.png" />
那什麼時候可以刪除呢?為了觀察方便,我們再來建立一個JSP頁面
application_attribute_remove.jsp<%@ page language="java" contentType="text/html" pageEncoding="utf-8"%><html><head><title>WEB開發項目</title></head><body><% //設定application範圍屬性 this.getServletContext().removeAttribute("info");%></body></html>
在瀏覽器中輸入:http://localhost:8080/test/jsp/application_attribute_remove.jsp 觀察伺服器效果如下
650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131228/1142541560-9.png" title="圖片8.png" />
監聽器就是實現介面,覆寫方法
以上都是對application實現操作的監聽,session對象額監聽我們下一篇文章再進行學習吧!
本文出自 “趙玉強的部落格” 部落格,請務必保留此出處http://zhaoyuqiang.blog.51cto.com/6328846/1197628