java - Servlet 过滤器与 ServletRequestListener

标签 java listener servlet-filters

我想将 JPA EntityManager 绑定(bind)到每个请求的当前线程(通过 ThreadLocal),这可以通过 ServletRequestListener 或 Filter 完成。听众看起来更干净,在这种情况下我不需要过滤器的额外可能性。但也许过滤器有一个我错过的优势。

我应该使用 Servlet 过滤器还是 ServletRequestListener 来做到这一点?

最佳答案

就您的目的而言,没有太大区别。但是从某种意义上说,监听器是“更干净”的,因为阅读您的代码的人会立即知道此代码的目的不可能是拦截请求或更改请求或执行过滤器可以执行的其他操作。

例如,Spring 使用 ServletRequestListener 来允许未使用 Spring 自己的 Web MVC 框架的基于 Web 的 Spring 应用程序仍然可以访问特定于 Web 的功能,例如 session 范围的 bean。参见 this doc .

编辑:为了更清楚,我提到了 Spring 的 RequestContextListener,因为它完全您所说的:创建一个 ThreadLocal 对象来存储可以在请求的其余部分访问的数据生命周期。

关于java - Servlet 过滤器与 ServletRequestListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1970285/

相关文章:

Javascript动态方法调用

java - 使用过滤器向用户 session 添加 cookie

java - 泽西响应过滤器

java - 为嵌入式 Jetty 中的多个路径添加 servlet 过滤器

java接口(interface)泛型转换问题

android - 按钮和 OnClick 监听器

java - 如何在 Firebase 中订购 'subdata'?

java - Android:如何从首选项 Activity 类调用主类的方法?

java - 将包+类名转换为 .class 文件名

java - double 的内存容量有精度限制吗?