SpringBoot詳細講解靜態(tài)資源導入的實現(xiàn)
SpringBootWeb開發(fā)
回顧一下:
springboot幫助我們配置了什么,能不能進行修改,能修改哪些,能否擴展?
- xxxAutoConfiguration:向容器中自動配置組件
- xxxProperties:自動配置類,裝配配置文件中自定義的一些內(nèi)容
開發(fā)要解決的問題:
- 導入靜態(tài)資源
- 首頁
- jsp
- 裝配擴展springmvc
- 增刪改查
- 攔截器
1. 靜態(tài)資源導入
先創(chuàng)建一個普通的springboot項目,主需要加入web即可。
我們在進行項目之前首先要確保環(huán)境正確,我們先用helloController測試一下。如果能跳轉(zhuǎn)成功則進行接下來的步驟
@RestController public class HelloController { @GetMapping("/hello") public String hello(){ return "HelloWord"; } }
靜態(tài)資源的映射規(guī)則:
springmvc的web配置都在WebMvcAutoConfiguration 這個配置類里面;進去查看我們發(fā)現(xiàn)有一個添加資源處理的方法addResourceHandlers
我把代碼拿了過來。不知道怎么搜的可以看下面
public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); } else { Duration cachePeriod = this.resourceProperties.getCache().getPeriod(); CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl(); if (!registry.hasMappingForPattern("/webjars/**")) { this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl)); } String staticPathPattern = this.mvcProperties.getStaticPathPattern(); if (!registry.hasMappingForPattern(staticPathPattern)) { this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(WebMvcAutoConfiguration.getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl)); } } }
快速搜索內(nèi)容:雙擊Shift鍵,框中直接搜你想搜的類或者方法。
第一種:使用原本的,也就是第一個if
在里面我們可以看到所有的/webjars/**
, 都需要去classpath:/META-INF/resources/webjars/
找對應的資源;
webjars
Webjars本質(zhì)就是以jar包的方式引入我們的靜態(tài)資源 , 我們以前要導入一個靜態(tài)資源文件,直接導入即可。
使用SpringBoot需要使用Webjars,我們可以去搜索一下:
網(wǎng)站:https://www.webjars.org 進去直接搜索需要的東西即可
要使用jQuery,我們只要要引入jQuery對應版本的pom依賴即可!
<dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.4.1</version> </dependency>
導入完畢之后我們可以查看webjars的目錄結(jié)構(gòu),并且此時可以訪問jquery.js文件了。
導入完成后我們進行查看,運行之后輸入鏈接http://localhost:8080/webjars/jquery/3.4.1/jquery.js
使用自己的靜態(tài)資源
上述是第一種if,那么沒找到怎么辦呢,就出現(xiàn)了下面的情況
String staticPathPattern = this.mvcProperties.getStaticPathPattern(); if (!registry.hasMappingForPattern(staticPathPattern)) { this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(WebMvcAutoConfiguration.getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
我們?nèi)ゲ榭磗taticPathPattern發(fā)現(xiàn)第二種映射規(guī)則 :/**
, 訪問當前的項目任意資源,它會去找 resourceProperties 這個類,
發(fā)現(xiàn)里面的有對應的四個位置。ResourceProperties 可以設(shè)置和我們靜態(tài)資源有關(guān)的參數(shù);這里面指向了它會去尋找資源的文件夾。
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" };
在這四個目錄下的靜態(tài)資源同樣可以被我們識別到
但是會有優(yōu)先級,resources優(yōu)先級最高,static其次,public最低
總結(jié)
在springboot我們可以使用一下方式處理靜態(tài)資源
- webjars,
localhost:8080/webjars/
- public,static,/**,resources
localhost:8080/
優(yōu)先級resources優(yōu)先級最高,static其次,public最低
2.制作特殊的首頁
我們什么都不管的時候,訪問"localhost:8080"會是默認的頁面
而原理也就在下方這個代碼中
我們讓首頁進行改變。需要添加一個靜態(tài)資源,讓首頁換一個樣子
增加一個界面,重新運行
成功后的結(jié)果
這樣就是實現(xiàn)了首頁界面的定制
歡迎頁,靜態(tài)資源文件夾下的所有 index.html 頁面;被 /** 映射。
比如我訪問 http://localhost:8080/ ,就會找靜態(tài)資源文件夾下的 index.html
新建一個 index.html ,在我們上面的3個目錄中任意一個;然后訪問測試 http://localhost:8080/看結(jié)果!
圖標轉(zhuǎn)變
這個在新的版本代碼已經(jīng)變成了下圖的樣子
之前是可以在springboot的配置靜態(tài)內(nèi)容位置中找到favicon.ico
,它將自動用作應用程序的favicon。圖標名字就是favicon.ico
#關(guān)閉默認圖標
spring.mvc.favicon.enabled=false
然后可以自己換一個圖標放在public目錄下,清楚緩存,刷新網(wǎng)頁就可以了。
Thymeleaf模板引擎
模板引擎的作用就是我們來寫一個頁面模板,比如有些值呢,是動態(tài)的,我們寫一些表達式。而這些值,從哪來呢,就是我們在后臺封裝一些數(shù)據(jù)。然后把這個模板和這個數(shù)據(jù)交給我們模板引擎,模板引擎按照我們這個數(shù)據(jù)幫你把這表達式解析、填充到我們指定的位置,然后把這個數(shù)據(jù)最終生成一個我們想要的內(nèi)容給我們寫出去,這就是我們這個模板引擎
如果我們沒有模板引擎的話,在頁面中會提示500
引入Thymeleaf
在項目中加入依賴
<!--thymeleaf--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
Thymeleaf 官網(wǎng):https://www.thymeleaf.org/
Thymeleaf 在Github 的主頁:https://github.com/thymeleaf/thymeleaf
Spring官方文檔:找到我們對應的版本
https://docs.spring.io/spring-boot/docs/2.3.7.RELEASE/reference/htmlsingle/#using-boot-starter
我們可以有通過上述的頁面找到我們需要的依賴,進而復制粘貼即可。
引入之后我們再次運行。nice
注意: 使用Thymeleaf,只需要導入對應的依賴即可。同時我們的html頁面試放在我們的templates目錄下的。
至于為什么,我們看源碼,這段源碼在ThymeleafProperties
下。
private String prefix = "classpath:/templates/"; private String suffix = ".html";
取值
那么我們應該怎么取值呢
首先在controller下編寫代碼
@Controller public class HelloController { @RequestMapping("/test") public String hello(Model model){ model.addAttribute("msg","王木木"); return "test"; } }
接下來我們在html頁面中編寫
因為我們要使用thymeleaf,需要在html文件中導入命名空間的約束。
<html lang="en" xmlns:th="http://www/thymeleaf.org">
<!DOCTYPE html> <html lang="en" xmlns:th="http://www/thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div th:text="${msg}"></div> </body> </html>
成功運行后
這里需要這個的th標簽。所有的html元素都科一被thymeleaf替換接管,格式為th:元素名
有無轉(zhuǎn)義
從controller傳一段信息
model.addAttribute("msg","<h1>王木木</h1>");
html中使用轉(zhuǎn)義和不轉(zhuǎn)義的情況
<div th:text="${msg}"></div> <div th:utext="${msg}"></div>
運行結(jié)果
循環(huán)
同樣在controller里傳一段信息
model.addAttribute("users", Arrays.asList("wangmumu","王木木"));
接下來在html中進行取值
<h2 th:each="user:${users}" th:text="${user}"></h2>
運行結(jié)果
到此這篇關(guān)于SpringBoot詳細講解靜態(tài)資源導入的實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot靜態(tài)資源導入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis-Plus saveBatch()批量保存失效的解決
本文主要介紹了Mybatis-Plus saveBatch()批量保存失效的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01Java LinkedList的實現(xiàn)原理圖文詳解
今天小編就為大家分享一篇關(guān)于Java LinkedList的實現(xiàn)原理圖文詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01SpringBoot?+DynamicDataSource切換多數(shù)據(jù)源的全過程
這篇文章主要介紹了SpringBoot?+DynamicDataSource切換多數(shù)據(jù)源的全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01