【发布时间】:2012-04-23 04:47:51
【问题描述】:
servlet 规范(请参阅我之前的问题)保证同一个线程将执行所有过滤器和关联的 Servlet。鉴于此,如果有使用 ThreadLocal 的选项(假设您正确清理),我认为使用 HttpServletRequest.setAttribute 传递数据没有任何用处。我觉得使用ThreadLocal 有两个好处:类型安全和更好的性能,因为没有使用字符串键或映射(可能通过(非字符串)线程 id 进入线程集合除外)。
有人可以确认我是否正确,以便我可以继续放弃setAttribute吗?
【问题讨论】:
-
请求属性首先是用于 JSP 渲染。
-
我没有使用 JSP(“如果可以选择使用
ThreadLocal”),所以这个问题是关于出于其他原因使用它们。 -
那么您希望在哪里/如何使用这些值? 听起来你只是在使用全局变量而不是 DI 或常规参数传递。
-
我主要需要将
User和EntityManager对象从用户和数据库过滤器传输到Servlet。我还发现,在后面的代码中经常和意外地需要这些,我很想在 Servlet 之外使用它们(即在 doGet 调用的嵌套代码中)。我觉得可能有更好的方法来编写更深入的代码 - 建议?但我不觉得过滤器到 Servlet 有更好的方法 - 建议?我没有 JSP/JSF/other-framework 依赖项,我使用的是带有 Servlet 和过滤器的纯 Java。我控制所有代码。谢谢! -
EntityManager是非常通常通过 DI 获得的 - 你应该认真考虑这种方法。
标签: java jakarta-ee servlets servlet-filters thread-local