不久前,我写了一篇关于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