SpringBoot加載靜態(tài)資源的方式
在SpringBoot中加載靜態(tài)資源和在普通的web應用中不太一樣。默認情況下,spring Boot從classpath下一個叫/static(/public,/resources或/META-INF/resources)的文件夾或從ServletContext根目錄提供靜態(tài)內容。下面我們來寫個例子看一下就會一目了然了:首先看一下項目的目錄結構:
我們在resources下面的templates目錄下建一個home.html的文件,完整目錄為:src/main/resources/templates/home.html。內容如下:
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"/> <title>ConanZhang的首頁</title> </head> <body> 我是首頁: <!--<image th:src="@{/image/267862-1212151Z12099.jpg}"/> --> </body> </html>
如果我們想要訪問home.html應該怎么做呢?我們先來看第一種方式:
1、我們在web.controller這個包下面建一個Controller類:ThymeleafTestController.代碼內容如下:
package com.zkn.learnspringboot.web.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * Created by wb-zhangkenan on 2016/11/30. */ @Controller @RequestMapping("thymeleaf") public class ThymeleafTestController { @RequestMapping("home") public String getHome(){ return "home"; } }
寫到這里你一定非常眼熟,這不就是SpringMVC的寫法嗎?沒錯就是SpringMVC的寫法:下面我們來訪問一下:http://localhost:8003/thymeleaf/home。結果如圖所示:
因為SpringBoot集成了Thymeleaf,所以它會默認查找resources下面的templates這個目錄下的文件。templates這個目錄的名字不要寫錯了。接著我又有了這樣的需求,假設我想在我的home.html中引入一些其他的靜態(tài)資源文件,比如我想在home.html中引入一張圖片:那我們應該怎么做呢?
首先,我們需要在resources下面建一個static或者public的目錄,你不建立目錄也行,直接放到resources下面,接著我們再建立一個image的目錄,最終的目錄結構如圖所示:
我們在image這個目錄下放入一張圖片,然后我們在home.html中引入一下這張圖片,最終的代碼如下:
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head>WebMvcConfigurerAdapter <meta charset="utf-8"/> <title>ConanZhang的首頁</title> </head> <body> 我是首頁: <image th:src="@{/image/267862-1212151Z12099.jpg}" width="100px" height="50px" /> </body> </html>
看到上面的寫法你可能會有些奇怪,th:src和@{}這都是什么鬼。其實這是Thymeleaf的語法。@{}是引入外部資源用的。下面我們再來訪問一下,結果如下圖所示:
這樣我們就訪問到了image目錄下的圖片了。
可能會有人說難道我只能放到static、public或者直接放到resources下面嗎?我換個目錄就不行了嗎?那當然不是這樣的,下面我們來換另外一種寫法:
在我現(xiàn)在的這個項目中前臺是用React-redux寫的,后臺SpringBoot只是用來提供接口的,我只需要一個首頁來把編譯后的react-redux引入到項目中就可以了,如果我想直接訪問這個首頁那我應該怎么做呢?SpringMVC為我們提供了這樣的一個類:WebMvcConfigurerAdapter。我們就是借助于這個類來實現(xiàn)我們需要的功能的。我們寫一個類來繼承這個類,代碼如下:
package com.zkn.learnspringboot.config; import org.springframework.context.annotation.Configuration; import org.springframework.util.ResourceUtils; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** * Created by wb-zhangkenan on 2016/11/30. */ @EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/templates/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/templates/",ResourceUtils.CLASSPATH_URL_PREFIX+"/image/"); super.addResourceHandlers(registry); } }
我們重寫了addResourceHandlers這個方法來重新注冊了一個資源處理器。接著我們在來訪問一下看看:http://localhost:8003/templates/home.html。結果如下圖所示:
注意了這里我們是直接訪問的home.html這個文件。和我們預期的效果是一樣的。接著可能會有人說:如果我也想在home.html中引入靜態(tài)資源要怎么辦呢?比如說上面的那個例子,我要引入一個一張圖片。也簡單,那我們就再注冊一個資源處理器就OK了。Java代碼如下:
package com.zkn.learnspringboot.config; import org.springframework.context.annotation.Configuration; import org.springframework.util.ResourceUtils; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** * Created by wb-zhangkenan on 2016/11/30. */ @EnableWebMvc @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/templates/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/templates/"); registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/"); super.addResourceHandlers(registry); } }
home.html中的內容如下所示:
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"/> <title>ConanZhang的首頁</title> </head> <body> 我是首頁: <image src="/static/image/267862-1212151Z12099.jpg" width="100px" height="50px" /> </body> </html>
接著我們再訪問以下看看什么效果:http://localhost:8003/templates/home.html
和之前的效果是一模一樣的吧?
前幾天在網上找了一個SpringBoot的中文開發(fā)指南,有需要的請點擊這里下載吧。
這篇文章的完整版代碼,github地址如下:https://github.com/zhangconan/LearnSpringBoot
項目下載地址:LearnSpringBoot_jb51.rar
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
使用springmvc運行流程分析,手寫spring框架嘗試
這篇文章主要介紹了使用springmvc運行流程分析,手寫spring框架嘗試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot多controller添加URL前綴的實現(xiàn)方法
這篇文章主要介紹了SpringBoot多controller添加URL前綴的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02Spring Security OAuth2集成短信驗證碼登錄以及第三方登錄
這篇文章主要介紹了Spring Security OAuth2集成短信驗證碼登錄以及第三方登錄,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04SpringBoot整合MyBatis-Plus3.1教程詳解
這篇文章主要介紹了SpringBoot整合MyBatis-Plus3.1詳細教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08