tomcat 服務器的幾個重要監聽 方法 與 使用


1.

總結一下tomcat 服務器里的三種監聽

ServletContextListener

HttpSessionListener

ServletRequestListener

 

這是我要做的三個自定義重寫 類 分別繼承上面三個接口

 

2具體源碼

 

 

(1) ServletContextListener  

用於監聽服務器的啟動與關閉

 1 package cn.cen2guo.clinic.listener;
 2 
 3 
 4 import javax.servlet.ServletContextEvent;
 5 import javax.servlet.ServletContextListener;
 6 
 7 
 8 /**
 9  * 用於監聽服務器的啟動與關閉
10  */
11 public class MyServletContextListener implements ServletContextListener {
12     @Override
13     public void contextInitialized(ServletContextEvent sce) {
14 //        System.out.println("創建ServletContext對象");
15     }
16 
17     @Override
18     public void contextDestroyed(ServletContextEvent sce) {
19 //        System.out.println("銷毀ServletContext對象");
20     }
21 }
MyServletContextListener

 

(2) HttpSessionListener

用於監聽session的創建與銷毀

 1 package cn.cen2guo.clinic.listener;
 2 
 3 
 4 import javax.servlet.http.HttpSessionEvent;
 5 import javax.servlet.http.HttpSessionListener;
 6 
 7 /**
 8  * 用於監聽session的創建於銷毀,目前沒啥用處
 9  */
10 
11 public class MyHttpSessionListener implements HttpSessionListener {
12 
13     @Override
14     public void sessionCreated(HttpSessionEvent se) {
15 //        System.out.println("session 被創建了");
16 //        System.out.println(se.getSession().getId());
17     }
18 
19     @Override
20     public void sessionDestroyed(HttpSessionEvent se) {
21 //        System.out.println("session 被銷毀了");
22 //        System.out.println(se.getSession().getId());
23 //        System.out.println("銷毀結束");
24     }
25 
26 
27 }
MyHttpSessionListener

 

(3)ServletRequestListener

用於監聽每一次請求 的開始【初始化】 與結束【銷毀】

package cn.cen2guo.clinic.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;



/**
 * 用於監聽每一次請求,
 */
//使用注解@WebListener 和 @Component ,則不需要去web.xml文件里注冊監聽 ,
//同時spring掃面也不需要特意設定可以掃描到這里 ,但是仍然可以識別,這就很舒服了
//@WebListener
//@Component
public class MyServletRequestListener implements ServletRequestListener {

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
//        System.out.println("requestInitialized 初始化");
    }


    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
//        System.out.println("requestDestroyed 銷毀");
    }
    
}
MyServletRequestListener

 

 

 

3.  注冊監聽有兩種,任意一種都可以:

  方法一:使用spring注解 

 

 

   

  方法二 : 去web.xml文件注冊監聽標簽

 

 

 

 

4.心得 

 (1) 服務器開啟,servletcontextListener首先被使用。servletcontext被創建了;

服務器關閉的前一刻才會觸發其銷毀監聽內容

(2)  網頁向controller請求,ServletRequestListener 首先檢測出來,
執行了他的requestInitialized 方法,即初始化request;等待contronller事務結束后,才出發servletRequestListener的銷毀事件

(3)並不是每次前端向服務器請求 都會 驗證要不要創建Session  ,而是當服務器調用了HttpServletRequest.getSession(true) 后,

才會創建一個服務器內獨一無二的session會話  ,其session id 則是自動分配一個無序的字符串,[得到兩個一樣的幾率非常低]

然后才保存在前端[一般在cookie里面]。

(4)session 可以設置存活時間,到期后自動注銷 ,但往往都是默認值,每當前端瀏覽器關閉后,session才開始以默認期限倒計時,

等待時間到后才銷毀,並不是瀏覽器一關閉,就會銷立馬銷毀 ,當然,也沒必要手動對其銷毀,讓其自毀自滅就行,

根據這一特性,就無法讓服務器判斷前端用戶是否仍在,想要實現這個功能,只能使用websocket 或者長輪詢,長輪詢太消耗資源了,不建議使用,

websocket則是最好的方式!!!

(5) 從Tomcat設置的cookie路徑來看,它對不同的應用程序設置的cookie路徑是不同的,這樣不同的應用程序所用的session id是不同的,因此即使在

同一個瀏覽器窗口里訪問不同的應用程序,發送給服務器的session id也可以是不同的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM