- 默认情况下
spring.resources.add-mappings
的属性为true
@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/" };
此时在这些目录的资源当将被当成静态资源,直接访问
如果需要自定义添加其他资源,则可以扩展WebMvcConfigurer
类
@Configuration
public class SwaggerConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/swagger/**").addResourceLocations("classpath:/static/swagger/");
registry.addResourceHandler("/static/**").addResourceLocations("/static/"); //自定义一个资源目录,用来放置静态资源
}
spring.static-path-pattern: /static/**
该属性的作用是将该地址转发到 上面的静态资源目录,如果设定了该值,则在访问路径中必须加入该值,才能访问到静态资源,如果不设置该值,则放在静态资源目录的所有资源可以在根目录下面访问到假设 /catalog 是 Context Path ,则访问 /catalog/index.html 时,Web容器可以通过以下情况下满足这个请求:
在一个 Web 应用程序的基础目录里有一个 index.html 文件 (这个优先级最高)
或者在 WEB-INF/lib 目录的 jar 包里的 META-INF/resources 目录下有 index.html 文件
特殊的目录 : WEB-INF 。该目录下的大部分文档并不是 public 的,除了在 WEB-INF/lib 目录下的 jar 文件里的 META-INF/resources 的静态文件或JSP 文件。
但是,WEB-INF 目录的内容,可以通过 servlet 代码 ServletContext 对象的 getResource 和 getResourceAsStream 方法来访问。
由于匹配资源的请求映射是大小写敏感的,客户端请求 /WEB-INF/foo /WEb-iNf/foo ,它们不应该返回这些内容,也不应该返回任何的目录列表。
Web应用程序的 class loader 必须首先加载 WEB-INF/classes 目录,然后再到 WEB-INF/lib 目录。除了 Jar 包文件里的静态资源外,其他任何从客户端的请求访问 WEB-INF 目录,必须返回 404 。