开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情
一、域对象
1. 域对象的作用
就是在一定范围内可以共享数据,通常有 3 种:
- request: 一次请求,多个资源共享数据
- session: 默认一次会话,多个请求,多个资源共享数据
- servletContext: 一个应用,多个会话,多个请求,多个资源共享同一份数据
2. 域对象生命周期
- request: 创建-请求开始,销毁-响应结束
- session: 创建-第一次调用,销毁- tomcat超时三十分钟(默认)、或者手动调用invalidate()、或者服务器非正常关闭
- servletContext: 创建-启动时,销毁-关闭时
3. 简而言之:
在同一个客户访问服务器时,如果发生了响应重定向,则之前的request域中存在的数据就会丢失,所以出现Session域对象,用来记录是否是同一个客户进行访问,进行会话跟踪,并进行数据存储和获取。
二、演示
具体的逻辑和上篇博客:# SpringMVC学习(五):向request域对象共享数据的五种方法 差不多,这里就直接贴代码了:
向session域共享数据:
@RequestMapping(value = "testSession")
public String testSession(HttpSession httpSession){
httpSession.setAttribute("testSession","hello");
return "success";
}
index.html:
<a th:href="@{/testSession}">测试Session</a>
success.html
<p th:text="${session.testSession}"></p>
运行:
向application域中共享数据:
@RequestMapping(value = "testApplication")
public String testApplication(HttpSession session){
ServletContext application = session.getServletContext();
application.setAttribute("testApplication","hello");
return "success";
}
index.html:
<a th:href="@{/testApplication}">测试Application</a>
success.html:
<p th:text="${application.testApplication}"></p>
运行: