Servlet过滤器与ServletRequestListener

dea*_*mon 7 java listener servlet-filters

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

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

Dan*_*Dan 7

为了你的目的,没有太大的区别.但是听众是"更清洁"的,因为读取你的代码的人会立即知道这段代码的目的不是拦截请求或改变它或做其他过滤器可以做的事情.

例如,Spring使用ServletRequestListener来允许不使用Spring自己的Web MVC框架的Spring基于Web的应用程序访问特定于Web的功能,例如会话范围的bean.看到这个文档.

编辑:为了更清楚,我提到了Spring的RequestContextListener,因为它完全符合你所说的:创建一个ThreadLocal对象来存储可以在整个请求生命周期的整个过程中访问的数据.