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
等事情。