サーブレットContextListenerは、サーバの起動と停止時にキャッシュを作成および停止します.

2222 ワード

サーブレットContextは、サーブレットプログラムによってWebコンテナと通信するために使用される.たとえば、ログを書き込み、リクエストを転送します.各Webアプリケーションは、Webアプリケーション内の各プログラムによって共有されるContextを含む.Contextはリソースを保存して共有できるので、私が知っているサーブレットContextの最大のアプリケーションはWebキャッシュです.頻繁に変更しないコンテンツをメモリに読み込むので、サーバがリクエストに応答するときに遅いディスクI/Oを行う必要はありません.
サーブレットContextListenerは、サーブレットContextのリスナーです.サーブレットContextがサーバ起動時にサーブレットContextが作成されるなど、サーブレットContextが変化すると、サーバがシャットダウンされるとサーブレットContextは破棄されます.
JSPファイルでは、アプリケーションはサーブレットContextのインスタンスであり、JSPコンテナによってデフォルトで作成されます.サーブレットでgetServiceletContext()メソッドを呼び出して、サーブレットContextのインスタンスを取得します.
キャッシュを使用する考え方は、次のようになります.
  • サーバが起動すると、サーブレットContextListenerのcontextInitialized()メソッドが呼び出されるので、中にキャッシュが作成されます.キャッシュコンテンツ生成クラスは、ervletContext.を用いるファイルまたはデータベースから読み出すことができる.setAttribute()メソッドは、サーブレットContextのインスタンスにキャッシュクラスを保存します.
  • プログラムはサーブレットContextを使用する.getAttribute()キャッシュを読み込みます.JSPの場合はa pplicationを使用する.getAttribute().サーブレットの場合はgetServiceletContext()を使用します.getAttribute().アクセス数などのキャッシュが変化した場合は、キャッシュとファイル/データベースを同時に変更できます.あるいは、変化が一定のプログラムに蓄積されてから保存しても、次のステップで保存することができます.
  • サーバがシャットダウンしようとすると、サーブレットContextListenerのcontextDestroyed()メソッドが呼び出されるので、キャッシュの変更が保存されます.変更したキャッシュをファイルまたはデータベースに保存し、元の内容を更新します.
  • import User; //my own class
    import DatabaseManager; // my own class
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextListener;

    public class MyContextListener

    implements ServletContextListener {
    private ServletContext context = null;

    public void contextInitialized(ServletContextEvent event) {
    context = event.getServletContext();
    User user = DatabaseManager.getUserById(1);
    context.setAttribute("user1", user);
    }

    public void contextDestroyed(ServletContextEvent event) {
    User user = (User)context.getAttribute("user1");
    DatabaseManager.updateUserData(user);
    this.context = null;
    }
    }

    布署サーブレットContextListener
    サーブレットContextListenerのコンパイルを実現した後、正しいWEB-INF/classesディレクトリの下に置いて、WEB-INFディレクトリの下のwebを変更します.xmlファイル、web-appノードに追加
    <listener>
    <listener-class>MyServletContextListener</listener-class>
    </listener>