本章咱們來介紹下SpringBoot對靜態資源的支持以及很重要的一個類WebMvcConfigurerAdapter。html
前面章節咱們也有簡單介紹過SpringBoot中對靜態資源的默認支持,今天詳細的來介紹下默認的支持,以及自定義擴展如何實現。spring
Spring Boot 默認爲咱們提供了靜態資源處理,使用 WebMvcAutoConfiguration 中的配置各類屬性。session
建議你們使用Spring Boot的默認配置方式,提供的靜態資源映射以下:mvc
classpath:/META-INF/resourceside
classpath:/resourcesspa
classpath:/static3d
classpath:/public日誌
在工程裏面路徑是這樣:htm
上面這幾個都是靜態資源的映射路徑,優先級順序爲:META-INF/resources > resources > static > public對象
你們能夠本身在上面4個路徑下都放一張同名的圖片,訪問一下便可驗證。
還有,你能夠隨機在上面一個路徑下面放上index.html,當咱們訪問應用根目錄http://lcoalhost:8080 時,會直接映射到index.html頁面。
對應的配置文件配置以下:
咱們能夠經過修改spring.mvc.static-path-pattern來修改默認的映射,例如我改爲/dudu/**,那運行的時候訪問 http://lcoalhost:8080/dudu/index.html 纔對應到index.html頁面。
若是Spring Boot提供的Sping MVC不符合要求,則能夠經過一個配置類(註解有@Configuration的類)加上@EnableWebMvc註解來實現徹底本身控制的MVC配置。
固然,一般狀況下,Spring Boot的自動配置是符合咱們大多數需求的。在你既須要保留Spring Boot提供的便利,有須要增長本身的額外的配置的時候,能夠定義一個配置類並繼承WebMvcConfigurerAdapter,無需使用@EnableWebMvc註解。
這裏咱們提到這個WebMvcConfigurerAdapter這個類,重寫這個類中的方法可讓咱們增長額外的配置,這裏咱們就介紹幾個經常使用的。
好比,咱們想自定義靜態資源映射目錄的話,只需重寫addResourceHandlers方法便可。
經過addResourceHandler添加映射路徑,而後經過addResourceLocations來指定路徑。咱們訪問自定義my文件夾中的elephant.jpg 圖片的地址爲http://localhost:8080/my/elephant.jpg
若是你想指定外部的目錄也很簡單,直接addResourceLocations指定便可,代碼以下:
addResourceLocations指的是文件放置的目錄,addResoureHandler指的是對外暴露的訪問路徑
之前寫SpringMVC的時候,若是須要訪問一個頁面,必需要寫Controller類,而後再寫一個方法跳轉到頁面,感受好麻煩,其實重寫WebMvcConfigurerAdapter中的addViewControllers方法便可達到效果了
值的指出的是,在這裏重寫addViewControllers方法,並不會覆蓋WebMvcAutoConfiguration中的addViewControllers(在此方法中,Spring Boot將「/」映射至index.html),這也就意味着咱們本身的配置和Spring Boot的自動配置同時有效,這也是咱們推薦添加本身的MVC配置的方式。
攔截器在咱們項目中常常使用的,這裏就來介紹下最簡單的判斷是否登陸的使用。
要實現攔截器功能須要完成如下2個步驟:
建立咱們本身的攔截器類並實現 HandlerInterceptor 接口
其實重寫WebMvcConfigurerAdapter中的addInterceptors方法把自定義的攔截器類添加進來便可
首先,自定義攔截器代碼:
這裏咱們簡單實現了根據session中是否有User對象來判斷是否登陸,爲空就跳轉到登陸頁,不爲空就經過。
接着,重寫WebMvcConfigurerAdapter中的addInterceptors方法以下:
addPathPatterns("/**")對全部請求都攔截,可是排除了/toLogin和/login請求的攔截。
頁面登陸關鍵代碼:
控制器代碼:
這樣訪問的時候,若是未登陸就會跳轉到login.html頁面,而訪問http://localhost:8080/toLogin 和http://localhost:8080/login 不會被攔截。
更多配置能夠查看WebMvcConfigurerAdapter的類的API。因其是WebMvcConfigurer接口的實現,因此WebMvcConfigurer的API方法也能夠用來配置MVC。
只是實現這個接口的話,要實現全部的方法,這個就尷尬了。
因此仍是推薦使用繼承WebMvcConfigurerAdapter類來處理。
靜態資源跟攔截器在平時項目中常常用到,弄懂如何處理是頗有用的。今天就到此爲止,下一篇未來介紹一下項目中如何使用日誌。