Struts2结果,线程安全和动作上下文?

时间:2012-05-02 07:19:45

标签: java struts2 web

在Struts2中

  • 操作是线程安全的,每个请求都会启动一个单独的操作类对象。
  • 拦截器不是线程安全的,因为只为所有请求启动了对象。它们在execute()方法中接收ActionInvocation对象,并可以使用此对象访问操作上下文。请参阅“Are Interceptors in Struts2 Thread UNsafe?

记住这些事情,我相信

  • 结果不是线程安全的,因为它们在execute()方法中接收ActionInvocation对象。

在创建自定义结果类时,我在“Manning Struts2 in Action”一书中找到了以下代码行。

ServletActionContext.getResponse()

我很困惑为什么作者没有使用actionInvocation对象得到响应,即

actionInvocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);

现在我脑子里有以下问题。

  • 结果线程是否安全?
  • 如果Result不是线程安全的,并且有两个不同的请求,ServletActionContext如何返回相关的响应?

1 个答案:

答案 0 :(得分:3)

上下文使用ThreadLocal s。

结果显然是按请求实例化的 - 看看简单的事情,比如StreamResult:它使用实例变量来处理contentType等事情。