jsp之監聽器

(1)什麼是監聽器?
是servlet規範當中定義的一種特殊的組件,用來監聽容器產生的事件並且進行相應的處理。
容器會產生兩大類事件: a,生命週期相關的事件:容器創建或者銷燬request,session,ServletContext(servlet上下文)這些對象時產生的事件。b,綁訂相關的事件:
對request,session,ServletContext(servlet上下文)調用了setAttribute,removeAttribute產生的事件。
(2)如何寫一個監聽器?
step1, 寫一個java類,實現相應的監聽器接口(要看監聽的事件類型: HttpSessionListener)。
step2, 在監聽器接口對應的方法裏面,實現監聽的處理邏輯。
step3,註冊(web.xml)
(3)ServletContext
1)什麼是Servlet上下文?
容器在啓動的時候,會爲每一個應用創建唯一的一個
符合ServletContext接口的一個對象。該對象會一直存在,
除非關閉容器。
2)如何獲得servlet上下文?
a,GenericServlet提供了getServletContext方法。
b,ServletConfig提供了getServletContext方法。
c, FilterConfig提供了getServletContext方法。
d, HttpSession提供了getServletContext方法。
3)servlet上下文的作用?
a,綁訂相關的方法
setAttribute,removeAttribute,getAttribute
request,session,ServletContext這三個對象都有綁訂
相關的方法,應該優先使用生命週期短(request<session
<servlet上下文)的。
b, 訪問全局的初始化參數
step1, 使用<context-param>來配置,該參數可以被
所有的servlet,filter訪問。
step2, 使用ServletContext提供的getInitParameter方法
來獲取參數值。
c, 獲得實際部署時的物理路徑。

String getRealPath(String path);

通過代碼先了解一下servletContext,即servlet上下文。   

  1. //獲得ServletContext  
  2.       ServletContext sctx=getServletContext();  
  3.       sctx.setAttribute("username","user1");  
  4.       out.println("已經將username綁定"+"到了ServletContext上面");  
輸出通過servletContext得到的內容:
  1. ServletContext sctx=getServletContext();  
  2.            String username=(String)sctx.getAttribute("username");  

配置web.xml:
  1.  <!-- 全局初始化參數 -->  
  2. <context-param>  
  3.     <param-name>version</param-name>  
  4.     <param-value>1.0</param-value>  
  5. </context-param>  
  6. <listener>  
  7.     <listener-class>web.CountListener</listener-class>  
  8. </listener>  

在servlet中得到該數據:
  1. String version=sctx.getInitParameter("version");  
  2.           out.println("version:"+version);  

最後寫一個統計在線人數的程序,利用到監聽器知識,即觸發某個事件時,對應的方法自動觸發執行:

step1

編寫servlet

  1. import javax.servlet.ServletContext;  
  2. import javax.servlet.http.HttpServlet;  
  3. import javax.servlet.http.HttpSession;  
  4. import javax.servlet.http.HttpSessionEvent;  
  5. import javax.servlet.http.HttpSessionListener;  
  6.   
  7. public class CountListener implements HttpSessionListener {  
  8.      //session對象一旦創建成功,會執行該方法  
  9.     private int count=0;  
  10.     public void sessionCreated(HttpSessionEvent arg0) {  
  11.         // TODO Auto-generated method stub  
  12.         count++;  
  13.         HttpSession session=arg0.getSession();  
  14.         ServletContext sctx=session.getServletContext();  
  15.         sctx.setAttribute("count", count);  
  16.     }  
  17.      //session對象被銷燬會執行該方法  
  18.     public void sessionDestroyed(HttpSessionEvent arg0) {  
  19.         // TODO Auto-generated method stub  
  20.         count--;  
  21.         HttpSession session=arg0.getSession();  
  22.         ServletContext sctx=session.getServletContext();  
  23.         sctx.setAttribute("count", count);  
  24.     }  
  25.        
  26. }  
step2

配置全局化參數:

  1. <listener>  
  2.         <listener-class>web.CountListener</listener-class>  
  3.     </listener>  


step3,編寫jsp文件

  1. <body style="font-size:30px;">  
  2.       當前系統在線人數是:  
  3.       <%=application.getAttribute("count") %>       
  4.       <%=application.getAttribute("username") %>  
  5.     </br>  
  6.     <a href="logout.jsp">退出系統</a>  
  7.   </body>  

step4,編寫logout.jsp文件
  1. <body>  
  2.    <%  
  3.       session.invalidate();  
  4.     %>  
  5.  </body> 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章