服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringMVC域对象共享数据示例详解

SpringMVC域对象共享数据示例详解

2023-02-06 15:36把苹果咬哭的测试笔记 Java教程

这篇文章主要为大家介绍了SpringMVC域对象共享数据示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

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,

SpringMVC域对象共享数据示例详解

可以看到展示出了获取到的 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:

SpringMVC域对象共享数据示例详解

获取成功。

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

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

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

测试一下:

SpringMVC域对象共享数据示例详解

获取成功。

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

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

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

测试一下:

SpringMVC域对象共享数据示例详解

获取成功。

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

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

测试一下:

SpringMVC域对象共享数据示例详解

获取成功。

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:

SpringMVC域对象共享数据示例详解

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域对象共享数据示例详解的详细内容,更多关于SpringMVC域对象共享数据的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/wessonlan/article/details/124812960

延伸 · 阅读

精彩推荐
  • Java教程JAVA随机打乱数组顺序的方法

    JAVA随机打乱数组顺序的方法

    这篇文章主要介绍了JAVA随机打乱数组顺序的方法,包含了随机数的应用及数组的排序等操作,是Java操作数组的典型应用,需要的朋友可以参考下 ...

    shichen20143052019-12-06
  • Java教程Java多线程之线程安全问题详解

    Java多线程之线程安全问题详解

    这篇文章主要为大家详细介绍了Java多线程之线程安全问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能...

    小小茶花女8622022-08-16
  • Java教程详解在Spring中如何使用AspectJ来实现AOP

    详解在Spring中如何使用AspectJ来实现AOP

    这篇文章主要介绍了详解在Spring中如何使用AspectJ来实现AOP,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    deniro5592021-05-12
  • Java教程面试突击:synchronized和ReentrantLock有什么区别?

    面试突击:synchronized和ReentrantLock有什么区别?

    synchronized 是 JVM 层面通过监视器(Monitor)实现的,而 ReentrantLock 是通过 AQS(AbstractQueuedSynchronizer)程序级别的 API 实现。...

    Java面试真题解析8702022-04-25
  • Java教程java阶乘计算获得结果末尾0的个数代码实现

    java阶乘计算获得结果末尾0的个数代码实现

    今天偶然看到一个要求,求1000~10000之间的数n的阶乘并计算所得的数n!末尾有多少个0?要求: 不计算 只要得到末尾有多少个0就可以了,看下面的代码吧 ...

    java代码网6252019-10-23
  • Java教程Java实现局域网聊天小程序

    Java实现局域网聊天小程序

    这篇文章主要为大家详细介绍了Java实现局域网聊天小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    NiuPlus10652022-12-19
  • Java教程Spring中的refresh方法分析

    Spring中的refresh方法分析

    这篇文章主要介绍了Spring中的refresh方法分析,文章围绕主题展开详细的refresh方法相关资料介绍,需要的小伙伴可以参考一下...

    斜月11402022-11-30
  • Java教程Activiti开发环境的配置

    Activiti开发环境的配置

    本篇文章主要内容介绍了Activiti开发环境的配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    光仔December8182021-04-24