SpringBoot静态资源与缓存配置全解析

发布于:2025-07-11 ⋅ 阅读:(20) ⋅ 点赞:(0)

springboot中静态资源

classpath就是resource文件夹下

欢迎页规则

项目启动默认去找静态资源下的index.html页面 默认访问该页面

favicon原则

在静态资源目录下寻找favicon.ico

缓存实验

在请求中使用Cache-Control 时,它可选的值有:

在响应中使用Cache-Control 时,它可选的值有:

配置浏览器缓存

spring:
  web:
    locale: zh_CN # 国际化的区域信息
    resources:
      add-mappings: true #开启静态资源映射
      cache:
        period: 3600 #缓存时间 以秒为单位
        cachecontrol:  # 缓存详细控制 覆盖上面的配置
          max-age: 7200

自定义静态资源配置

spring:
 web:
    locale: zh_CN # 国际化的区域信息
    resources:
      # 修改resource文件夹下的静态资源路径
      static-locations: classpath:/a/, classpath:/a/
  mvc:
    webjars-path-pattern: /wj/**
    # 静态资源访问前缀
    static-path-pattern: /static/**

路径匹配

ant风格路径匹配

默认使用新版pathpattern路径匹配

不能匹配**在中间的情况,剩下的与ant风格兼容

配置文件改变路径匹配策略:

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

内容协商

1.多端内容适配

第二种方法需要自行开启

2.效果演示

请求同一个接口,返回json和xml不同格式数据

1.引入依赖

<!--        引入xml相关依赖-->
<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

2.加入注解

在数据类型中加入

@Data
@AllArgsConstructor
@NoArgsConstructor
@JacksonXmlRootElement
//可以讲数据转化为xml格式
public class Person {
    private long id;
    private String name;
    private String email;
    private Integer age;
}

3.配置协商规则

开启基于参数传递格式
spring:
  mvc:
    contentnegotiation:
      favor-parameter: true   # 默认参数为format
      parameter-name: type    # 修改参数名

效果演示:

根据type类型返回不同的内容格式

自定义内容返回

1.增加yaml返回支持

导入依赖:

<!--        导入支持yaml解析的模块-->
<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-yaml</artifactId>
</dependency>

编写配置:

spring:
  mvc:
      contentnegotiation:
        media-types:
          yaml: text/yaml

增加HttpMessageConverter组件

例如:MyYamlHttpMessageConverters

public class MyYamlHttpMessageConverters extends AbstractHttpMessageConverter {

    private ObjectMapper objectMapper=null;
    public MyYamlHttpMessageConverters(){
        //告诉springboot支持什么媒体类型(对应配置文件中的)
        super(new MediaType("application", "yaml", Charset.forName("utf-8")));
        //禁用文档开始前出现的横线
        YAMLFactory Factory = new YAMLFactory().disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER);
        this.objectMapper = new ObjectMapper(Factory);
    }

    @Override
    protected boolean supports(Class clazz) {

        //只要是对象类型都支持转换
        return true;
    }

    @Override  //requestbody
    protected Object readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        return null;
    }

    @Override   //responsebody 把对象写出去
    protected void writeInternal(Object returnValue, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        OutputStream body = outputMessage.getBody();
        try {
            this.objectMapper.writeValue(body,returnValue); //把对象返回值写出去
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            body.close();
        }


    }
}

在配置文件中加入:

//配置一个能把对象转为yaml的MessageConverters
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(new MyYamlHttpMessageConverters());
}

内容协商原理

httpmessageconverter

系统默认:


错误处理

1. 错误处理流程:

能处理就处理处理不了就转发给springboot处理,先精确匹配,找模板引擎下的,找不到就去静态资源下找,后模糊匹配,先找模板引擎下的,找不到就去静态资源下找,如果都没有具体页面,再去匹配error页面,若也没有,springboot会提供默认error页面

2. 错误页面解析:

如果没有配置错误处理,就会使用默认的错误页面error

规则:

  1. 解析一个错误页
    1. 如果发生了500,404,403错误(精确匹配)
      1. 如果有模板引擎,默认在classpath:/templates/error/精确码.html
      2. 如果没有模板引擎,在静态资源文件夹下找精确码.html
    1. 如果精确找不到精确码.html,就去找5xx.html,4xx.html(模糊匹配)
      1. 如果有模板引擎,默认在classpath:/templates/error/5xx.html
      2. 如果没有模板引擎,在静态资源文件夹下找 5xx.html
  1. 如果没有模板引擎templates下有error.html页面就直接渲染
  2. 如果都没有,容器中有一个默认为error的view,提供了默认白页功能。
@Bean(name="error")
@CondiontionalOnMissingBean(name="error")
public View defaultErrorView(){
    return this.defaultErrorView
}

3. 最佳实战

嵌入式容器

Servlet容器:管理,运行Servlet组件(Servlet,Filter,Listener)的环境,一般指服务器

1.自动配置原理

Web新特性

1.Problemdetails

配置开启:

spring:
	mvc:
    problemdetails:
      enabled: true   #启动

开启后效果:使用新的MediaType类型

content-type+json+额外扩展返回

2.函数式Web


网站公告

今日签到

点亮在社区的每一天
去签到