1.三个域对象
1.1.请求域:request
接口名:HttpServletRequest,equest对象代表了一次请求,一次请求一个request。
应用场景:A转发到B,两者可通过request共享资源
1.2.会话域:session
接口名:HttpSession,session对象代表了一次会话。从打开浏览器开始访问,到最终浏览器关闭,这是一次完整的会话。每个会话session对象都对应一个JSESSIONID,而JSESSIONID生成后以cookie的方式存储在浏览器客户端。浏览器关闭,JSESSIONID失效,会话结束。
应用场景:保存用户的登录状态
1.3.应用域:application
接口名:ServletContext,application对象代表了整个web应用,服务器启动时创建,服务器关闭时销毁。对于一个web应用来说,application对象只有一个。
应用场景:记录网站的在线人数
2.request域对象
在request域中共享数据方式:使用原生Servlet API方式;使用Model接口;使用Map接口;使用ModelMap类;使用ModelAndView类
2.1.原生Servlet API方式
//存数据
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request){
// 向request域中存储数据
request.setAttribute("testRequest", "原生Servlet API实现request域数据共享");
return "view";
}
//取数据
<div th:text="${testRequest}"></div>
2.2. Model接口
@RequestMapping("/testModel")
public String testModel(Model model){
// 向request域中存储数据
model.addAttribute("testRequest", "Model接口实现request域数据共享");
return "view";
}
2.3.Map接口
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
// 向request域中存储数据
map.put("testRequest", "Map接口实现request域数据共享");
return "view";
}
2.4.ModelMap类
@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
// 向request域中存储数据
modelMap.addAttribute("testRequest", "ModelMap实现request域数据共享");
return "view";
}
2.5.ModelAndView类
实例封装了Model和View,这个类既封装业务处理之后的数据,也体现了跳转到哪个视图。
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
// 创建“模型与视图对象”
ModelAndView modelAndView = new ModelAndView();
// 绑定数据
modelAndView.addObject("testRequest", "ModelAndView实现request域数据共享");
// 绑定视图
modelAndView.setViewName("view");
// 返回
return modelAndView;
}
3.session域对象
常见的方式:原生Servlet API;SessionAttributes注解
3.1.原生Servlet API
//存数据
@RequestMapping("/testSessionScope1")
public String testServletAPI(HttpSession session) {
// 向会话域中存储数据
session.setAttribute("testSession", "原生Servlet API实现session域共享数据");
return "view";
}
//取数据
<div th:text="${session.testSession}"></div>
3.2. 使用SessionAttributes注解
如果没有 SessionAttributes注解,默认存储到request域中。
@Controller
@SessionAttributes(value = {"x", "y"})
public class SessionScopeTestController {
@RequestMapping("/testSession")
public String testSessionAttributes(ModelMap modelMap){
// 向session域中存储数据
modelMap.addAttribute("x", "张三");
modelMap.addAttribute("y", "李四");
return "view";
}
}
4.application域对象
@RequestMapping("/testApplicationScope")
public String testApplicationScope(HttpServletRequest request){
// 获取ServletContext对象
ServletContext application = request.getServletContext();
// 向应用域中存储数据
application.setAttribute("application", "全局数据");
return "view";
}