spring mvc 静态资源映射核心是避免 dispatcherservlet 拦截,交由 resourcehttprequesthandler 处理;推荐通过 resourcehandlerregistry 绑定虚拟路径(如 /static/**)与物理路径(如 classpath:/static/),spring boot 还支持默认路径自动映射及 defaultservlet 回退机制。

Spring MVC 中配置静态资源映射,核心是让 DispatcherServlet 不拦截 CSS、JS、图片等请求,而是交由资源处理器(ResourceHttpRequestHandler)直接返回文件内容。虚拟路径(如 /static/**)是你对外暴露的访问前缀,物理路径(如 classpath:/static/)才是真实存放位置——二者通过 ResourceHandlerRegistry 绑定。
用 ResourceHandlerRegistry 映射虚拟路径到物理目录
这是最常用、最推荐的方式,适用于 Spring Boot 和传统 Spring MVC(需实现 WebMvcConfigurer):
- 在配置类中重写
addResourceHandlers方法 -
addResourceHandler("/static/**")定义浏览器访问的虚拟路径(支持 Ant 风格通配) -
addResourceLocations("classpath:/static/")指定资源实际所在位置,可多个,按顺序查找 - 例如:访问
http://localhost:8080/static/js/app.js,会从src/main/resources/static/js/app.js加载
利用 Spring Boot 默认静态资源路径(免配置)
Spring Boot 已内置默认映射规则,只要把文件放对位置,无需写任何配置:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 支持的类路径目录(按优先级降序):
classpath:/META-INF/resources/→classpath:/resources/→classpath:/static/→classpath:/public/ - 访问根路径即可:比如把
logo.png放进src/main/resources/static/images/,直接通过/images/logo.png访问 - 注意:若多个目录存在同名文件,优先取排在前面的目录中的那个
启用 DefaultServlet 回退机制(兜底方案)
当其他 handler 都不匹配时,把请求交给容器原生的 DefaultServlet(如 Tomcat 的 default servlet),适合遗留项目或复杂路径场景:
- 配置方式:在 Java 配置类中调用
configureDefaultServletHandling().enable() - 它会注册一个
SimpleUrlHandlerMapping,匹配所有未被其他 handler 处理的请求 - 本质是“放行”,不是映射,所以不定义虚拟路径,而是让容器自己按真实文件系统路径解析
- 适用于需要保留原始 URL 结构(如
/css/main.css直接对应 webapp/css/main.css)的部署场景
自定义多源映射与文件系统路径
除了 classpath,还能映射到服务器本地磁盘或外部路径,适合上传文件、运营素材等动态资源:
- 使用
file:/var/www/uploads/这类绝对路径,注意权限和路径末尾斜杠 - 可混合多个 location:
addResourceLocations("classpath:/static/", "file:/opt/app/assets/") - 虚拟路径必须唯一,但一个 handler 可绑定多个物理位置;不同 handler 可定义不同虚拟前缀,比如
/uploads/**和/docs/** - Spring 按添加顺序查找资源,找到即返回,不会继续往后查










