我们可以每次为struts 1.x动作类创建一个新实例吗?

时间:2011-11-09 07:45:03

标签: java web-applications thread-safety struts struts-1

struts 1.x的操作类本质上不是线程安全的,因为struts缓存了操作类并将其用于其他请求。

有没有什么方法可以配置struts 1.x动作类,每次创建动作类的新实例?

如果可以这样做,是否有任何缺点?

2 个答案:

答案 0 :(得分:3)

最终,当然答案是肯定的:你可以获得Struts 1的完整源代码并将其转换为不打算成为的东西。

应该你?几乎肯定不是。如果您决定采用此措施,请从RequestProcessor.processActionCreate开始。

我和布拉德在一起,但会更强一些:你要做的是一个坏主意。使用会话上下文,应用程序上下文,线程本地,同步等作为框架的使用目的。

通过移出框架的意图,您可以承担一定的技术风险,这些风险应该与您有关。 Struts 1中的 Nothing 使用每个请求的操作进行了测试,因为这不是框架的构建方式。它可能会奏效。它可能会失败。它可能看起来就像它在工作一样。一阵子。直到它没有,你被搞砸了。

IMO按设计使用框架会更有效。你想解决什么问题?可能有一个更好的解决方案,至少不需要一个完整的发布周期来审查修改后的框架的功能。

答案 1 :(得分:0)

不要这样做。正如你所说,它们不是线程安全的。

如果需要为用户保持状态,请将数据存储在数据库中,并将查找键值存储在用户的HTTP_SESSION中。如果(并且仅当)您需要更好的性能,您可以引入缓存策略。

如果您尝试仅针对每个请求存储一些数据,并且不希望或不能使用HTTP_SESSION,那么您可以查看使用ThreadLocal