SpringMVC域对象共享数据

一、域对象

1. 域对象的作用

就是在一定范围内可以共享数据,通常有 3 种:

  • request: 一次请求,多个资源共享数据
  • session: 默认一次会话,多个请求,多个资源共享数据
  • servletContext: 一个应用,多个会话,多个请求,多个资源共享同一份数据

2. 域对象生命周期

  • request: 创建-请求开始,销毁-响应结束
  • session: 创建-第一次调用,销毁- tomcat超时三十分钟(默认)、或者手动调用invalidate()、或者服务器非正常关闭
  • servletContext: 创建-启动时,销毁-关闭时

3. 使用原则

在满足需求的前提下,能选择小范围的就不选择大范围的。

举例,一个查询列表场景,这种一般放在 request 域中,当然了放在更大的2个里面也可以,但是没必要。

因为除了查询还同时会存在增删改的功能,所以我们要每次去查询一次才可以保证数据是最新的,这时候如果放在更大的域比如 session 中,那么在一次请求中只会用到一次,其他时候这个空间就浪费掉了。

二、向域对象共享数据

1. 向 request 域对象共享数据

(1)使用 servletAPI 向 request 域对象共享数据

@Controller
public class ScopeController {
    @RequestMapping("/testServletAPI")
    public String testServletAPI(HttpServletRequest request){
        request.setAttribute("testScope", "hello,servletAPI");
        return "success";
    }
}

在控制器方法里,设置 request 域对象中的数据,key 是testScope,value是"hello,servletAPI",最后这个请求转发到了 success.html 上。

那么在 success.html 中就可以获得域对象中的数据了,直接使用 key:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>success</p>
<p th:text="${testScope}"></p>
</body>
</html>

现在访问http://localhost:8080/springmvc/testServletAPI,

可以看到展示出了获取到的 request 域中共享的数据。

(2)使用 ModelAndView 向 request 域对象共享数据

ModelAndView 有 Model和 View的功能,Model主要用于向请求域共享数据,View主要用于设置视图,实现页面跳转。这种也是 springMVC 建议使用的方式。

注意控制器方法必须要返回 ModelAndView 类型的对象。

@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
    /**
     * ModelAndView有Model和View的功能
     * Model主要用于向请求域共享数据
     * View主要用于设置视图,实现页面跳转
     */
    ModelAndView mav = new ModelAndView();
    //向请求域共享数据
    mav.addObject("testScope", "hello,ModelAndView");
    //设置视图,实现页面跳转
    mav.setViewName("success");
    return mav;
}

访问一下http://localhost:8080/springmvc/testModelAndView:

获取成功。

(3)使用 Model 向 request 域对象共享数据

这里的 Model 其实就是上面 ModelAndView 中的 Model 。

@RequestMapping("/testModel")
public String testModel(Model model){
    model.addAttribute("testScope", "hello,Model");
    return "success";
}

测试一下:

获取成功。

(4)使用 map 向 request 域对象共享数据

还可以使用 map 集合来实现,这时候向 map 集合中存放的数据,就是要共享的数据:

@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
    map.put("testScope", "hello,Map");
    return "success";
}

测试一下:

获取成功。

(5)使用 ModelMap 向 request 域对象共享数据

@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
    modelMap.addAttribute("testScope", "hello,ModelMap");
    return "success";
}

测试一下:

获取成功。

Model、ModelMap、Map的关系

Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的。

分别查看源码可知如下关系:

public interface Model{}
public class ModelMap extends LinkedHashMap<String, Object> {}
public class ExtendedModelMap extends ModelMap implements Model {}
public class BindingAwareModelMap extends ExtendedModelMap {}

2. 向 session 域共享数据

直接使用 servlet 原生的 HttpSession 即可:

@RequestMapping("/testSession")
public String testSession(HttpSession session){
    session.setAttribute("testSessionScope", "hello,session");
    return "success";
}

success 页面也需要修改了,通过 session.testSessionScope获取数据展示:

... ...
<p th:text="${session.testSessionScope}"></p>
... ...

重新部署访问http://localhost:8080/springmvc/testSession:

3. 向 application 域共享数据

其实这里的 application 指的就是 ServletContext 对象,用 session.getServletContext() 来获取即可:

@RequestMapping("/testApplication")
public String testApplication(HttpSession session){
	ServletContext application = session.getServletContext();
    application.setAttribute("testApplicationScope", "hello,application");
    return "success";
}

success.html 修改:

... ...<p th:text="${application.testApplicationScope}"></p>... ...

重新部署访问http://localhost:8080/springmvc/testApplication:

获取成功。

感谢《尚硅谷》的学习资源。

以上就是SpringMVC域对象共享数据示例详解的详细内容,更多关于SpringMVC域对象共享数据的资料请关注Devmax其它相关文章!

SpringMVC域对象共享数据示例详解的更多相关文章

  1. JSP中springmvc配置validator的注意事项

    这篇文章主要介绍了JSP中springmvc配置validator的注意事项的相关资料,并说明springmvc中spring-servlet.xml、applicationContext.xml的区别需要的朋友可以参考下

  2. SpringMVC拦截器和异常处理器使用示例超详细讲解

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。本文将详细讲讲SpringMVC中拦截器参数及拦截器链配置,感兴趣的可以尝试一下

  3. SpringMVC数据页响应ModelAndView实现页面跳转

    本文主要介绍了SpringMVC数据页响应ModelAndView实现页面跳转,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. SpringMVC静态资源配置过程详解

    在javaweb项目中配置了DispatcherServlet的情况下,如果不进行额外配置的话,几乎所有的请求都会走这个servlet来处理,默认静态资源按路径是访问不到的会报404错误,下面就来讲一讲如何配置才能访问到静态资源吧

  5. 详解SpringMVC中的四种跳转方式、视图解析器问题

    这篇文章主要介绍了SpringMVC的四种跳转方式、视图解析器,springmvc核心配置文件和视图解析器的使用,添加视图解析器,通过案例讲解四种跳转方式,需要的朋友可以参考下

  6. 详解SpringMVC的两种实现方式

    这篇文章主要介绍了SpringMVC的两种实现方式,方式一是通过实现Controller接口,方式二是使用注解开发,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下

  7. SpringMVC程序简单实例

    这篇文章主要介绍了SpringMVC程序简单实例的相关资料,需要的朋友可以参考下

  8. SpringMVC常用注解载入与处理方式详解

    这篇文章主要介绍了SpringMVC常用注解载入的方式和处理的方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. SpringMVC上传文件的简单实例

    这篇文章主要介绍了SpringMVC上传文件的简单实例的相关资料,需要的朋友可以参考下

  10. SpringMVC RESTFul实现列表功能

    这篇文章主要为大家介绍了SpringMVC RESTFul实现列表功能详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部