2

初期化に依存する Web アプリケーションがあります (つまり、いくつかのスレッドを開始する必要があります)。

何かのようなもの:

public Class Init {
   private static resource ....
   static {
      // my initialization
   }

   public static void init(){}
}

そのため、すべての初期化をInit クラスに入れ、すべての JSP ページで.init()メソッドを呼び出さなければなりません... init メソッドは空です。彼の目的は、Init クラスの初期化を開始することです。これは、初期化が一度だけ開始されたと私が考えたものです。

しかし、任意のページ (またはサーブレット) で .init() メソッドを手動で呼び出す必要があります...最初に呼び出されたページ (この初期化があるページ) が必要なことを行い、この時点以降、他のすべてのページが保護されます ('causeリソースはすでに初期化されています)。しかし、1 ページを見逃して、ユーザーがそのページを呼び出した場合、これには 1 週間のスポットがあります...

アプリケーションの起動後に Tomcat に初期化を自動的に実行するように指示する方法はありますか?

4

1 に答える 1

4

を利用することができますServletContextListener。クラスにInitこのインターフェースを実装させます。必要に応じて、初期化コードを静的ブロックからcontextInitialized()メソッドに移動できます。

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class Init implements ServletContextListener {

  private static resource;

  public void contextInitialized(ServletContextEvent sce) {
    // your initialization
  }

  public void contextDestroyed(ServletContextEvent sce) { 
    // empty  
  }
}

以下を追加して、リスナーをTomcatに登録する必要があることに注意してくださいweb.xml

<listener>
  <listener-class>package.path.to.Init</listener-class>
</listener>

ServletContext(sce.getServletContext() を呼び出す)にもアクセスできるようになったため、 (選択した場合) 何かをコンテキスト属性として登録し、アプリケーション内の任意のサーブレットまたは JSP で使用できるようにすることができます。

于 2013-05-19T15:01:54.757 に答える