- 默認情況下
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/" };
此時在這些目錄的資源當將被當成靜態(tài)資源,直接訪問
如果需要自定義添加其他資源,則可以擴展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/"); //自定義一個資源目錄,用來放置靜態(tài)資源
}
spring.static-path-pattern: /static/**該屬性的作用是將該地址轉(zhuǎn)發(fā)到 上面的靜態(tài)資源目錄,如果設(shè)定了該值,則在訪問路徑中必須加入該值,才能訪問到靜態(tài)資源,如果不設(shè)置該值,則放在靜態(tài)資源目錄的所有資源可以在根目錄下面訪問到假設(shè) /catalog 是 Context Path ,則訪問 /catalog/index.html 時,Web容器可以通過以下情況下滿足這個請求:
在一個 Web 應(yīng)用程序的基礎(chǔ)目錄里有一個 index.html 文件 (這個優(yōu)先級最高)
或者在 WEB-INF/lib 目錄的 jar 包里的 META-INF/resources 目錄下有 index.html 文件
特殊的目錄 : WEB-INF 。該目錄下的大部分文檔并不是 public 的,除了在 WEB-INF/lib 目錄下的 jar 文件里的 META-INF/resources 的靜態(tài)文件或JSP 文件。
但是,WEB-INF 目錄的內(nèi)容,可以通過 servlet 代碼 ServletContext 對象的 getResource 和 getResourceAsStream 方法來訪問。
由于匹配資源的請求映射是大小寫敏感的,客戶端請求 /WEB-INF/foo /WEb-iNf/foo ,它們不應(yīng)該返回這些內(nèi)容,也不應(yīng)該返回任何的目錄列表。
Web應(yīng)用程序的 class loader 必須首先加載 WEB-INF/classes 目錄,然后再到 WEB-INF/lib 目錄。除了 Jar 包文件里的靜態(tài)資源外,其他任何從客戶端的請求訪問 WEB-INF 目錄,必須返回 404 。