struts动作控制器-多线程?
时间:2020-03-06 14:29:00 来源:igfitidea点击:
当他们说Struts框架中的动作控制器是多线程的时,是否表示有多个servlet实例接收请求并将其转发到模型。还是说只有一个实例可以处理所有请求?任何视觉效果将不胜感激
解决方案
与大多数其他servlet一样,将创建一个单独的线程来处理每个请求。我们必须实现SingleThreadedModel
接口才能为每个请求获取servlet的新实例。
参见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方法抛出异常。
支柱1不是线程安全的;但对于第二阶段,每个请求只有一个实例。