質問

Struts フレームワークのアクション コントローラーがマルチスレッドであると言われる場合、それは、リクエストを受け取ってモデルに転送するサーブレットのインスタンスが複数あることを意味するのでしょうか。それとも、すべてのリクエストを受け入れる単一のインスタンスがあるという意味ですか?どんなビジュアルでも高く評価されます

役に立ちましたか?

解決

他のほとんどのサーブレットと同様に、各リクエストを処理するために別個のスレッドが作成されます。実装する必要があります SingleThreadedModel インターフェースを使用して、リクエストごとにサーブレットの新しいインスタンスを取得します。

他のヒント

見る http://struts.apache.org/1.x/userGuide/building_controller.html

Struts コントローラー サーブレットは、Action クラスのインスタンスを 1 つだけ作成し、この 1 つのインスタンスを使用してすべてのリクエストを処理します。したがって、スレッドセーフな Action クラスを作成する必要があります。スレッドセーフなサーブレットを作成する場合と同じガイドラインに従ってください。スケーラブルでスレッドセーフな Action クラスを作成するのに役立つ 2 つの一般的なガイドラインを次に示します。

  • ローカル変数のみを使用する - スレッドセーフなコーディングを支援する最も重要な原則は、ローカル変数のみを使用することです。 インスタンス変数ではありません, 、アクションクラスで。ローカル変数は、(JVM によって) 各リクエスト スレッドに割り当てられるスタック上に作成されるため、共有について心配する必要はありません。必要なすべての変数がメソッド パラメーターとして渡される限り、アクションは複数のローカル メソッドに組み込むことができます。これにより、JVM は単一のスレッドに関連付けられたコール スタックを使用してこのような変数を内部的に処理するため、スレッドの安全性が確保されます。

  • 資源を節約する - 一般的なルールとして、希少なリソースを割り当てて、(ユーザーのセッション内で) 同じユーザーからのリクエスト間でリソースを保持すると、スケーラビリティの問題が発生する可能性があります。たとえば、アプリケーションで JDBC を使用し、ユーザーごとに個別の JDBC 接続を割り当てている場合、サイトが突然 Slashdot に表示されたときに、おそらくスケーラビリティの問題が発生する可能性があります。呼び出した Bean メソッドが例外をスローした場合でも、制御を適切な View コンポーネントに転送する前に、プールを使用してリソース (データベース接続など) を解放するように努める必要があります。

struts 1 はスレッドセーフではありません。ただし、strus 2 に関しては、リクエストごとに 1 つのインスタンスです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top