SpringBoot2
1.SpringBoot特点
1.1.依赖管理
(1)父项目做依赖管理
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
</parent>
(2)开发导入starter场景启动器
引入spring-boot-starter-*,*为场景,则该场景的所有依赖都被自动引入
SpringBoot所支持的场景可见 SpringBoot官方starter
也可以自己创建starter,且第三方的starter起名应该按照如下的要求*-spring-boot-starter(*为第三方项目名称)


所有场景最基本的启动器就是spring-boot-starter
(3)无需关注版本号,自动版本仲裁
引入依赖默认都可以不写版本号,但是所引入的非版本仲裁的jar,一定要写版本号
(4)可以修改版本号(如修改mysql-connector版本号,在本项目的pom中直接填写<properties><mysql.version>5.1.43</mysql-version></properties>,对应内容名称可以点进spring-boot-starter-parent的上一级查看)
1.2.自动配置
(1)引入webstater可以自动配好SpringMVC
- 引入SpringMVC全套组件
- 自动配好SpringMVC常用组件(功能)
(2)自动配好Web常见功能,如:字符编码问题 - SpringBoot帮助配置好所有Web开发的常见场景
(3)默认包结构 - 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
- 无需以前的包扫描配置
- 想要改变扫描路径,可以通过以下两种方法:
- 1).
@SpringBootApplication(scanBasePackages = "com") - 2).
@ComponentScan(basePackages = "com"),但是注意此法与@SpringBootApplication中@ComponentScan冲突,因此要去掉@SpringBootApplication注解,并将其内部注解放在启动类上方,即:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
- 1).
2.开发技巧
2.1.LomBok
首先需要引入依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
其次在idea中引入Lombok插件
之后可以在类上标记@Slf4j,并使用日志类
@Slf4j
@RestController
public class HelloController {
@RequestMapping("/hello")
public String handle01() {
log.info("123");
return "Hello Spring!I will be the NO.1!";
}
}
2.2.dev-tools
引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
之后修改完代码时重新编译即可,ctrl+F9,即可进行重启项目
如果使用热更新:使用JRebel(付费)
2.3.配置yml自动提示
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
此依赖要在生产环境下排除:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<proc>none</proc>
</configuration>
</plugin>
3.SpringMVC自动配置原理
3.1.静态资源访问
(1)静态资源目录
类路径下的/static (or /public or /resources or /META-INF/resources)
访问:当前项目根路径+项目资源名
原理:静态映射为/**
请求进来,先去找Controller看能不能处理,不能处理的所有请求交给静态资源处理器
静态资源去静态资源目录中查找,如果找不到,则返回404
(2)静态资源访问前缀
也可以设置静态资源访问路径:
spring:
mvc:
static-path-pattern: /resource/**
(3)改变静态资源位置
spring:
web:
resources:
static-locations: classpath:/res
补充:webjars官方地址,此网站将jquery等导成maven依赖等

可以通过/webjars/**的方式访问对应webjars资源
可以通过http://localhost:8080/webjars/jquery/1.12.0/jquery.js访问上面的jquery文件
(4)欢迎页
- 方式一:静态资源路径下添加
index.html
此种情况下可以配置静态资源路径,但是不能配置静态资源访问前缀,否则导致index.html不能被默认访问

- 方式二:借助Controller拦截
/index请求
(5)小图标
在静态文件夹中防止favicon.ico文件可以设置小图标,注意设置静态资源访问前缀也会影响图标的显示
因为浏览器直接发送/favicon.ico请求,如果更改静态文件访问路径,则无法获取到图标
3.2.静态资源配置原理
SpringBoot启动默认加载xxxAutoConfiguration配置类(自动配置类)
SpringMVC功能的自动配置类:WebMvcAutoConfiguration




配置文件相关属性和xxx进行绑定,WebMvcProperties==spring.mvc
一个配置类如果只有一个有参构造器,有参构造器中所有参数的值都会从容器中确定


设置spring.WEB.isAddMapping为false,则会使默认静态访问失效,即禁用所有静态资源规则
欢迎页的处理规则:

handlerMapping是处理器映射,保存每一个handler能处理哪些请求
3.3.请求参数处理
使用REST风格可以使用_method来设置请求方式(form表单只支持GET与POST两种提交方式,在提交PUT与DELETE时注意要以post方式提交)
同时要设置enabled为true
spring:
mvc:
hiddenmethod:
filter:
enabled: true



如:
测试REST风格
<form action="/user" method="get">
<input value="REST-GET提交" type="submit">
</form>
<form action="/user" method="post">
<input value="REST-POST提交" type="submit">
</form>
<form action="/user" method="post">
<input name="_method" type="hidden" value="PUT">
<input value="REST-PUT提交" type="submit">
</form>
<form action="/user" method="get">
<input name="_method" type="hidden" value="DELETE">
<input value="REST-DELETE提交" type="submit">
</form>
REST原理:
- 表单提交会带上
_method - 请求过来会被Filter(OrderedHiddenHttpMethodFilter)拦截,兼容以下请求:
PUT DELETE PUTCH- 原生request,包装模式requestWrapper重写getMethod方法,返回的是传入的值
- 过滤器链放行时用wrapper,以后的方法调用getMethod是调用requestWrapper的
注意仅限于表单提交,对于如Postman等方式提交的,本身已经支持PUT等,就无需Filter(即不必设置enabled为true)

浙公网安备 33010602011771号