ServletRequestListener简介说明
下文笔者讲述“ServletRequestlistener简介说明”,如下所示
例
ServletRequestListener简介
`ServletRequestListener`是Java Web应用中
用于监听HTTP请求(ServletRequest)生命周期事件
监听器接口
属于Servlet规范一部分
它适用于需要在请求开始和结束时执行某些逻辑的场景
ServletRequestListener作用
`ServletRequestListener` 主要用于: -记录请求日志(如 IP、访问路径、耗时等) -初始化请求级别的资源(如数据库连接、上下文变量) -统计请求次数或并发量 -清理请求结束后占用的资源
ServletRequestListener核心方法
| 方法 | 调用时机 | 说明 |
| requestInitialized(ServletRequestEvent sre) | 每次HTTP请求到达服务器时调用 | 可用于初始化请求相关资源 |
| requestDestroyed(ServletRequestEvent sre) | HTTP请求处理完成后调用(无论是否异常) | 可用于释放资源、记录日志 |
记录请求信息与耗时
public class RequestLoggingListener implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent sre) {
HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
System.out.println("请求开始: " + request.getMethod() + " " + request.getRequestURI());
// 存储开始时间,供销毁时计算耗时
request.setAttribute("startTime", System.currentTimeMillis());
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
long startTime = (Long) request.getAttribute("startTime");
long duration = System.currentTimeMillis() - startTime;
System.out.println("请求结束: " + request.getRequestURI() + ", 耗时: " + duration + "ms");
}
}
web.xml注册监听器
<listener>
<listener-class>com.example.RequestLoggingListener</listener-class>
</listener>
与其他监听器对比
| 监听器类型 | 接口名 | 监听对象 | 典型用途 |
| `ServletRequestListener` | `javax.servlet.ServletRequestListener` | `ServletRequest` | 请求开始/结束处理 |
| `HttpSessionListener` | `javax.servlet.http.HttpSessionListener` | `HttpSession` | 会话创建/销毁处理 |
| `ServletContextListener` | `javax.servlet.ServletContextListener` | `ServletContext` | 应用启动/关闭处理 |
ServletRequestListener注意事项
| 注意点 | 说明 |
| 线程安全 | 每个请求由独立线程处理, 但仍需注意共享变量 |
| 性能影响 | 避免在监听器中执行耗时操作, 影响请求响应速度 |
| 请求范围 | 适用于所有类型的请求(GET、POST 等) |
| 单例性 | 所有`ServletRequestListener`实现类 由容器管理为单例 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


