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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。
