1. 属性(共享)域介绍
在 JavaWeb 中,共享域指的是在 Servlet 中存储数据,以便在同一 Web 应用程序的多个组件中进行共享和访问。常见的共享域有四种:ServletContext
、HttpSession
、HttpServletRequest
、PageContext
。
ServletContext
共享域:ServletContext
对象可以在整个 Web 应用程序中共享数据,是最大的共享域。一般可以用于保存整个 Web 应用程序的全局配置信息,以及所有用户都共享的数据。在ServletContext
中保存的数据是线程安全的。HttpSession
共享域:HttpSession
对象可以在同一用户发出的多个请求之间共享数据,但只能在同一个会话中使用。比如,可以将用户登录状态保存在HttpSession
中,让用户在多个页面间保持登录状态。HttpServletRequest
共享域:HttpServletRequest
对象可以在同一个请求的多个处理器方法之间共享数据。比如,可以将请求的参数和属性存储在HttpServletRequest
中,让处理器方法之间可以访问这些数据。PageContext
共享域:PageContext
对象是在 JSP 页面Servlet 创建时自动创建的。它可以在 JSP 的各个作用域中共享数据,包括pageScope
、requestScope
、sessionScope
、applicationScope
等作用域。
共享域的作用是提供了方便实用的方式在同一 Web 应用程序的多个组件之间传递数据,并且可以将数据保存在不同的共享域中,根据需要进行选择和使用。
2. Request级别属性(共享)域
2.1 使用 Model 类型的形参
@RequestMapping("/attr/request/model")
@ResponseBody
public String testAttrRequestModel(// 在形参位置声明Model类型变量,用于存储模型数据Model model) {// 我们将数据存入模型,SpringMVC 会帮我们把模型数据存入请求域// 存入请求域这个动作也被称为暴露到请求域model.addAttribute("requestScopeMessageModel","i am very happy[model]");return "target";
}
2.2 使用 ModelMap 类型的形参
@RequestMapping("/attr/request/model/map")
@ResponseBody
public String testAttrRequestModelMap(// 在形参位置声明ModelMap类型变量,用于存储模型数据ModelMap modelMap) {// 我们将数据存入模型,SpringMVC 会帮我们把模型数据存入请求域// 存入请求域这个动作也被称为暴露到请求域modelMap.addAttribute("requestScopeMessageModelMap","i am very happy[model map]");return "target";
}
2.3 使用 Map 类型的形参
@RequestMapping("/attr/request/map")
@ResponseBody
public String testAttrRequestMap(// 在形参位置声明Map类型变量,用于存储模型数据Map<String, Object> map) {// 我们将数据存入模型,SpringMVC 会帮我们把模型数据存入请求域// 存入请求域这个动作也被称为暴露到请求域map.put("requestScopeMessageMap", "i am very happy[map]");return "target";
}
2.4 使用原生 request 对象
@RequestMapping("/attr/request/original")
@ResponseBody
public String testAttrOriginalRequest(// 拿到原生对象,就可以调用原生方法执行各种操作HttpServletRequest request) {request.setAttribute("requestScopeMessageOriginal", "i am very happy[original]");return "target";
}
2.5 使用 ModelAndView 对象
@RequestMapping("/attr/request/mav")
public ModelAndView testAttrByModelAndView() {// 1.创建ModelAndView对象ModelAndView modelAndView = new ModelAndView();// 2.存入模型数据modelAndView.addObject("requestScopeMessageMAV", "i am very happy[mav]");// 3.设置视图名称modelAndView.setViewName("target");return modelAndView;
}
3. Session级别属性(共享)域
@RequestMapping("/attr/session")
@ResponseBody
public String testAttrSession(HttpSession session) {//直接对session对象操作,即对会话范围操作!return "target";
}
4. Application级别属性(共享)域
解释:springmvc会在初始化容器的时候,将servletContext对象存储到ioc容器中!
@Autowired
private ServletContext servletContext;@RequestMapping("/attr/application")
@ResponseBody
public String attrApplication() {servletContext.setAttribute("appScopeMsg", "i am hungry...");return "target";
}