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`实现类 由容器管理为单例 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。