【SpringBoot】13 核心功能 - Web开发原理 - 创建项目 + 静态资源

发布于:2025-08-15 ⋅ 阅读:(15) ⋅ 点赞:(0)


一、SpringMVC自动配置概览

官网介绍

https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/web.html#web.servlet.spring-mvc.template-engines
在这里插入图片描述

  • 大多场景我们都无需配置
    • 自动配置ContentNegotiatingViewResolver和BeanNameViewResolver解析器
    • 静态资源服务支持(包括WebJars支持)
    • 自动注册Converter、GenericConverter和Formatter转换器
    • HttpMessageConverters消息转换器支持
    • 自动注册MessageCodesResolver
    • 静态index.html首页支持
    • 自动应用ConfigurableWebBindingInitializer

  • 可自定义说明

    • 如需保留Spring Boot MVC的自动配置并扩展MVC功能(如拦截器、格式化器、视图控制器等),开发者可添加自定义的WebMvcConfigurer配置类(无需添加@EnableWebMvc注解)。

    • 若需自定义RequestMappingHandlerMapping、RequestMappingHandlerAdapter或ExceptionHandlerExceptionResolver实例,同时保留Spring Boot MVC的自动配置,可通过声明WebMvcRegistrations类型的Bean来提供这些组件的自定义实例。这些实例将交由Spring MVC进行后续初始化配置。如需参与或覆盖该过程,应配合使用WebMvcConfigurer。

    • 如需完全接管Spring MVC配置(禁用自动配置),可添加带有@EnableWebMvc注解的自定义@Configuration配置类,或如@EnableWebMvc文档所述添加DelegatingWebMvcConfiguration配置类。

二、简单功能分析

创建项目

创建一个新项目。
在这里插入图片描述
勾选场景。
在这里插入图片描述
项目创建完成。
在这里插入图片描述

删除没用的东西。
在这里插入图片描述
添加yaml配置文件
在这里插入图片描述

1、静态资源访问

在这里插入图片描述

只要静态资源放在类路径下:/static (or /public or /resources or /META-INF/resources)
访问:当前项目根路径 / 静态资源名称。 就可以访问项目中的静态资源。
例如:http://localhost:8083/earth.gif

原理:静态映射/**

请求进来,先去找Controller看能不能处理,不能处理的请求又都交给静态资源处理器。

静态资源也找不到,就会返回404

在资源文件夹下新建这些静态资源路径。
在这里插入图片描述

2、静态资源访问前缀

静态资源默认无前缀

yaml中配置

1 spring:
2 mvc:
3 static-path-pattern: /res/**

访问方式就变成了:
当前项目 + static-path-pattern + 静态资源名 = 静态资源文件夹下找。

此时访问静态资源:http://localhost:8083/res/earth.gif

如果不使用默认静态资源路径。

3、webjars

自动映射。
https://www.webjars.org/

4、欢迎页支持

https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/web.html#web.servlet.spring-mvc.welcome-page

在这里插入图片描述
在静态路径下定义一个欢迎页页面index.html,然后运行重新生成, 运行就可以看到默认就是首页了。
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>你好,我是首页</h1>
</body>
</html>

在这里插入图片描述
需要注意的是:

可以配置静态资源路径。
但是不可以配置静态资源的访问前缀,否则导致index.html不能被默认访问。

server:
  port: 8083

#spring:
#  mvc:
#    static-path-pattern: /res/**    #   这个会导致welcome页面的失效

#  resources:
#    static-locations: [classpath:/abc/]

5、自定义Favicon

server:
  port: 8083

#spring:
#  mvc:
#    static-path-pattern: /res/**    #   这个会导致welcome页面的失效

#  resources:
#    static-locations: [classpath:/abc/]

6、静态资源配置原理

Spring Boot 对静态资源的自动配置主要通过 WebMvcAutoConfigurationResourceProperties 实现,核心逻辑如下:

1. 静态资源路径配置

默认情况下,Spring Boot 从以下路径加载静态资源:

  • classpath:/static/
  • classpath:/public/
  • classpath:/resources/
  • classpath:/META-INF/resources/

这些路径由 ResourceProperties 类定义:

@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
public class ResourceProperties {
    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
        "classpath:/META-INF/resources/", 
        "classpath:/resources/",
        "classpath:/static/", 
        "classpath:/public/"
    };
    // 其他配置...
}
2. 静态资源映射规则

Spring Boot 通过 WebMvcAutoConfiguration.addResourceHandlers() 方法注册静态资源处理器:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    if (!this.resourceProperties.isAddMappings()) {
        // 禁用静态资源映射
        return;
    }
    // 默认映射 /** 到静态资源路径
    registry.addResourceHandler("/**")
            .addResourceLocations(this.resourceProperties.getStaticLocations())
            .setCachePeriod(getCachePeriod());
}
  • 请求流程:
    1. 先由 DispatcherServlet 尝试匹配控制器(Controller)。
    2. 若未匹配,则交给 ResourceHttpRequestHandler 处理静态资源请求。
    3. 若资源不存在,返回 404
3. 自定义静态资源路径

通过 application.yml 修改配置:

spring:
  resources:
    static-locations: [classpath:/custom-static/]  # 覆盖默认路径
    cache:
      period: 3600  # 缓存时间(秒)
4. 静态资源前缀配置

通过 static-path-pattern 添加访问前缀(如 /res/**):

spring:
  mvc:
    static-path-pattern: /res/**

此时请求需通过 http://localhost:8080/res/xxx.js 访问资源。

5. 禁用静态资源映射

若需完全禁用自动配置:

spring:
  resources:
    add-mappings: false  # 关闭静态资源映射

总结

Spring Boot 的静态资源管理通过自动配置简化开发,核心机制如下:

  1. 默认路径:从 classpath:/static/ 等目录加载资源,无需额外配置。
  2. 请求处理:静态资源请求优先由 DispatcherServlet 处理,未匹配时转交 ResourceHttpRequestHandler
  3. 灵活性:支持通过 application.yml 自定义路径、缓存和访问前缀。
  4. 注意事项:
    • 配置 static-path-pattern 会影响欢迎页(index.html)的默认访问。
    • 禁用自动配置需谨慎,避免影响基础功能。

开发者可根据需求选择保留默认配置或完全自定义,平衡便捷性与控制力。例如,生产环境中可通过缓存配置优化性能,而开发阶段可禁用缓存便于调试。理解底层原理后,能更高效地利用 Spring Boot 的自动化特性。


网站公告

今日签到

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