最初のリクエストではなく、サーバーの起動時に struts2 アクションを実行する必要があります。
4 に答える
アプリケーションの起動時にデータをロードすることは一般的なタスクです。Web でいくつかの例を見つけることができます。他の回答で述べたように、ServletContextListener (Struts2 固有ではない) を実装する必要があります...ここで素晴らしい例を読むことができます。
ここで重要なことは、アクションの概念を理解することです。
(Struts2 MVC
モデル ビュー コントローラー) フレームワークでは、 anAction
はController
(および の一部Model
) です。
Action
Request
s は、 s からのsによって呼び出されますClient
(そして、1 つの Action がすべての要求で作成されるため、スレッドセーフです)。
これは、クライアントが必要であることを意味します。これは、通常、PC の前にいる人がブラウザをクリックすることを意味します...その場合、クライアント呼び出しは、共有オブジェクトに対して自動化されたサーバー側操作を実行するための適切なトリガーではありません。
もちろんlazy-initialitazion
、最初のユーザーが Application スコープで何かをセットアップし、他のユーザーが既に入力されているオブジェクトを取得するように、(カスタム インターセプターの助けを借りて) 何らかの形式を実装することもできますが、これはそうではありません。それを行う最良の方法(初期化時に並行性を処理する必要があり、最初のユーザーは1人で、サーバーが起動時に夜間に実行できる操作を待機しています...)。
ServletContextListenerを記述します。これは、Webアプリケーションごとに1つだけ使用可能であり、アプリケーションがデプロイされるときにインスタンス化されます。
これが投稿です
Web アプリケーション(サーブレット コンテキストとも呼ばれる) の初回起動時に何らかのコードを実行する場合は、テクノロジによって提供されるフックを利用する必要があります。サーブレット API は、Web アプリケーションのさまざまなライフサイクル段階でコードを起動するために使用するライフサイクル フックを提供します。すべての Struts 2 アプリケーションはサーブレット API Web アプリケーションであるため、これを自分で活用できます。
ServletContextListenerインターフェイスは、init フック メソッドを提供します。このインターフェースを実装し、実装を web.xml に登録するだけです。
必要なことがより Struts 2 固有のものである場合は、Struts 2 API 自体から何かを利用することを検討できます。
サーブレットとjspの起動時の負荷は以下のように存在します
サーバーの起動時にページをロードするように要求できます。これは、web.xml
ファイルを介して行われます
<servlet>
<servlet-name>login</servlet-name>
<jsp-file>/login.jsp</jsp-file>
<load-on-startup>1</load-on-startup>
</servlet>
通常、jsp ファイルは最初のヒットでコンパイルされます。コードは、最初のヒットを待たずに jsp ファイルをプリコンパイルするように指示します。
For struts2 you can change programatically in web.xml
<listener>
<listener-class>your listener class</listener-class>
</listener>
このリンクを参照してください。