目录
二 使用ModelAndView向request域对象共享数据
- @RequestMapping("/testServletAPI")
- public String testServletAPI(HttpServletRequest request){
- request.setAttribute("testScope", "hello,servletAPI");
- return "success";
- }
<a th:href="@{/test/mav}">测试通过ModelAndView向请求域共享数据a><br>
-
- /*
- * * 向域对象共享数据:
- * 1、通过ModelAndView向请求域共享数据
- * 使用ModelAndView时,可以使用其Model功能向请求域共享数据
- * 使用View功能设置逻辑视图,但是控制器方法一定要将ModelAndView作为方法的返回值
- * */
-
-
- @Controller
- public class TestScopeController {
-
- @RequestMapping("/test/mav")
- public ModelAndView testMAV(){
- /**
- * ModelAndView包含Model和View的功能
- * Model:向请求域中共享数据
- * View:设置逻辑视图实现页面跳转
- */
- ModelAndView mav = new ModelAndView();
- //向请求域中共享数据
- mav.addObject("testRequestScope", "hello,ModelAndView");
- //设置逻辑视图
- mav.setViewName("success");
- return mav;
- }
- }
- html>
- <html lang="en" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>首页title>
- head>
- <body>
- <h1>success.htmlh1>
- <p th:text="${testRequestScope}">p>
- body>
- html>
总结 :
向域对象共享数据: 1、通过ModelAndView向请求域共享数据 使用ModelAndView时,可以使用其Model功能向请求域共享数据 使用View功能设置逻辑视图,但是控制器方法一定要将ModelAndView作为方法的返回值
<a th:href="@{/test/model}">测试通过Model向请求域共享数据a><br>
- /* 2、使用Model向请求域共享数据 */
-
- @RequestMapping("/test/model")
- public String testModel(Model model){
- //org.springframework.validation.support.BindingAwareModelMap
- System.out.println(model.getClass().getName());
- model.addAttribute("testRequestScope", "hello,Model");
- return "success";
- }
3 测试
<a th:href="@{/test/map}">测试通过map向请求域共享数据a><br>
- /*4、使用map向请求域共享数据*/
- @RequestMapping("/test/map")
- public String testMap(Map
map) { - //org.springframework.validation.support.BindingAwareModelMap
- System.out.println(map.getClass().getName());
- map.put("testRequestScope", "hello,map");
- return "success";
- }
<a th:href="@{/test/modelMap}">测试通过ModelMap向请求域共享数据a><br>
- /*3、使用ModelMap向请求域共享数据*/
- @RequestMapping("/test/modelMap")
- public String testModelMap(ModelMap modelMap){
- //org.springframework.validation.support.BindingAwareModelMap
- System.out.println(modelMap.getClass().getName());
- modelMap.addAttribute("testRequestScope", "hello,ModelMap");
- return "success";
- }
Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的
输入类型
System.out.println(modelMap.getClass().getName());
System.out.println(map.getClass().getName());
System.out.println(model.getClass().getName());
查看源码BindingAwareModelMap
按二次Shift
BindingAwareModelMap extends ExtendedModelMap
Ctrl+左健
ExtendedModelMap extends ModelMap
ModelMap extends LinkedHashMap
LinkedHashMapextends HashMap
总结:
5、Model和ModelMap和map的关系 * 其实在底层中,这些类型的形参最终都是通过BindingAwareModelMap创建 * public class BindingAwareModelMap extends ExtendedModelMap {} * public class ExtendedModelMap extends ModelMap implements Model {} * public class ModelMap extends LinkedHashMap{}
- <a th:href="@{/test/session}">测试向会话域共享数据a><br>
- <a th:href="@{/test/application}">测试向应用域共享数据a><br>
- @RequestMapping("/test/session")
- public String testSession(HttpSession session){
- session.setAttribute("testSessionScope", "hello,session");
- return "success";
- }
-
- @RequestMapping("/test/application")
- public String testApplication(HttpSession session){
- ServletContext servletContext = session.getServletContext();
- servletContext.setAttribute("testApplicationScope", "hello,application");
- return "success";
- }
- <p th:text="${session.testSessionScope}">p>
- <p th:text="${application.testApplicationScope}">p>
现在我们先把网址复制一下 然后 关闭浏览器
在打开浏览器 粘贴上刚才复制的网址
会现在这时session的数据没有了 只有application 因为application还没有关闭
现在我们从新部暑 然后在往seiion中共享一个数据
现在在重新重启服务器 重新部暑