不久前,我写了一篇关于Spring MVC应用程序中HTTP会话的文章。 那是简单的文章,着重于用法的实际方面。 在文章的最后,我保证会写一些更高级的主题,专门针对Spring MVC应用程序中的会话。 因此,我将发布这些东西。
在开始讨论开发过程中出现的会话和最常见的情况之前,我想强调一些事情。 什么是HTTP会话? 它存在什么? 我希望您知道HTTP是无状态协议,这意味着浏览器和服务器之间没有永久连接。 结果服务器不知道谁是请求的发起者,即使一个应用程序只有一个用户也是如此。 该会话是用于识别请求作者的工具。 前面的句子足够粗略,但是它说明了会议的主要目的。 每个用户第一次访问站点时都会获得一个具有唯一标识符的会话。
获取会话ID
您可以以与Java EE应用程序相同的方式在Spring MVC应用程序中访问会话ID。 您只需要在RequestHandler方法的参数中传递HttpSession对象,然后为该会话对象调用适当的方法:
...@RequestMapping(value="/", method=RequestMethod.GET)public ModelAndView mainPage(HttpSession session) {ModelAndView mav = new ModelAndView("home");String sid = session.getId();mav.addObject("sid", sid);return mav; }
...
获取会话属性
当您想访问控制器中的某些会话属性时,可以使用与前面的代码片段相同的构造,但有一些改动:
...
Object someObject = session.getAttribute("nameOfAttribute");
...
如果您确实知道将返回哪种类型的对象,则可以指定显式强制转换。
使用JSTL的JSP中的会话属性
在控制器中将一些值放入会话后,如何使用JSTL在JSP中访问会话值?
@Controller
@SessionAttributes("sValue")
public class NavController {
...@RequestMapping(value="/", method=RequestMethod.GET)public ModelAndView mainPage() {ModelAndView mav = new ModelAndView("home");String sValue = "Some value";mav.addObject("sValue", sValue);return mav; }
...
对sValue会话属性的访问将如下所示:
...
<p>
${sValue}
</p>
...
删除会话
会话的删除非常简单,您只需要为会话对象调用invalidate()方法即可。 执行此操作后,将针对特定用户完全删除该会话。
会话超时
会话超时定义了会话生存期,在此时间内会话有效。 在Java EE应用程序中定义会话超时的最简单方法是在web.xml文件中指定会话超时。 在应用程序的web.xml文件中添加以下代码段以设置会话超时:
<session-config><session-timeout>10</session-timeout>
</session-config>
在上面的示例中,我将会话超时值设置为等于10分钟。
翻译自: https://www.javacodegeeks.com/2013/07/spring-mvc-session-advanced.html