当前位置: 首页 > 面试题库 >

ThreadLocal是否比HttpServletRequest.setAttribute(“ key”,“ value”)更好?

秦毅
2023-03-14
问题内容

Servlet规范(请参阅我的上一个问题)保证同一线程将执行所有过滤器和关联的Servlet。鉴于此,HttpServletRequest.setAttribute如果可以使用a选项ThreadLocal(假设您正确清理),我看不到使用传递数据有任何用处。我觉得使用有两个好处ThreadLocal:类型安全和更好的性能,因为没有使用任何字符串键或映射(除非可能是通过(非字符串)线程id进入线程集合)。

有人可以确认我是否正确,以便我可以放弃setAttribute吗?


问题答案:

ThreadLocal是否比HttpServletRequest.setAttribute(“ key”,“ value”)更好?

取决于具体的功能要求。

例如,JSF将储存在FacesContextThreadLocal。这样,您就可以访问所有JSF工件,包括“原始”对象HttpServletRequest以及HttpServletResponse由所执行的代码中的任何位置FacesServlet,例如托管Bean。大多数其他基于Java的MVC框架都遵循相同的示例。

根据您的评论,

我首先需要将User和EntityManager对象从用户和数据库过滤器传输到Servlet。
我还发现,在更深层的代码中经常需要这些功能,而我出乎意料的是,我很想在Servlet之外使用它们(即在doGet调用的嵌套代码中)。我觉得可能有更好的方法来编写更深入的代码-
建议?

User对于我假设这是一个会话属性的示例,我宁愿采用与JSF相同的方法。ThreadLocal<Context>Context您的自定义包装器类中创建一个,其中包含对当前类的引用HttpServletRequest,也许还HttpServletResponse包含对它们的引用,以便您可以在代码中的任何位置访问它们。如有必要,请提供方便的方法来User直接从Context课堂中获取其他信息。

至于EntityManager例如,您可以按照同样的方法,但我个人不把它放在 同一个
ThreadLocal<Context>,而是一个不同。或者更好的是,只需从服务层的JNDI获取它,这将使您对事务进行更精细的控制。无论如何,请绝对确保正确处理提交/关闭。从容器中接管持久性和事务管理应该格外小心。我真的会重新考虑避免使用现有的和设计良好的EJB
/ JPA这样的API /框架,否则您将冒着完全浪费时间重新发明所有已经标准化的API和内容的风险。



 类似资料:
  • Adds or retrieves given value associated with given key. (Don’t confuse with data- attributes) See also Element.removeData Parameters keystringkey to store data valueanyvalue to store Returns: objectE

  • 设置元素属性。需要注意的是,应该始终调用该方法来修改属性,而不是直接 element.xxx = ... 这样的形式,因为后者不会重绘物体。 参数 名称 类型 默认值 描述 key string|Object 设置的属性。可以是 string 类型的属性名称,或者 Object 类型的属性及其值。 value * 属性值。 例子 element.attr('position', [100, 200

  • 在很多情况下,日志内容本身都是一个类似于 key-value 的格式,但是格式具体的样式却是多种多样的。logstash 提供 filters/kv 插件,帮助处理不同样式的 key-value 日志,变成实际的 LogStash::Event 数据。 配置示例 filter { ruby { init => "@kname = ['method','uri','verb'

  • Orient Key/Value Server 是一个基于文档数据库技术的 Key/Value 存储服务器,提供 Java 的 API 和基于 HTTP 的 RESTful 访问,支持集群。

  • 问题内容: 编辑2:有人建议,这是一个类似问题的副本。我不同意,因为我的问题集中在速度上,而另一个问题问的是什么更“可读”或“更好”(没有更好的定义)。尽管问题相似,但讨论/回答存在很大差异。 编辑:我从问题中意识到,我本可以更清楚一些。抱歉,输入错误,是的,应该使用适当的python运算符进行添加。 关于输入数据,我只是选择了一个随机数列表,因为这是一个常见的示例。在我的情况下,我使用的是我期望

  • If you have a relatively small collection of key-values that you’d like to save, you can use the shared_preferences plugin. Normally you would have to write native platform integrations for storing da