Java監聽器中ServletRequestListener監聽Request的創建和銷毀


ServletRequestHttpServletRequest的區別

HttpServletRequestServletRequest都是接口,HttpServletRequest繼承自ServletRequest
HttpServletRequestServletRequest多了一些針對於Http協議的方法。如getHeader()getMethod()getSession()等等。

HttpServletRequest

客戶端瀏覽器發出的請求被封裝成為一個HttpServletRequest對象。對象包含了客戶端請求信息包括請求的地址,請求的參數,提交的數據,上傳的文件客戶端的ip甚至客戶端操作系統都包含在其內。

工作原理:當HTTP轉發給Web容器處理時,Web容器會收集相關信息,並產生HttpServletRequest對象,使用這個對象可以取得所有HTTP請求中的信息,可以在Servlet中進行處理,也可以轉發給其他的Servlet/Jsp處理。

ServletRequestListener

用於監聽ServletRequest對象的創建和銷毀,一個ServletRequest可以注冊多個ServletRequestListener接口,request創建時調用requestInitialized()request銷毀時調用requestDestroyed()

ServletRequestListener源碼

public interface ServletRequestListener extends EventListener { default void requestDestroyed(ServletRequestEvent sre) { } default void requestInitialized(ServletRequestEvent sre) { } } 

HttpSessionListener監聽器實現代碼

非SpringBoot下

public class RequestListener implements ServletRequestListener{ private final Logger log = LoggerFactory.getLogger(getClass()); @Override public void requestInitialized(ServletRequestEvent sre) { log.info("請求發送"); } @Override public void requestDestroyed(ServletRequestEvent sre) { log.info("請求銷毀"); } } 

然后在web.xml中配置監聽器

<listener>
      <listener-class>監聽器類所在路徑.監聽器名字</listener-class> </listener> 

在SpringBoot中需要加上@WebListener

@WebListener public class RequestListener implements ServletRequestListener{ private final Logger log = LoggerFactory.getLogger(getClass()); @Override public void requestInitialized(ServletRequestEvent sre) { log.info("請求發送"); } @Override public void requestDestroyed(ServletRequestEvent sre) { log.info("請求銷毀"); } } 

需要在啟動類加上@ServletComponentScan

controller層演示發送請求

@RestController public class IndexController { @RequestMapping("/hello") public String hello(){ return "hello"; } } 

啟動測試

訪問http://localhost:8080/hello,刷新再請求次

 
image.png

 

控制台輸出

 
image.png

 

Request(HttpServletRequest)

request是表示一個請求,只要發出一個請求就會創建一個request
它的作用域:僅在當前請求中有效。(比sessionapplication小)
只在一次請求上(轉發不算請求,因為轉發是服務器端的行為)生效,當把信息返回給客戶端,該對象就被摧毀

HttpServletRequest具體方法和使用可參考官方文檔:
https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletRequest.html



作者:意識流丶
鏈接:https://www.jianshu.com/p/378c5d035fb9
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

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



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