1

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

4

3 回答 3

1

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

于 2008-09-20T13:00:19.337 回答
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 方法引发了异常。

于 2009-04-29T14:55:50.337 回答
1

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

于 2010-09-12T11:09:08.137 回答