2012-05-02 23 views
0

在Struts2中Struts2結果,線程安全性和操作上下文?

  • 動作是線程安全的,每個請求都會啓動一個單獨的動作類對象。
  • 攔截器不是線程安全的,因爲只有在所有請求的對象上纔會啓動攔截器。他們在execute()方法中接收ActionInvocation對象,並可以使用此對象訪問操作上下文。請參閱「Are Interceptors in Struts2 Thread UNsafe?

記住這些事情,我相信他們收到ActionInvocation對象在他們的execute()方法

  • 結果不是線程安全的。

在創建自定義結果類時,我在「Manning Struts2 in Action」一書中找到了以下代碼行。

ServletActionContext.getResponse() 

我很困惑,爲什麼作者沒有使用actionInvocation對象即

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

現在我已經按照我的腦海裏的問題得到響應。

  • 結果線程安全嗎?
  • 如果Result不是線程安全的並且有兩個不同的請求,ServletActionContext如何返回相關響應?

回答

3

上下文使用ThreadLocal s。

結果顯然是實例化的每個請求 - 看看一些簡單的東西,如StreamResult:它使用像contentType等事物的實例變量。

+0

謝謝@DaveNewton。你使事情簡潔而簡單。 Struts2結果是線程安全的,上下文使用ThreadLocal。 –