目录

springboot访问静态资源

templates举例

 MVC自定义视图解析器

扩展springmvc


springboot访问静态资源

1.在springboot中,我们可以使用一下方式处理静态资源

  • 包:webjars         访问路径:localhost:8080/webjars
  • 包:public,static,/**,resources   访问路径:localhost:8080/

2.优先级:resources>static>public

        springboot不建议使用jsp,所以使用Thymeleaf作为模板引擎写页面模板,比如有些值是动态的,我们需要写一些表达式去获取这个动态值,然后将模板和数据交给模板引擎,模板引擎会帮你解析表达式,展示数据。

注:Thymeleaf我们使用的是3.x不能使用2.x,否则会报错

<!--Thymeleaf,我们都是基于3.x开发-->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.14.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-java8time</artifactId>
        </dependency>

Thymeleaf的模板引擎,写在springboot生成的templates下

springboot 使用TransactionTemplate springboot的templates_html

先举一个小栗子:
这是在templates下的test.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>test</h1>
</body>
</html>

这是一个Controller类 

package com.example.springboottest.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {
    @RequestMapping("/test")
    public String test() {
        return "test";
    }
}

 运行一下,访问成功

springboot 使用TransactionTemplate springboot的templates_视图解析器_02

 接下来我们使用templates模板

templates举例

编辑我们的controller进行传值

@Controller
public class HelloController {

    @RequestMapping("/test")
    public String test(Model model) {
        model.addAttribute("msg","<h1>hello,springboot</h1>");

        model.addAttribute("users", Arrays.asList("zhangsan","lisi"));
        return "test";
    }

}

 需要引入约束xml:th="http://www.thymeleaf.org

<!DOCTYPE html>
<html lang="en" xml:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!--所有的html元素都可以被thymeleaf替换接管: th:元素名-->
<!--不转义字符串-->
<div th:text="${msg}"></div>
<!--转义字符串-->
<div th:utext="${msg}"></div>

<!--第一个user代表遍历出来的元素,第二个user代表展示到页面上,语法于vue类似-->
<!--第一种方式-->
<h3 th:each="user:${users}"th:text="${user}  "></h3>
<!--第二种方式-->
<h3 th:each="user:${users}" >[[${user}]]</h3>
</body>
</html>

        注:虽然<h3 th:each="user:${users}"th:text="${user}  "></h3>我的idea上会显示第二个user飘红,但是依旧能运行出来,等找到具体原因再来说明

效果如下

springboot 使用TransactionTemplate springboot的templates_视图解析器_03

 MVC自定义视图解析器

        建立一个controller类,注意不要加@EnableWebMvc 否则会报错,加了@EnableWebMvc之后静态资源无法访问,具体原因请看下面链接

Spring注解@EnableWebMvc使用坑点解析_charming的专栏-CSDN博客_@enablewebmvc

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    //创建一个自己的视图解析器
    public static class MyViewResolver implements ViewResolver {
        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }
    }
    //配置了一个自己的视图解析器,springboot会自动装配
    @Bean
    public ViewResolver myViewResolver() {
        return new MyViewResolver();
    }

}

        通过div视图解析器,可以定制化功能,只要写这个组件,然后将它交给springboot,springboot会自动装配。

扩展springmvc

       在springboot中有很多的Configuration帮助我们进行扩展,只要看到这个东西我们就要注意了,进行了修改原始的配置或者扩展了一些东西。

//如果我们要扩展springmvc,官方建议我们这样去做!
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    //视图跳转
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //添加视图控制
        //访问LL,跳转到test页面
        registry.addViewController("/LL").setViewName("test");

    }
}