Java 如何在JSP中创建全局会话?
我想在JSP中创建一个全局会话,以便在所有servlet和JSP文件中使用,就像在PHP中使用以下指令所做的那样:Java 如何在JSP中创建全局会话?,java,php,jsp,servlets,Java,Php,Jsp,Servlets,我想在JSP中创建一个全局会话,以便在所有servlet和JSP文件中使用,就像在PHP中使用以下指令所做的那样: <?php session_start (); ?> 并设置。它可以工作,但我必须从一个类到另一个类进行多次传递,才能将其保存在另一个JSP文件中 我该怎么办?请求。getSession()将在第一次调用时创建会话,后续的getSession()调用将使用相同的会话,只要URL(或cookie)上有可用的会话id 您需要确保在生成从一个页面到另一个页面的链接时调用
<?php
session_start ();
?>
并设置。它可以工作,但我必须从一个类到另一个类进行多次传递,才能将其保存在另一个JSP文件中
我该怎么办?请求。getSession()
将在第一次调用时创建会话,后续的getSession()
调用将使用相同的会话,只要URL(或cookie)上有可用的会话id
您需要确保在生成从一个页面到另一个页面的链接时调用response.encodeUrl(…)
,以便会话ID包含在URL中
例如:www.mysite.com/somePage;JSESSIONID=adfasdfasdfasdf
默认情况下,JSP启用了会话跟踪,并创建了一个新的HttpSession
对象会自动为每个新客户机实例化。禁用
会话跟踪需要通过设置
页面指令会话属性设置为false,如下所示:
然后在servlet中使用session.setAttribute(name,value)
存储会话变量,并使用${name}
(或等效的
)在JSP中检索和输出它们。尝试
ServletContext=event..getServletContext();
然后是servletContext.getSession()。我认为它应该可以工作。您需要一个在应用程序结束前死亡的作用域,并从该作用域中获取会话。您可以使用ServletContext Listener来维护所有应用程序侦听器的变量
ServletContext,以便在应用程序启动(正确部署)到时执行一些代码
初始化ServletContext上的属性)并在其完成时(在其未部署之前)
公共最终类MyAppListener实现ServletContextListener{
公共void contextInitialized(ServletContextEvent事件){
System.out.println(“应用程序启动”);
ServletContext=event..getServletContext();
setAttribute(“someAttribute”,“Hello world!”);
}
公共无效上下文已销毁(ServletContextEvent事件){
System.out.println(“应用程序已完成”);
}
}
如果您使用的是Java EE 5,那么应该在web.xml中配置侦听器
mypackage.listener.MyApplListener
HttpSession s = request.getSession ();
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>