• (8)SpringMVC中的视图类型及其特点,以及视图控制器view-controller的配置


    SpringMVC的视图

    转发和重定向的区别及其原理,参考文章

    视图类型及特点

    视图的作用就是将Model中的数据渲染到页面上并展示给用户,SpringMVC中视图对应的View接口有三种实现类对应三种视图解析器

    • 默认有转发视图InternalResourceView重定向视图RedirectView以及ThymeleafView视图,当工程引入jstl的依赖转发视图会自动转换为JstlView
    // 视图接口
    View view; 
    // 获取视图名称
    String viewName = mv.getViewName();
    if (viewName != null) {
        // 解析视图名称,根据视图名称创建对应的视图解析器
        view = resolveViewName(viewName, mv.getModelInternal(),locale,request);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ThymeleafView视图

    当控制器方法返回或在ModelView对象中设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置的ThymeleafView视图解析器解析

    • ThymeleafView视图解析器会给视图名称拼接上视图前缀和视图后缀得到页面的物理地址,然后解析页面中的Thymeleaf语法渲染数据并通过转发的方式实现跳转
    <a th:href="@{/testThymeleafView}">测试ThymeleafViewa><br>
    
    • 1
    @RequestMapping("/testThymeleafView")
    public String testThymeleafView(){
        return "success";
    }
    
    • 1
    • 2
    • 3
    • 4

    转发视图

    当控制器方法返回或在ModelView对象中所设置的视图名称以"forward:"为前缀时,此时的视图名称会被InternalResourceView视图解析器解析

    • InternalResourceView视图解析器会将前缀"forward:"去掉,剩余部分作为最终请求路径转发到某个请求或页面(可以解析jsp页面中的语法)
    <a th:href="@{/testForward}">测试InternalResourceViewa><br>		
    
    • 1
    @RequestMapping("/testForward")
    public String testForward(){
        // 这种方式转发到的页面中如果有ThymeleafView语法是不会被解析的
        return "forward:/testThymeleafView";
    }																	
    
    • 1
    • 2
    • 3
    • 4
    • 5

    重定向视图

    当控制器方法返回或在ModelView对象中所设置的视图名称以"redirect:"为前缀时,此时的视图名称会被RedirectView视图解析器解析

    • RedirectView视图解析器会将前缀"redirect:"去掉,如果剩余部分以/开始则会自动拼接上下文路径作为最终请求路径重定向到某个请求或页面
    <a th:href="@{/testRedirect}">测试RedirectViewa><br>
    
    • 1
    @RequestMapping("/testRedirect")
    public String testRedirect(){
        //redirect:/会自动加上下文路径
        return "redirect:/testThymeleafView";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置视图控制器view-controller

    在控制器方法中只需要实现页面跳转(只设置页面视图名称)功能而没有其他业务,此时可以在SpringMvc的配置文件中使用view-controller标签表示控制器方法

    • 首先要引入mvc的命名空间及其约束文件
    • 只要在SpringMvc的配置文件中设置了view-controller标签,此时只有视图控制器配置的请求才会生效,其他控制器方法中配置的请求映射将全部失效
    • 开启MVC的注解驱动mvc:annotation-driven,可以保证视图控制器设置的请求和控制器方法设置的请求全部都会被前端控制器处理
    属性功能
    path设置处理的请求地址即请求映射RequestMapping
    view-name设置请求地址所对应的视图名称即控制器方法返回值,依然遵守视图解析器的流程

    需求: WEB-INF目录下的资源是受保护的即不能通过路径在浏览器中直接访问

    DOCTYPE html>
    
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>首页title>
    head>
    <body>
        <h1>Hello SpringMvch1>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    单独定义一个控制器方法跳转到首页

    @Controller
    public class HelloController {
        // 处理http://localhost:8080/SpringMvc/请求
        @RequestMapping("/")
        public String index() {
            // 返回逻辑视图名称,对应页面的物理地址为/WEB-INF/templates/index.html
            return "index";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在SpringMvC的核心配置文件中使用视图控制器标签跳转到首页

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 					http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd 					http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
        
        <context:component-scan base-package="com.atguigu.mvc.controller">context:component-scan>
        
        <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        bean>
        
        <mvc:view-controller path="/" view-name="index">mvc:view-controller>
        
        <mvc:annotation-driven />
    beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    Java基础系列(六)——代理机制详解
    spring boot logback日志配置文件
    java计算机毕业设计基于springboo+vue的旅游自驾游攻略方案分享系统
    IMX6ULL —— 字符编码方式和实现
    Notepad ++ 零基础入门到精通安装与配置教程(非常详细)
    二叉树的递归遍历
    洛谷题解 | AT_abc321_c Primes on Interval
    WSL 与真实 linux 环境区别有多大?
    PMP考试敏捷占比有多少?解疑
    Java面试+笔试题大集合
  • 原文地址:https://blog.csdn.net/qq_57005976/article/details/133711115