サーブレット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()メソッドが呼び出されるので、キャッシュの変更が保存されます.変更したキャッシュをファイルまたはデータベースに保存し、元の内容を更新します.
布署サーブレットContextListener
サーブレットContextListenerのコンパイルを実現した後、正しいWEB-INF/classesディレクトリの下に置いて、WEB-INFディレクトリの下のwebを変更します.xmlファイル、web-appノードに追加
サーブレットContextListenerは、サーブレットContextのリスナーです.サーブレットContextがサーバ起動時にサーブレットContextが作成されるなど、サーブレットContextが変化すると、サーバがシャットダウンされるとサーブレットContextは破棄されます.
JSPファイルでは、アプリケーションはサーブレットContextのインスタンスであり、JSPコンテナによってデフォルトで作成されます.サーブレットでgetServiceletContext()メソッドを呼び出して、サーブレットContextのインスタンスを取得します.
キャッシュを使用する考え方は、次のようになります.
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>