struts 1.x的操作类本质上不是线程安全的,因为struts缓存了操作类并将其用于其他请求。
有没有什么方法可以配置struts 1.x动作类,每次创建动作类的新实例?
如果可以这样做,是否有任何缺点?
答案 0 :(得分:3)
最终,当然答案是肯定的:你可以获得Struts 1的完整源代码并将其转换为不打算成为的东西。
应该你?几乎肯定不是。如果您决定采用此措施,请从RequestProcessor.processActionCreate
开始。
我和布拉德在一起,但会更强一些:你要做的是一个坏主意。使用会话上下文,应用程序上下文,线程本地,同步等作为框架的使用目的。
通过移出框架的意图,您可以承担一定的技术风险,这些风险应该与您有关。 Struts 1中的 Nothing 使用每个请求的操作进行了测试,因为这不是框架的构建方式。它可能会奏效。它可能会失败。它可能看起来就像它在工作一样。一阵子。直到它没有,你被搞砸了。
IMO按设计使用框架会更有效。你想解决什么问题?可能有一个更好的解决方案,至少不需要一个完整的发布周期来审查修改后的框架的功能。
答案 1 :(得分:0)
不要这样做。正如你所说,它们不是线程安全的。
如果需要为用户保持状态,请将数据存储在数据库中,并将查找键值存储在用户的HTTP_SESSION中。如果(并且仅当)您需要更好的性能,您可以引入缓存策略。
如果您尝试仅针对每个请求存储一些数据,并且不希望或不能使用HTTP_SESSION,那么您可以查看使用ThreadLocal