一、域对象共享数据 (思考:为什么要进行域共享数据 WEB-INF下的资源需要转发访问 转发:需要共享数据; 重定向:不需要共享数据)
a、通过ServletAPI向request域对象共享数据 (SpringMVC框架搭建参考之前)
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> 欢迎进入首页! <a th:href="@{/testServletAPI}">通过ServletAPI向request域对象共享数据</a> </body> </html>
/** * @author guoc * @date 2023/3/1 16:22 * note : 域对象共享数据 1: request域 2: session域 3: Application域 * warn : 为什么要域共享数据? */ @Controller public class ScopeController { @RequestMapping("testServletAPI") public String testServletAPI(HttpServletRequest request){ request.setAttribute("testScope","根据权威报告,勒布朗詹姆斯将会休战二周左右,以为季后赛做准备!"); return "success"; } }
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>登陆成功</title> </head> <body> 恭喜您登录成功! <p th:text="${testScope}"></p> </body> </html>
页面效果:
b、通过ModelAndView向request域对象共享数据
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> 欢迎进入首页!<br> <a th:href="@{/testModelAndView}">通过ModelAndView向request域对象共享数据</a> </body> </html> @RequestMapping("testModelAndView") public ModelAndView testModelAndView(){ /** * ModelAndView有Model和View的功能 * Model主要用于向请求域共享数据 * View主要用于设置视图,实现页面跳转 */ ModelAndView mav = new ModelAndView(); // 向请求域共享数据 mav.addObject("testScope","根据权威报告,勒布朗詹姆斯将会休战二周左右,以为季后赛做准备!"); // 设置视图,实现页面跳转 mav.setViewName("success"); return mav; } <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>登陆成功</title> </head> <body> 恭喜您登录成功! <p th:text="${testScope}"></p> </body> </html>
页面效果:
c、通过Model向request域对象共享数据
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> 欢迎进入首页!<br> <a th:href="@{/testModel}">通过Model向request域对象共享数据</a> </body> </html> @RequestMapping("testModel") public String testModel(Model model){ model.addAttribute("testScope","根据权威报告,勒布朗詹姆斯将会休战二周左右,以为季后赛做准备!"); return "success"; } <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>登陆成功</title> </head> <body> 恭喜您登录成功! <p th:text="${testScope}"></p> </body> </html>
页面效果:
d、通过Map向request域对象共享数据
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> 欢迎进入首页!<br> <a th:href="@{/testMap}">通过Map向request域对象共享数据</a> </body> </html> @RequestMapping("testMap") public String testMap(Map<String,Object> map){ map.put("testScope","湖人今年能进季后赛吗!"); return "success"; } <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>登陆成功</title> </head> <body> 恭喜您登录成功! <p th:text="${testScope}"></p> </body> </html>
e、通过ModelMap向request域对象共享数据
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> 欢迎进入首页!<br> <a th:href="@{/testModelMap}">通过ModelMap向request域对象共享数据</a> </body> </html> @RequestMapping("testModelMap") public String testModelMap(ModelMap modelMap){ modelMap.addAttribute("testScope","希望今天湖人战胜雷霆!"); return "success"; } <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>登陆成功</title> </head> <body> 恭喜您登录成功! <p th:text="${testScope}"></p> </body> </html>
f、Model、ModelMap、map之间的关系
Model、ModelMap、Map类型的参数其实本质上都是BingingAwareModelMap类型的 该类是这三个类的实现类
g、控制器方法执行之后都会返回统一的ModelAndView对象(源码分析)
h、ServletAPI向session域对象共享数据
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <a th:href="@{/testSession}">通过ServletAPI向session域对象共享数据</a><br> </body> </html> @RequestMapping("testSession") public String testSession(HttpSession httpSession){ httpSession.setAttribute("testScope","希望今天湖人战胜雷霆!"); return "success"; } <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>登陆成功</title> </head> <body> 恭喜您登录成功! <p th:text="${session.testScope}"></p> </body> </html>
i、ServletAPI向Application域对象中共享数据
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> 欢迎进入首页!<br> <a th:href="@{/testApplication}">通过ServletAPI向application域对象共享数据</a><br> </body> </html> @RequestMapping("testApplication") public String testApplication(HttpSession httpSession){ ServletContext application = httpSession.getServletContext(); application.setAttribute("testScope","恭喜湖人战胜雷霆,离季后赛更近了一步!"); return "success"; } <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>登陆成功</title> </head> <body> 恭喜您登录成功! <p th:text="${application.testScope}"></p> </body> </html>