SpringBoot加載靜態(tài)資源的方式
在SpringBoot中加載靜態(tài)資源和在普通的web應(yīng)用中不太一樣。默認(rèn)情況下,spring Boot從classpath下一個(gè)叫/static(/public,/resources或/META-INF/resources)的文件夾或從ServletContext根目錄提供靜態(tài)內(nèi)容。下面我們來(lái)寫(xiě)個(gè)例子看一下就會(huì)一目了然了:首先看一下項(xiàng)目的目錄結(jié)構(gòu):

我們?cè)趓esources下面的templates目錄下建一個(gè)home.html的文件,完整目錄為:src/main/resources/templates/home.html。內(nèi)容如下:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8"/>
<title>ConanZhang的首頁(yè)</title>
</head>
<body>
我是首頁(yè):
<!--<image th:src="@{/image/267862-1212151Z12099.jpg}"/> -->
</body>
</html>
如果我們想要訪(fǎng)問(wèn)home.html應(yīng)該怎么做呢?我們先來(lái)看第一種方式:
1、我們?cè)趙eb.controller這個(gè)包下面建一個(gè)Controller類(lèi):ThymeleafTestController.代碼內(nèi)容如下:
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";
}
}
寫(xiě)到這里你一定非常眼熟,這不就是SpringMVC的寫(xiě)法嗎?沒(méi)錯(cuò)就是SpringMVC的寫(xiě)法:下面我們來(lái)訪(fǎng)問(wèn)一下:http://localhost:8003/thymeleaf/home。結(jié)果如圖所示:

因?yàn)镾pringBoot集成了Thymeleaf,所以它會(huì)默認(rèn)查找resources下面的templates這個(gè)目錄下的文件。templates這個(gè)目錄的名字不要寫(xiě)錯(cuò)了。接著我又有了這樣的需求,假設(shè)我想在我的home.html中引入一些其他的靜態(tài)資源文件,比如我想在home.html中引入一張圖片:那我們應(yīng)該怎么做呢?
首先,我們需要在resources下面建一個(gè)static或者public的目錄,你不建立目錄也行,直接放到resources下面,接著我們?cè)俳⒁粋€(gè)image的目錄,最終的目錄結(jié)構(gòu)如圖所示:

我們?cè)趇mage這個(gè)目錄下放入一張圖片,然后我們?cè)趆ome.html中引入一下這張圖片,最終的代碼如下:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>WebMvcConfigurerAdapter
<meta charset="utf-8"/>
<title>ConanZhang的首頁(yè)</title>
</head>
<body>
我是首頁(yè):
<image th:src="@{/image/267862-1212151Z12099.jpg}" width="100px" height="50px" />
</body>
</html>
看到上面的寫(xiě)法你可能會(huì)有些奇怪,th:src和@{}這都是什么鬼。其實(shí)這是Thymeleaf的語(yǔ)法。@{}是引入外部資源用的。下面我們?cè)賮?lái)訪(fǎng)問(wèn)一下,結(jié)果如下圖所示:

這樣我們就訪(fǎng)問(wèn)到了image目錄下的圖片了。
可能會(huì)有人說(shuō)難道我只能放到static、public或者直接放到resources下面嗎?我換個(gè)目錄就不行了嗎?那當(dāng)然不是這樣的,下面我們來(lái)?yè)Q另外一種寫(xiě)法:
在我現(xiàn)在的這個(gè)項(xiàng)目中前臺(tái)是用React-redux寫(xiě)的,后臺(tái)SpringBoot只是用來(lái)提供接口的,我只需要一個(gè)首頁(yè)來(lái)把編譯后的react-redux引入到項(xiàng)目中就可以了,如果我想直接訪(fǎng)問(wèn)這個(gè)首頁(yè)那我應(yīng)該怎么做呢?SpringMVC為我們提供了這樣的一個(gè)類(lèi):WebMvcConfigurerAdapter。我們就是借助于這個(gè)類(lèi)來(lái)實(shí)現(xiàn)我們需要的功能的。我們寫(xiě)一個(gè)類(lèi)來(lái)繼承這個(gè)類(lèi),代碼如下:
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);
}
}
我們重寫(xiě)了addResourceHandlers這個(gè)方法來(lái)重新注冊(cè)了一個(gè)資源處理器。接著我們?cè)趤?lái)訪(fǎng)問(wèn)一下看看:http://localhost:8003/templates/home.html。結(jié)果如下圖所示:

注意了這里我們是直接訪(fǎng)問(wèn)的home.html這個(gè)文件。和我們預(yù)期的效果是一樣的。接著可能會(huì)有人說(shuō):如果我也想在home.html中引入靜態(tài)資源要怎么辦呢?比如說(shuō)上面的那個(gè)例子,我要引入一個(gè)一張圖片。也簡(jiǎn)單,那我們就再注冊(cè)一個(gè)資源處理器就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中的內(nèi)容如下所示:
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"/> <title>ConanZhang的首頁(yè)</title> </head> <body> 我是首頁(yè): <image src="/static/image/267862-1212151Z12099.jpg" width="100px" height="50px" /> </body> </html>
接著我們?cè)僭L(fǎng)問(wèn)以下看看什么效果:http://localhost:8003/templates/home.html

和之前的效果是一模一樣的吧?
前幾天在網(wǎng)上找了一個(gè)SpringBoot的中文開(kāi)發(fā)指南,有需要的請(qǐng)點(diǎn)擊這里下載吧。
這篇文章的完整版代碼,github地址如下:https://github.com/zhangconan/LearnSpringBoot
項(xiàng)目下載地址:LearnSpringBoot_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用springmvc運(yùn)行流程分析,手寫(xiě)spring框架?chē)L試
這篇文章主要介紹了使用springmvc運(yùn)行流程分析,手寫(xiě)spring框架?chē)L試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
SpringBoot多controller添加URL前綴的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot多controller添加URL前綴的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
Spring Security OAuth2集成短信驗(yàn)證碼登錄以及第三方登錄
IDEA 2020.2 部署JSF項(xiàng)目的詳細(xì)過(guò)程
詳解Spring中Spel表達(dá)式和el表達(dá)式的區(qū)別
SpringBoot整合MyBatis-Plus3.1教程詳解

