6、SpringMVC之视图
注意:本文环境搭建请参考5.2节
6.1、视图概述
-
视图的作用是渲染数据,将模型Model中的数据展示给用户;
-
SpringMVC视图的种类很多,默认有转发视图和重定向视图;
-
SpringMVC中的视图是View接口;
-
当工程引入jstl的依赖,转发视图会自动转换为JstlView;
-
若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,
由此视图解析器解析之后所得到的是ThymeleafView。
6.2、ThymeleafView(常用)
-
当控制器方法中所设置的视图名称没有任何前缀时,视图名称会被SpringMVC配置文件中所配置的视图解析器解析;
-
视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转。
6.2.1、控制器方法示例
注意:此时SpringMVC配置文件中所配置的视图解析器为ThymeleafViewResolver
@RequestMapping("/test/view/thymeleaf")
public String testThymeleafView(){
return "success";
}
6.2.2、页面请求示例
<a th:href="@{/test/view/thymeleaf}">测试SpringMVC的视图ThymeleafView</a>
6.2.3、测试效果
由浏览器地址栏可知,ThymeleafView本质上是转发视图
6.3、InternalResourceView(少用)
-
SpringMVC中默认的转发视图是InternalResourceView;
-
当控制器方法中所设置的视图名称以"forward:"为前缀时,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,
而是会将前缀"forward:"去掉,剩余部分作为最终路径,通过转发的方式实现跳转
6.3.1、控制器方法示例
注意:因为DispatcherServlet接管了所有请求,所以此时请求转发不能直接返回物理视图,但可以调用其他请求
@RequestMapping("/test/view/forward")
public String testInternalResourceView(){
return "forward:/test/view/thymeleaf";
}
6.3.2、页面请求示例
<a th:href="@{/test/view/forward}">测试SpringMVC的视图InternalResourceView</a>
6.3.3、测试效果
6.4、重定向视图
-
SpringMVC中默认的重定向视图是RedirectView;
-
当控制器方法中所设置的视图名称以"redirect:"为前缀时,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,
而是会将前缀"redirect:"去掉,剩余部分作为最终路径,通过重定向的方式实现跳转
6.4.1、控制器方法示例
注意:因为DispatcherServlet接管了所有请求,所以此时重定向不能直接返回物理视图,但可以调用其他请求
@RequestMapping("/test/view/redirect")
public String testRedirectView(){
return "redirect:/test/view/thymeleaf";
}
6.4.2、页面请求示例
<a th:href="@{/test/view/redirect}">测试SpringMVC的视图RedirectView</a>
6.4.3、测试效果
注意:浏览器地址栏显示为重定向的地址
6.5、请求转发和重定向的使用情景
-
请求转发:失败时使用,例如登录失败用请求转发
-
重定向:成功时使用,例如登录成功用重定向
6.6、视图控制器
当控制器方法仅仅用来实现页面跳转(即只需要设置视图名称时),可以使用视图控制器来替代其功能
6.6.1、要被替代的控制器方法示例
6.6.2、视图控制器示例
注意:如果设置了视图控制器,则只有视图控制器所指定的请求路径会被处理,其他请求将全部404;
为了让其他请求也能得到(控制器方法)处理,需要开启mvc的注解驱动
<!--开启mvc的注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
<!--
视图控制器(mvc:view-controller):为指定的请求直接设置(逻辑)视图名称,从而实现页面的跳转
path属性:设置要处理的请求路径
view-name属性:设置要跳转到的逻辑视图
-->
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>
本文来自博客园,作者:Javaer1995,转载请注明原文链接:https://www.cnblogs.com/Javaer1995/p/17761093.html