servlet 以及spring boot 對靜態(tài)資源的處理

  1. 默認情況下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)資源
    }
  1. spring.static-path-pattern: /static/** 該屬性的作用是將該地址轉(zhuǎn)發(fā)到 上面的靜態(tài)資源目錄,如果設(shè)定了該值,則在訪問路徑中必須加入該值,才能訪問到靜態(tài)資源,如果不設(shè)置該值,則放在靜態(tài)資源目錄的所有資源可以在根目錄下面訪問到

  2. 假設(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 。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容