6

最初のリクエストではなく、サーバーの起動時に struts2 アクションを実行する必要があります。

4

4 に答える 4

5

アプリケーションの起動時にデータをロードすることは一般的なタスクです。Web でいくつかの例を見つけることができます。他の回答で述べたように、ServletContextListener (Struts2 固有ではない) を実装する必要があります...ここで素晴らしい例を読むことができます。

ここで重要なことは、アクションの概念を理解することです。

(Struts2 MVCモデル ビュー コントローラー) フレームワークでは、 anActionController(および の一部Model) です。

ActionRequests は、 s からのsによって呼び出されますClient(そして、1 つの Action がすべての要求で作成されるため、スレッドセーフです)。

これは、クライアントが必要であることを意味します。これは、通常、PC の前にいる人がブラウザをクリックすることを意味します...その場合、クライアント呼び出しは、共有オブジェクトに対して自動化されたサーバー側操作を実行するための適切なトリガーではありません。

もちろんlazy-initialitazion、最初のユーザーが Application スコープで何かをセットアップし、他のユーザーが既に入力されているオブジェクトを取得するように、(カスタム インターセプターの助けを借りて) 何らかの形式を実装することもできますが、これはそうではありません。それを行う最良の方法(初期化時に並行性を処理する必要があり、最初のユーザーは1人で、サーバーが起動時に夜間に実行できる操作を待機しています...)。

于 2013-01-16T16:24:23.980 に答える
3

ServletContextListenerを記述します。これは、Webアプリケーションごとに1つだけ使用可能であり、アプリケーションがデプロイされるときにインスタンス化されます。

これが投稿です

于 2013-01-16T12:15:04.697 に答える
2

Web アプリケーション(サーブレット コンテキストとも呼ばれる) の初回起動時に何らかのコードを実行する場合は、テクノロジによって提供されるフックを利用する必要があります。サーブレット API は、Web アプリケーションのさまざまなライフサイクル段階でコードを起動するために使用するライフサイクル フックを提供します。すべての Struts 2 アプリケーションはサーブレット API Web アプリケーションであるため、これを自分で活用できます。

ServletContextListenerインターフェイスは、init フック メソッドを提供します。このインターフェースを実装し、実装を web.xml に登録するだけです。

必要なことがより Struts 2 固有のものである場合は、Struts 2 API 自体から何かを利用することを検討できます。

于 2013-01-16T15:36:02.443 に答える
2

サーブレットと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>

このリンクを参照してください。

Loadonstart up

于 2013-01-16T12:28:10.987 に答える