0

Struts2で

  • アクションはスレッドセーフであり、各リクエストは個別のアクションクラスオブジェクトを開始します。
  • すべてのリクエストに対してオブジェクト上でのみ開始されるため、インターセプターはスレッドセーフではありません。彼らはexecute()メソッドでActionInvocationオブジェクトを受け取り、このオブジェクトを使用してアクションコンテキストにアクセスできます。「 Struts2スレッドのインターセプターは安全ではありませんか?」を参照してください。

これらのことを念頭に置いて、私は

  • 結果は、execute()メソッドでActionInvocationオブジェクトを受け取るため、スレッドセーフではありません。

カスタム結果クラスを作成しているときに、本「ManningStruts2inAction」で次のコード行を見つけました。

ServletActionContext.getResponse()

作成者がactionInvocationオブジェクトを使用して応答を受け取らなかった理由がわかりません。

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

今、私は私の心の中で次の質問があります。

  • 結果はスレッドセーフですか?
  • Resultがスレッドセーフではなく、2つの異なるリクエストがある場合、ServletActionContextはどのように関連する応答を返しますか?
4

1 に答える 1

3

コンテキストはThreadLocalsを使用します。

結果はリクエストごとに明確にインスタンス化されます。StreamResultたとえば、インスタンス変数を使用するなどの単純なものを見contentTypeてください。

于 2012-05-02T13:01:00.107 に答える