Spring Boot Web开发:24.Web开发-自动配置原理_哔哩哔哩_bilibili
整合web场景:
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
包含配置项:
- 1、SpringMVC的所有配置
spring.mvc
- 2、Web场景通用配置
spring.web
- 3、文件上传配置
spring.servlet.multipart
- 4、服务器的配置
server
: 比如:编码方式
默认配置:
- 包含了 ContentNegotiatingViewResolver 和 BeanNameViewResolver 组件,方便视图解析
- 默认的静态资源处理机制: 静态资源放在 static 文件夹下即可直接访问
- 自动注册 Converter,GenericConverter,Formatter 组件,适配常见数据类型转换和格式化需求
- 支持 HttpMessageConverters,可以方便返回json等数据类型
- 注册 MessageCodesResolver,方便国际化及错误消息处理
- 支持 静态 index.html
- 自动使用ConfigurableWebBindingInitializer,实现消息处理、数据绑定、类型转化、数据校验等功能
spring boot Web开发场景的三种使用方式:
所有的 静态资源配置类:
静态资源映射规则(固定的访问路径)在 WebMvcAutoConfiguration 中进行了定义:
欢迎页规则在 WebMvcAutoConfiguration 中进行了定义:在静态资源目录下找 index.html,没有就在 templates下找index模板页
- #1、spring.web:
- # 1.配置国际化的区域信息
- # 2.静态资源策略(开启、处理链、缓存)
-
- #开启静态资源映射规则
- spring.web.resources.add-mappings=true
-
- #设置缓存
- spring.web.resources.cache.period=3600
- ##缓存详细合并项控制,覆盖period配置:
- ## 浏览器第一次请求服务器,服务器告诉浏览器此资源缓存7200秒,7200秒以内的所有此资源访问不用发给服务器请求,7200秒以后发请求给服务器
- spring.web.resources.cache.cachecontrol.max-age=7200
- ## 共享缓存
- spring.web.resources.cache.cachecontrol.cache-public=true
- #使用资源 last-modified 时间,来对比服务器和浏览器的资源是否相同没有变化。相同返回 304
- spring.web.resources.cache.use-last-modified=true
-
- #自定义静态资源文件夹位置
- spring.web.resources.static-locations=classpath:/a/,classpath:/b/,classpath:/static/
-
- #2、 spring.mvc
- ## 2.1. 自定义webjars路径前缀
- spring.mvc.webjars-path-pattern=/wj/**
- ## 2.2. 静态资源访问路径前缀
- spring.mvc.static-path-pattern=/static/**
- 容器中只要有一个 WebMvcConfigurer 组件。配置的底层行为都会生效
- @EnableWebMvc,禁用boot的默认配置
- package org.example.boot.config;
-
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.CacheControl;
- import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
- import java.util.concurrent.TimeUnit;
-
- @Configuration //这是一个配置类
- public class MyConfig implements WebMvcConfigurer {
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- //保留以前规则
- //自己写新的规则。
- registry.addResourceHandler("/static/**") // 设置url路径
- .addResourceLocations("classpath:/a/","classpath:/b/") // 设置静态路径
- .setCacheControl(CacheControl.maxAge(1180, TimeUnit.SECONDS)); // 设置缓存控制策略
- }
- }
使用@Bean加入重写的WebMvcConfigurer组件:
- @Configuration //这是一个配置类,给容器中放一个 WebMvcConfigurer 组件,就能自定义底层
- public class MyConfig /*implements WebMvcConfigurer*/ {
-
-
- @Bean
- public WebMvcConfigurer webMvcConfigurer(){
- return new WebMvcConfigurer() {
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- registry.addResourceHandler("/static/**")
- .addResourceLocations("classpath:/a/", "classpath:/b/")
- .setCacheControl(CacheControl.maxAge(1180, TimeUnit.SECONDS));
- }
- };
- }
-
- }
Ant 风格的路径模式语法具有以下规则:
例如:
注意:Ant 风格的路径模式语法中的特殊字符需要转义,如:
log
对象进行日志记录,而无需手动创建和初始化日志对象。使用ant_path_matcher路径风格:
- package org.example.boot.controller;
-
- import jakarta.servlet.http.HttpServletRequest;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RestController;
-
- @Slf4j
- @RestController
- public class MyController {
-
- @GetMapping("/a*/b?/{p1:[a-f]+}") // p1是一个占位符
- public String hello(HttpServletRequest req, @PathVariable String path){
- log.info("路径变量p1:{}", path);
- String url = req.getRequestURI();
- return url;
- }
- }
-
更改配置文件:
- # 改变路径匹配策略:
- # ant_path_matcher 老版策略;
- # path_pattern_parser 新版策略;
- spring.mvc.pathmatch.matching-strategy=ant_path_matcher
补充:
Servlet,SpringMVC视频推荐:53_尚硅谷_servlet3.0-简介&测试_哔哩哔哩_bilibili
- HttpServlet 是Java Servlet API 的一个抽象类,用于处理来自客户端的HTTP请求并生成HTTP响应。开发人员可以通过继承HttpServlet类并重写其中的doGet()、doPost()等方法来处理特定的HTTP请求。
- @WebServlet 是Java Servlet规范中的注解,用于标识一个Servlet类,并指定该Servlet处理的URL模式等配置信息。
- @ServletComponentScan 是Spring Boot提供的注解,用于扫描并注册使用@WebServlet、@WebFilter和@WebListener注解标记的Servlet、Filter和Listener类。
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Titletitle>
- head>
- <body>
- <a href="hello">helloa>
- body>
- html>
- package org.example.springmvc.servlet;
-
- import jakarta.servlet.ServletException;
- import jakarta.servlet.annotation.WebServlet;
- import jakarta.servlet.http.HttpServlet;
- import jakarta.servlet.http.HttpServletRequest;
- import jakarta.servlet.http.HttpServletResponse;
- import org.springframework.stereotype.Component;
-
- import java.io.IOException;
-
- @WebServlet("/hello")
- public class HelloServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- resp.getWriter().write("hello....");
- }
- }