目录
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下
先举一个小栗子:
这是在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";
}
}
运行一下,访问成功
接下来我们使用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飘红,但是依旧能运行出来,等找到具体原因再来说明
效果如下
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");
}
}