前言
介绍Spring MVC的域对象、视图、转发和重定向
1、域对象共享数据
Spring MVC 提供了多种域对象共享数据的方式,其中最常用的方式如下:
1.1、使用 Servlet API 向 request 域对象中共享数据
服务端代码:
@RequestMapping("toLogin")
public String toLogin(HttpServletRequest request){
request.setAttribute("welcome","hello tiger!");
return "login";
}
前端代码:
<h1 th:text="${welcome}"></h1>
1.2、使用 ModelAndView 向 request 域对象中共享数据
服务端代码:
@RequestMapping("toLogin")
public ModelAndView toLogin(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("welcome","hello tiger!");
modelAndView.setViewName("login");
return modelAndView;
}
前端代码:
<h1 th:text="${welcome}"></h1>
1.3、使用 Model 向 request 域对象中共享数据
@RequestMapping("toLogin")
public String toLogin(Model model){
model.addAttribute("welcome","hello tiger!");
return "login";
}
1.4、使用 Map 向 request 域对象中共享数据
@RequestMapping("toLogin")
public String toLogin(Map<String,Object> map){
map.put("welcome","hello tiger!");
return "login";
}
1.5、使用 ModelMap 向 request 域对象中共享数据
@RequestMapping("toLogin")
public String toLogin(ModelMap modelMap){
modelMap.addAttribute("welcome","hello tiger!");
return "login";
}
1.6、使用 Servlet API 向 session 域中共享数据
@RequestMapping("toLogin")
public String toLogin(HttpSession session){
session.setAttribute("welcome","hello tiger!");
return "login";
}
<h1 th:text="${session.welcome}"></h1>
1.7、使用 Servlet API 向 application 域中共享数据
@RequestMapping("toLogin")
public String toLogin(HttpSession session){
ServletContext application = session.getServletContext();
application.setAttribute("welcome","hello tiger!");
return "login";
}
<h1 th:text="${application.welcome}"></h1>
1.8、thymeleaf集合遍历
<tr th:each="e:${userList}">
<td th:text="${e.userName}"/>
<td th:text="${e.gender}"/>
</tr>
2、视图
在 Spring MVC 中,视图扮演着十分重要的角色,它主要负责整合 Web 资源、对模型数据进行渲染,并最终将 Model 中的数据以特定的形式展示给用户。
实现类 | 说明 |
---|---|
ThymeleafView | Thymeleaf 视图。当项目中使用的视图技术为 Thymeleaf 时,就需要使用该视图类。 |
InternalResourceView | 转发视图,通过它可以实现请求的转发跳转。与此同时,它也是 JSP 视图。RedirectView重定向视图,通过它可以实现请求的重定向跳转。 |
FreeMarkerView | FreeMarker 视图. |
MappingJackson2JsonView | JSON 视图。 |
AbstractPdfView | PDF 视图 。 |
视图划分为两大类:逻辑视图和非逻辑视图
2.1、逻辑视图
逻辑视图最大的特点就是,其控制器方法返回的 ModelAndView 中的 view 可以不是一个真正的视图对象,而是一个字符串类型的逻辑视图名
- 直接在控制器方法中返回字符串类型的逻辑视图名
- 在控制器方法中通过 ModelAndView 提供的 setViewName() 方法设置逻辑视图名
2.2、非逻辑视图
非逻辑视图,则与逻辑视图完全相反,其控制方法返回的是一个真正的视图对象
@RequestMapping("toLogin")
public ModelAndView toLogin(HttpSession session){
ModelAndView modelAndView = new ModelAndView();
UserInfo userInfo = new UserInfo();
userInfo.setUserName("tiger");
userInfo.setGender("man");
modelAndView.addObject(userInfo);
modelAndView.setView(new MappingJackson2JsonView());
return modelAndView;
}
导入以下json解析关联的包
3、转发和重定向
3.1、转发
return "forward:/login"
modelAndView.setViewName("forward:/login");
3.2、重定向
return "redirect:/login"
modelAndView.setViewName("redirect:/login");