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