我想在JSP中创建一个全局会话,用于所有Servlet和JSP文件,就像在PHP中使用指令一样:
<?php
session_start ();
?>
试过:
HttpSession s = request.getSession ();
并设置。它可以工作,但是我必须从一个类到另一个类进行多次传递,以便将它放在另一个JSP文件中。
我该怎么办?
答案 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)
默认情况下,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。