簡単に言うと、JSPでグローバル変数を作成して、他のJSPページ間やフレーム/ iframe内でアクセスできるようにするにはどうすればよいですか?<%!..%>を試しましたが、別のjspページで変数を解決できないというエラーが発生しました。クエリ文字列やセッション変数などに頼らずに、複数のページでJSP変数にアクセスすることも可能ですか?
ありがとうございました。
簡単に言うと、JSPでグローバル変数を作成して、他のJSPページ間やフレーム/ iframe内でアクセスできるようにするにはどうすればよいですか?<%!..%>を試しましたが、別のjspページで変数を解決できないというエラーが発生しました。クエリ文字列やセッション変数などに頼らずに、複数のページでJSP変数にアクセスすることも可能ですか?
ありがとうございました。
すでにコメントしたように、ServletContextを使用して、すべてのアプリケーションの変数を維持できます。これを静的変数と混同しないでください。アプリケーションがアンデプロイされると ServletContext は終了しますが、静的変数は JVM がオフになるまで有効です。
setAttribute
メソッドを使用して、変数を ServletContext に保存できます。また、 を使用して実際の値を取得することもできますgetAttribute
。サーブレットの ServletContext のサンプルを見てみましょう。
public class SomeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext servletContext = getServletContext();
String someAttribute = servletContext.getAttribute("someAttribute");
System.out.println("someAttribute value: " + someAttribute);
}
}
また、ServletContext の Listener を使用できるため、アプリケーションの開始時 (正しくデプロイされたとき) にコードを実行して、ServletContext の属性を初期化し、終了時 (アンデプロイ前) にコードを実行できます。
public final class MyAppListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
System.out.println("Application gets started.");
ServletContext servletContext = event..getServletContext();
servletContext.setAttribute("someAttribute", "Hello world!");
}
public void contextDestroyed(ServletContextEvent event) {
System.out.println("Application has finished.");
}
}
Java EE 5 を使用している場合は、web.xml でリスナーを構成する必要があります。
<listener>
<listener-class>mypackage.listener.MyAppListener</listener-class>
</listener>