Struts2 结果、线程安全和操作上下文



In Struts2

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

牢记这些事情,我相信

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

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

ServletActionContext.getResponse()

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

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

现在我心里有以下问题。

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

上下文使用 ThreadLocal s。

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

最新更新