3

サーブレットを作成しましたが、起動するたびに、着信要求を受け入れる前に、いくつかのコード スレッドを実行して完了する必要があります。スレッドが完了するまでに数分かかる場合があり、データベースおよびファイル システムとの大幅なインターフェイスが必要になります。

サーブレットを作成するのは初めてで、このコードを挿入するのに最適な場所を知りたいです。つまり、サーブレットの init() メソッドは、このコードに最適な (または適切な) 場所ですか?

ありがとう
サイモン

4

1 に答える 1

0

幸運なことに、そのような初期化のためのクラスがあります。Web アプリケーションで、javax.servlet.ServletContextListener を実装するクラスを追加します。web.xml で、そのリスナー クラスを追加して、Web コンテナーがそれを実行することを認識できるようにする必要があります。

その時点で、contextInitialized と contextDestroyed という 2 つのメソッドを実装する必要があります。リクエストを受け入れる前に Web アプリケーションの開始時に 1 回だけ起動され、最後に 1 回だけ起動されることが保証されます (重大なエラーがない場合)。

これらのスレッドが終了するまで待ちたい場合は、スレッドを開始し、Thread.join を使用して完了するまで待機し、終了するまでリクエストの受け入れを開始しないようにします。

ServletContextListener の実装方法の詳細については、こちらの優れた例を参照してください。

于 2013-06-11T11:14:03.807 に答える