SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户
SpringMVC视图的种类很多,默认有转发视图和重定向视图
当工程引入jstl的依赖,转发视图会自动转换为JstlView
若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,由此视图解析器解析之后所得到的是ThymeleafView

ThymeleafView

当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置的视图解析器解析,视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转

  1. @RequestMapping("/testHello")
  2. public String testHello(){
  3. return "hello";
  4. }

转发视图

SpringMVC中默认的转发视图是InternalResourceView
SpringMVC中创建转发视图的情况:
当控制器方法中所设置的视图名称以”forward:”为前缀时,创建InternalResourceView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀”forward:”去掉,剩余部分作为最终路径通过转发的方式实现跳转(只能跳转到th可以转发的路径,不能直接跳转到HTML路径,还需要被th渲染)
例如”forward:/“,”forward:/employee”

  1. @RequestMapping("/testForward")
  2. public String testForward(){
  3. return "forward:/testHello";
  4. }

想要转发到testHello,如果不加forward会转发给视图解析器加上前缀后缀

重定向视图

SpringMVC中默认的重定向视图是RedirectView
当控制器方法中所设置的视图名称以”redirect:”为前缀时,创建RedirectView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀”redirect:”去掉,剩余部分作为最终路径通过重定向的方式实现跳转
例如”redirect:/“,”redirect:/employee”

  1. @RequestMapping("/testRedirect")
  2. public String testRedirect(){
  3. return "redirect:/testHello";
  4. }

重定向是一次新的请求,不能直接访问webinfo下
与转发的区别是,浏览器地址栏会发生变化
重定向视图在解析时,会先将redirect:前缀去掉,然后会判断剩余部分是否以/开头,若是则会自动拼接上下文路径

视图控制器view-controller

当控制器方法中,仅仅用来实现页面跳转,即只需要设置视图名称时,可以将处理器方法使用view-controller标签进行表示

  1. <!--
  2. path:设置处理的请求地址
  3. view-name:设置请求地址所对应的视图名称
  4. -->
  5. <mvc:view-controller path="/testView" view-name="success"></mvc:view-controller>

注: 当SpringMVC中设置任何一个view-controller时,其他控制器中的请求映射将全部失效,此时需要在SpringMVC的核心配置文件中设置开启mvc注解驱动的标签:

jsp方式

  1. 创建module
  2. 创建web工程,配置工程路径
  3. 在web.xml中配置
    1. 配置filter字符过滤器
    2. 配置DispatcherServlet指定springMVC配置文件
  4. 配置springMVC
    1. 组件扫描
    2. 使用InternalResourceViewController代替Thymeleaf视图解析器



  1. WEB-INF下创建index.jsp

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4. <title>Title</title>
    5. </head>
    6. <body>
    7. <h1>Hello World</h1>
    8. <!-- EL表达式 -->
    9. <a href="${pageContext.request.contextPath}/success">success.jsp</a>
    10. </body>
    11. </html>
  2. 创建Controller类

    1. @Controller
    2. public class TestController {
    3. @RequestMapping("/success")
    4. public String test() {
    5. return "success";
    6. }
    7. }
  3. WEB-INF/templates下创建success.jsp

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <html>
    3. <head>
    4. <title>Title</title>
    5. </head>
    6. <body>
    7. 成功
    8. </body>
    9. </html>

    如果return的view没有任何前缀或者以forward为前缀的时候,将会被InternalResourceView解析 如果以redirect为前缀,创建RedirectView视图