ServletRequest
和HttpServletRequest
的區別
HttpServletRequest
和ServletRequest
都是接口,HttpServletRequest
繼承自ServletRequest
HttpServletRequest
比ServletRequest
多了一些針對於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,刷新再請求次

控制台輸出

Request(HttpServletRequest)
request
是表示一個請求,只要發出一個請求就會創建一個request
,
它的作用域:僅在當前請求中有效。(比session
和application
小)
只在一次請求上(轉發不算請求,因為轉發是服務器端的行為)生效,當把信息返回給客戶端,該對象就被摧毀
HttpServletRequest
具體方法和使用可參考官方文檔:
https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletRequest.html
作者:意識流丶
鏈接:https://www.jianshu.com/p/378c5d035fb9
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。