spring boot項目中的靜態資源文件存放在static文件下面,當通過瀏覽器訪問這些靜態文件時,發現必須要添加static作為前綴才能訪問,折騰了一番后發現,這個前綴跟 spring.mvc.static-path-pattern 這個配置項有關。
spring: mvc: static-path-pattern: /static/**
項目中application.yml配置文件中,存在如上配置項時,訪問靜態資源文件要加static才行,當把這個配置項除掉時,不用加static作為前綴亦可進行正常訪問。
當spring boot自動裝配 org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,當執行到org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#addResourceHandlers方法時,類org.springframework.boot.autoconfigure.web.WebMvcProperties#staticPathPattern的默認值為 "/**"。如果配置項文件中存在spring.mvc.static-path-pattern 配置項,默認的配置項將會被覆蓋。
當通過瀏覽器進行訪問時,springMVC使用SimpleUrlHandlerMapping進行路由映射,當執行到方法 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping#lookupHandler 時,將會使用 spring.mvc.static-path-pattern 配置項來匹配url