程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> jsp之監聽器

jsp之監聽器

編輯:關於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上下文。  


[java]  //獲得ServletContext  
      ServletContext sctx=getServletContext(); 
      sctx.setAttribute("username","user1"); 
      out.println("已經將username綁定"+"到了ServletContext上面"); 

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


[java]  ServletContext sctx=getServletContext(); 
           String username=(String)sctx.getAttribute("username"); 

ServletContext sctx=getServletContext();
           String username=(String)sctx.getAttribute("username");
配置web.xml:


[html]   <!-- 全局初始化參數 --> 
<context-param> 
    <param-name>version</param-name> 
    <param-value>1.0</param-value> 
</context-param> 
<listener> 
    <listener-class>web.CountListener</listener-class> 
</listener> 

  <!-- 全局初始化參數 -->
 <context-param>
     <param-name>version</param-name>
     <param-value>1.0</param-value>
 </context-param>
 <listener>
     <listener-class>web.CountListener</listener-class>
 </listener>
在servlet中得到該數據:


[java] String version=sctx.getInitParameter("version"); 
          out.println("version:"+version); 

String version=sctx.getInitParameter("version");
       out.println("version:"+version);
最後寫一個統計在線人數的程序,利用到監聽器知識,即觸發某個事件時,對應的方法自動觸發執行:

step1

編寫servlet

[java]  import javax.servlet.ServletContext; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpSession; 
import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 
 
public class CountListener implements HttpSessionListener { 
     //session對象一旦創建成功,會執行該方法  
    private int count=0; 
    public void sessionCreated(HttpSessionEvent arg0) { 
        // TODO Auto-generated method stub  
        count++; 
        HttpSession session=arg0.getSession(); 
        ServletContext sctx=session.getServletContext(); 
        sctx.setAttribute("count", count); 
    } 
     //session對象被銷毀會執行該方法  
    public void sessionDestroyed(HttpSessionEvent arg0) { 
        // TODO Auto-generated method stub  
        count--; 
        HttpSession session=arg0.getSession(); 
        ServletContext sctx=session.getServletContext(); 
        sctx.setAttribute("count", count); 
    } 
      

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class CountListener implements HttpSessionListener {
     //session對象一旦創建成功,會執行該方法
 private int count=0;
 public void sessionCreated(HttpSessionEvent arg0) {
  // TODO Auto-generated method stub
  count++;
  HttpSession session=arg0.getSession();
  ServletContext sctx=session.getServletContext();
  sctx.setAttribute("count", count);
 }
     //session對象被銷毀會執行該方法
 public void sessionDestroyed(HttpSessionEvent arg0) {
  // TODO Auto-generated method stub
  count--;
  HttpSession session=arg0.getSession();
  ServletContext sctx=session.getServletContext();
  sctx.setAttribute("count", count);
 }
    
}step2

配置全局化參數:


[html]  <listener> 
        <listener-class>web.CountListener</listener-class> 
    </listener> 

<listener>
     <listener-class>web.CountListener</listener-class>
 </listener>

 

step3,編寫jsp文件


[html]  <body style="font-size:30px;"> 
      當前系統在線人數是: 
      <%=application.getAttribute("count") %>      
      <%=application.getAttribute("username") %> 
    </br> 
    <a href="logout.jsp">退出系統</a> 
  </body> 

<body style="font-size:30px;">
      當前系統在線人數是:
      <%=application.getAttribute("count") %>    
      <%=application.getAttribute("username") %>
    </br>
    <a href="logout.jsp">退出系統</a>
  </body>
step4,編寫logout.jsp文件


[html] <body> 
   <% 
      session.invalidate(); 
    %> 
 </body> 

 <body>
    <%
       session.invalidate();
     %>
  </body>

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved