向请求域共享数据
使用ServletAPI向请求域对象共享数据
- 原理和javaWeb中所学的一样,使用requset.setAttribute()方法
使用ModelAndView向请求域对象共享数据(推荐)
- ModelAndView是一个类,它包含了Model和View的功能
- Model:向请求域中共享数据
- view:设置逻辑视图实现页面跳转
@RequestMapping("/moderview")
public ModelAndView testModelAndView(){
// 返回值是ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
// 向请求域共享数据
modelAndView.addObject("hellokey", "helloValue");
// 设置逻辑视图
modelAndView.setViewName("sucess");
// 一定要将modelAndView返回
return modelAndView;
}
}
如果想在跳转的页面获得请求域数据
th:text="${#httpServletRequest.getAttribute('hellokey')}
th:text="${hellokey}
- `th:text="${#Request.getAttribute(‘hellokey’)}
使用Model,ModelMap,Map向请求域共享数据
Model使用
- 不能自己创建model,因为它是一个接口,需要在控制器方法的形参中获取
- 使用例子
@RequestMapping("/model")
public String testmodel(Model model){
model.addAttribute("yyy", "xxx");//向请求域中添加数据
return "sucess";
}
ModelMap使用
- 在控制器方法形参获得modelMap
- 使用modelMap中的addAttribute向请求域中添加数据
- 控制器方法返回逻辑视图字符串
Map使用
- 在控制器方法的形参位置设置Map<String,Object> map
- 然后再用map.put添加键值对即可
- 控制器方法返回逻辑视图字符串
上面的三种方式的形参其实底层都是通过BindingAwareModeMap来实例化实现的
向会话域(session)和应用域(ServletContext)共享数据
- 如果想会话域和应用域共享数据
- 想要拿到session
- 在request中获取session,如果你使用了形参
HttpServletRequest request
,使用request.getSession()可以获取session并向里添加数据 - 直接在控制器方法中使用
HttpSession session
然后添加数据
- 在request中获取session,如果你使用了形参
- 想要拿到servletContext
- 可以通过request.getServletContext()来获取servletContext
- 可以通过session.getServletContext()来获取servletContext
- session和servletContext
- session保存数据除到非你关闭浏览器
- servletContext保存数据到除非重启服务器
- 即使重启服务器session依旧钝化保存数据除非浏览器关闭,但是idea默认是不保存的,可以改
- 在th语法中,如果想从session和servletContext获取数据
- 使用
${session.xxx}
- 使用
${application.xxxx}
- 使用