struts动作控制器 - 多线程?

时间:2008-09-20 12:52:19

标签: java-ee struts

当他们说struts框架中的动作控制器是多线程时,是否意味着有多个servlet实例接收请求并将其转发给模型。或者它是否意味着有一个单一实例接受所有请求?任何视觉效果都将受到赞赏

3 个答案:

答案 0 :(得分:1)

与大多数其他servlet一样,创建了一个单独的线程来处理每个请求。您必须实现SingleThreadedModel接口以获取每个请求的新servlet实例。

答案 1 :(得分:1)

请参阅http://struts.apache.org/1.x/userGuide/building_controller.html

Struts控制器servlet只创建一个Action类实例,并使用这一个实例为所有请求提供服务。因此,您需要编写线程安全的Action类。遵循用于编写线程安全Servlet的相同准则。以下是两条通用指南,可帮助您编写可伸缩的,线程安全的Action类:

  • 仅使用局部变量 - 帮助线程安全编码的最重要原则是在Action中仅使用局部变量非实例变量类。在由(由JVM)分配给每个请求线程的堆栈上创建局部变量,因此无需担心共享它们。只要所有需要的变量都作为方法参数传递,就可以将Action作为几个局部方法的因素。这确保了线程安全,因为JVM使用与单个线程关联的调用堆栈在内部处理此类变量。

  • 节省资源 - 作为一般规则,分配稀缺资源并将其保持在来自同一用户(在用户会话中)的请求中可能会导致可伸缩性问题。例如,如果您的应用程序使用JDBC并为每个用户分配单独的JDBC连接,那么当您的站点突然出现在Slashdot上时,您可能会遇到一些可伸缩性问题。在将控制转发到适当的View组件之前,您应该努力使用池和释放资源(例如数据库连接) - 即使您调用的bean方法抛出异常。

答案 2 :(得分:1)

struts 1不是线程安全的;但对于strus 2,它是每个请求的一个实例。