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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Java监听器中ServletRequestListener监听Request的创建和销毁的更多相关文章

  1. Listener 监听对象的创建和销毁

    HttpSessionListener.ServletContextListener.ServletRequestListener分别用于控制Session.context.request的创建和销毁 ...

  2. 监听域对象创建和销毁的Listener

    1.什么是Servlet监听器? 先来看看什么是监听器.监听器是专门用于对其它对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时立即采取相应的行动.Servlet监听器是S ...

  3. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  4. Android零基础入门第34节:Android中基于监听的事件处理

    原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...

  5. java多个listener监听

    java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...

  6. Android 关于ListView中按钮监听的优化问题(方法一)

    在Android应用开发过程中经常会用到ListView,并且每次在item中都要对点击事件进行监听.在给按钮添加OnClickListener时,一般会下意识的在getView()中找到每一个But ...

  7. spring中配置监听队列的MQ

    一.spring中配置监听队列的MQ相关信息注:${}是读取propertites文件的常量,这里忽略.绿色部分配置在接收和发送端都要配置.  <bean id="axx" ...

  8. 新建Oracle数据库时,提示使用database control配置数据库时,要求在当前oracle主目录中配置监听程序

    新建一个oracle数据库时,当提示使用database control配置数据库时,要求在当前oracle主目录中配置监听程序等字样的时候,问题是那个监听的服务没有启动,解决方法如下: 打开cmd命 ...

  9. Android中如何监听GPS开启和关闭

    转自 chenming 原文 Android中如何监听GPS开启和关闭   摘要: 本文简单总结了如何监听GPS开关的小技巧 有时需要监听GPS的开关(这种需求并不多见).实现的思路是监听代表 GPS ...

随机推荐

  1. 2014百度之星 Party

    Party Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. docker系列之三:docker实际应用

    以Docker为基础完成持续集成.自动交付.自动部署: 原理: RD推送代码到git 仓库或者svn等代码服务器上面,git服务器就会通过hook通知jenkins. jenkine 克隆git代码到 ...

  3. HTML5 Canvas实战之刮奖效果【转】

    开源项目地址:https://github.com/artwl/Lottery 作者博客地址:http://www.cnblogs.com/jscode/p/3580878.html 谢谢浏览!

  4. c++打印实心菱形,空心三角形,十字星,空心正方形,实心平行四边形

    今天翻资料的时候,无意间发现了一个文件,是刚接触编程的时候用c++写的一段程序,我称之为"图形打印机",想着把所有图形都打印出来,后来发现其实每种图形的代码都是一个思路,就不想做重 ...

  5. 使用wcftestclient.exe测试时,增加“最大消息大小配额”--maxReceivedMessa

    使用 WcfTestClient.exe工具测试的时候,可能会出现:这样的提示: 已超过传入消息(65536)的最大消息大小配额.若要增加配额,请使用相应绑定元素上的 MaxReceivedMessa ...

  6. 解决Code First MySql数据库 Specified key was too long; max key length is 767 bytes异常

    需要给DbContext加上如下特性: [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] public cla ...

  7. 对Apache2进行简单配置

    Apache2 1.安装Apache2 sudo apt-get update sudo apt-get install apache2 2.启动服务 sudo /etc/init.d/apache2 ...

  8. 【开发笔记】- 修改tomcat默认的编码方式

    tomcat8以后默认编码格式是utf-8:7之前的都是iso8859-1 如果默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找 ...

  9. jQuery事件(四)

    一.基本事件函数下面事件函数中参数相关说明:eventType:事件类型,字符串'click' 'submit'多个事件类型可以通过用空格隔开[一次性绑定'click submit']eventDat ...

  10. 英语kutnahorite金田黄kutnahorite单词

    金田黄是含镁和锰较多的方解石,学名是“镁锰方解石”或者“镁菱锰矿”,英文名为Kutnahorite,也可翻译为“锰白云石”.“金田黄”颜色艳丽,有红色.橙色或者黄色等不同色调,属于艳色方解石的集合体. ...