- SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户
- SpringMVC视图的种类很多,默认有转发视图和重定向视图
- 当工程引入
jstl
的依赖,转发视图会自动转换为JstlView- 若使用的视图技术为
Thymeleaf
,在SpringMVC的配置文件中配置了Thymeleaf
的视图解析器,由此视图解析器解析之后所得到的是ThymeleafView
1.ThymeleafView
- 当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置的视图解析器解析,视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转:
@Controller public class viewController { @RequestMapping("/testThymeleafView") public String testHello(){ return "success"; } }
执行
return "success"
时会调用DispatcherServlet.java
的render
方法,生成的view
对象就是ThymeleafView
:
2.转发视图
SpringMVC中默认的转发视图是
InternalResourceView
SpringMVC中创建转发视图的情况:
- 当控制器方法中所设置的视图名称以
forward:
为前缀时,创建InternalResourceView
视图,此时的视图名称不会被SpringMVC
配置文件中所配置的视图解析器解析(如ThymeleafView
),而是会将前缀forward:
去掉,剩余部分作为最终路径通过转发的方式实现跳转// 会创建两个view,一个是映射testForward的InternalResourceView,一个是转发到testThymeleafView的ThymeleafView @RequestMapping("/testForward") public String testForward(){ return "forward:/testThymeleafView"; }
tips:
- 为什么需要使用默认的转发视图?
// 假设要转发到的不是一个页面,而是一个另一个请求。如果还是使用ThymeleafView,则还是会加上前后缀去匹配页面,明显就不符合要求 @RequestMapping("/testForward") public String testForward(){ return "/testThymeleafView"; }
- 成功执行上述转发后,因为是一个转发所以网址还是http://localhost:8080/SpringMvc/testForward
- 可以将
SpringMVC.xml
中的视图解析器配置为InternalResourceView
,这样就能解析.jsp
页面
3.重定向视图
- SpringMVC中默认的重定向视图是
RedirectView
- 当控制器方法中所设置的视图名称以
redirect:
为前缀时,创建RedirectView
视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀redirect:
去掉,剩余部分作为最终路径通过重定向的方式实现跳转@RequestMapping("/testRedirect") public String testRedirect(){ return "redirect:/testThymeleafView"; }
tips:
- 将redirect:前缀去掉后会判断剩余部分是否以
/
开头,若是则会自动拼接上下文路径- 重定向对应的是两个request对象,转发对应一个request对象
- 重定向
redirect:/testThymeleafView
肯定是一个具体的请求,不可能出现redirect:/a.html
,因为重定向无法访问WEB-INF
下的资源
4.视图控制器view-controller
- 当控制器方法仅用来实现页面跳转,即只需要设置视图名称时,可以将处理器方法使用
viewcontroller
标签进行表示:# sprinMVC.xml <!-- path:设置处理的请求地址 view-name:设置请求地址所对应的视图名称 --> <mvc:view-controller path="/testView" view-name="success"></mvc:view-controller> # 相当于控制器方法: @RequestMapping("/testView") public String test_view(){ return "success"; }
tips:
- 当SpringMVC中设置任何一个
view-controller
时,其他控制器中的请求映射将全部失效(即此时所有控制器方法不能使用),此时需要在SpringMVC的核心配置文件中设置开启mvc注解驱动的标签:# 开启mvc注解驱动 <mvc:annotation-driven />
- 使用了视图控制器并且开启了mvc注解驱动后,如果还是存在控制器方法,优先执行控制器方法上指定的跳转页面