SpringMVC学习(六):向session域和application域共享数据

70 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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>

运行:

image.png

image.png