SpringMVC中的视图是View接口,视图的作用是渲染数据,将模型model中的数据展示给用户, SpringMVC中的视图的种类很多,默认有转发和重定向视图,使用了thymeleaf视图技术,在SpringMVC的配置文件中设置了thymeleaf的视图解析器,则次试图解析后是一个thymeleafview
thymeleafview
当控制器中返回的方法中说设置的视图名称没有任何前缀,此时视图名称会被配置文件中的视图解析器解析,视图名称拼接试图前缀和视图后缀得到的最终路径,会通过转发的方式实现
@RequestMapping("/thymeleafview")
public String thymeleafview(){
return "success";
}
@RequestMapping("/View")
public String View(){
return "View";
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>视图</title>
</head>
<body>
<a th:href="@{/thymeleafview}">测试thymeleafview</a>
</body>
</html>
我们大断点调试访问http://localhost:8080/SpringMVC01/View
这里的mv里的view就是我们的success
进入render方法可以看到视图View是thymeleafview
转发视图
SpringMVC中默认的转发视图是InternalResourceView,当我们在使用forward为前缀的的时候第一次解析的view对象是InternalResourceView,此时的是视图名称不会被解析,而是在去找对象的方法的去掉forwadr前缀的剩余部分的Controller控制器方法,实现跳转,最终解析称themeleafView,如下两图
重定向视图
springMVC的重定向视图是ReidirectView,跟转发一样,会去掉前缀拿到实际的最终路径.如下图先是一个ReidirectView,再解析为一个themeleafView
转发和重定向的区别
- 转发是一次请求,,重定向是两次请求 是浏览器的次数
- 转发地址不变,重定向地址变
- 转发可以获取请求域的对象,重定向不可以。转发是浏览器的一次请求,用到的请求对象是同一个,对象是同一个,所以转发可以获取数据,重定向是浏览器的两次请求,不是一个对象
- 转发是在服务器内部的 不能跨域, 重定向是浏览器发送了两次请求,所以可以跨域
视图控制器
当控制器方法中,仅仅用来实现页面跳转,即只需要设置视图名称时,可以将处理器方法使用view-controller标签进行表示
<!-- path:设置处理的请求地址 view-name:设置请求地址所对应的视图名称 --> <mvc:view-controller path="/testView" view-name="success"></mvc:view-controller>
- 当SpringMVC中设置任何一个view-controller时,其他控制器中的请求映射将全部失效,此时需要在SpringMVC的核心配置文件中设置开启mvc注解驱动的标签:<mvc:annotation-driven />