4

簡単に言うと、JSPでグローバル変数を作成して、他のJSPページ間やフレーム/ iframe内でアクセスできるようにするにはどうすればよいですか?<%!..%>を試しましたが、別のjspページで変数を解決できないというエラーが発生しました。クエリ文字列やセッション変数などに頼らずに、複数のページでJSP変数にアクセスすることも可能ですか?

ありがとうございました。

4

1 に答える 1

4

すでにコメントしたように、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>
于 2012-04-11T14:49:37.997 に答える