如何在JSP中创建全局会话?

时间:2014-02-19 11:22:29

标签: java php jsp servlets

我想在JSP中创建一个全局会话,用于所有Servlet和JSP文件,就像在PHP中使用指令一样:

<?php 
session_start ();
?> 

试过:

HttpSession s = request.getSession ();

并设置。它可以工作,但是我必须从一个类到另一个类进行多次传递,以便将它放在另一个JSP文件中。

我该怎么办?

4 个答案:

答案 0 :(得分:1)

您可以使用ServletContext Listener来维护所有应用程序侦听器的变量  ServletContext,因此您可以在应用程序启动(正确部署)时执行一些代码 初始化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.");
    }
}


If you're using Java EE 5, you should configure the listener in the web.xml
<listener>
    <listener-class>mypackage.listener.MyAppListener</listener-class>
</listener>

答案 1 :(得分:0)

request.getSession()将在第一次调用时创建会话,只要会话ID在URL(或cookie)上可用,后续getSession()调用将使用相同的会话。

您需要确保在生成从一个页面到另一个页面的链接时调用response.encodeUrl(...),以便会话ID包含在URL中。

例如:www.mysite.com/somePage;JSESSIONID=adfasdfasdfasdf

答案 2 :(得分:0)

来自tutorialspoint

  

默认情况下,JSP启用了会话跟踪和新的HttpSession   object会自动为每个新客户端实例化。禁用   会话跟踪需要通过设置来明确地将其关闭   page指令会话属性为false,如下所示:   <%@ page session="false" %>

然后,您将在servlet中使用session.setAttribute(name, value)来存储会话变量,并使用${name}(或等效<% out.print(session.getAttribute(name)); %>)来检索并在JSP中输出它们。

答案 3 :(得分:0)

试试  ServletContext servletContext = event..getServletContext(); 然后是servletContext.getSession()。我认为它应该工作。你需要一个范围,直到应用程序结束并从该范围中获取getSession。