目录
2.1 通过 ServletAPI (HttpServletRequest) 向 request 域对象共享数据
2.2 通过 ModelAndView 向 request 域对象共享数据
2.3 通过 Model 向 request 域对象共享数据
2.5 通过 ModelMap 向 request 域对象共享数据
1 域对象介绍
众所周知,JavaWeb 有四大域,分别是 Page 域 (PageContext)、Request 域、Session 域、Application 域 (ServletContext)。域对象都是 Map 对象,用于在同一范围内的不同组件之间传递和共享数据。这些域对象使得数据能够在不同的请求处理过程中被访问和修改,从而支持多种 Web 应用的数据交互需求。
域对象必有的方法:
// 存储数据
setAttribute(name,value);
// 获取数据
getAttribute(name);
// 删除数据
removeAttribute(name);
四大域对象的作用范围:
- pageContext:只有在当前 JSP 页面有效,几乎不用,可用来获取项目上下文路径 (${pageContext.request.contextPath})
- request:一次请求,多个资源共享数据
- session:一次会话,多次请求,多个资源共享数据
- servletContext:一个应用,多次会话,多次请求,多个资源共享数据
作用范围:pageContext < request < session < servletContext
四大域对象的生命周期:
- pageContext:JSP 请求时创建,响应后销毁
- request:请求时创建,响应后销毁
- session:第一次调用时创建 (HttpSession session = request.getSession();) ,直到服务器超时(默认为 30 分钟),或者手动调用 invalidate() 方法,或者服务器非正常关闭时销毁
- servletContext:应用程序启动时创建,应用程序关闭时销毁
参考文档:JAVA中的四大域对象总结_java四个域名对象分别代表了什么-CSDN博客
详细了解,请搜索 JavaWeb 四大域对象
注:以下文档参考 尚硅谷文档,看了好多篇,篇篇差不多
2 向 request 域对象共享数据
request 是使用最频繁的域对象,SpringMVC 提供了以下几种接口或类向 request 域对象共享数据,分别是 ServletAPI (HttpServletRequest)、ModelAndView、Model、Map、ModelMap,这些底层还是 Request。
2.1 通过 ServletAPI (HttpServletRequest) 向 request 域对象共享数据
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request){
request.setAttribute("testScope", "hello,servletAPI");
return "success";
}
可以在 success.jsp 或 success.html 中通过 key 获得 request 域对象中的值
<%@ page contentType="text/html;charset=UTF-8" %>
<!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>${testScope}</p>
</body>
</html>
2.2 通过 ModelAndView 向 request 域对象共享数据
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
/**
* ModelAndView 有 Model 和 View 的功能
* Model 主要用于向 request 请求域共享数据
* View 主要用于设置视图,实现页面跳转
*/
ModelAndView mav = new ModelAndView();
// 向 request 请求域共享数据
mav.addObject("testScope", "hello,ModelAndView");
// 设置视图,实现页面跳转
mav.setViewName("success");
return mav;
}
2.3 通过 Model 向 request 域对象共享数据
@RequestMapping("/testModel")
public String testModel(Model model){
model.addAttribute("testScope", "hello,Model");
return "success";
}
2.4 通过 map 向 request 域对象共享数据
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
map.put("testScope", "hello,Map");
return "success";
}
2.5 通过 ModelMap 向 request 域对象共享数据
@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
modelMap.addAttribute("testScope", "hello,ModelMap");
return "success";
}
3 向 session 域对象共享数据
@RequestMapping("/testSession")
public String testSession(HttpSession session){
session.setAttribute("testSessionScope", "hello,session");
return "success";
}
4 向 servletContext 域对象共享数据
需要通过 session 域对象获取 servletContext 域对象
@RequestMapping("/testApplication")
public String testApplication(HttpSession session){
ServletContext application = session.getServletContext();
application.setAttribute("testApplicationScope", "hello,application");
return "success";
}