亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring Boot 靜態資源處理

2024-07-14 08:43:21
字體:
來源:轉載
供稿:網友

靜態資源處理

Spring Boot 默認的處理方式就已經足夠了,默認情況下Spring Boot 使用WebMvcAutoConfiguration中配置的各種屬性。

建議使用Spring Boot 默認處理方式,需要自己配置的地方可以通過配置文件修改。

但是如果你想完全控制Spring MVC,你可以在@Configuration注解的配置類上增加@EnableWebMvc,增加該注解以后WebMvcAutoConfiguration中配置就不會生效,你需要自己來配置需要的每一項。這種情況下的配置方法建議參考WebMvcAutoConfiguration類。

本文以下內容針對Spring Boot 默認的處理方式,部分配置通過在application.yml配置文件中設置。

配置資源映射

Spring Boot 默認配置的/**映射到/static(或/public ,/resources,/META-INF/resources),/webjars/**會映射到classpath:/META-INF/resources/webjars/。

注意:上面的/static等目錄都是在classpath:下面。

如果你想增加如/mystatic/**映射到classpath:/mystatic/,你可以讓你的配置類繼承WebMvcConfigurerAdapter,然后重寫如下方法:

@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/mystatic/**")   .addResourceLocations("classpath:/mystatic/");}

這種方式會在默認的基礎上增加/mystatic/**映射到classpath:/mystatic/,不會影響默認的方式,可以同時使用。

靜態資源映射還有一個配置選項,為了簡單這里用.properties方式書寫:

spring.mvc.static-path-pattern=/** # Path pattern used for static resources.

這個配置會影響默認的/**,例如修改為/static/**后,只能映射如/static/js/sample.js這樣的請求(修改前是/js/sample.js)。這個配置只能寫一個值,不像大多數可以配置多個用逗號隔開的。

使用注意

例如有如下目錄結構:

└─resources
    │  application.yml
    │
    ├─static
    │  ├─css
    │  │      index.css
    │  │
    │  └─js
    │          index.js
    │
    └─templates
            index.ftl

index.ftl中該如何引用上面的靜態資源呢?

如下寫法:

<link rel="stylesheet" type="text/css" href="/css/index.css" rel="external nofollow" ><script type="text/javascript" src="/js/index.js"></script>

注意:默認配置的/**映射到/static(或/public ,/resources,/META-INF/resources)

當請求/css/index.css的時候,Spring MVC 會在/static/目錄下面找到。

如果配置為/static/css/index.css,那么上面配置的幾個目錄下面都沒有/static目錄,因此會找不到資源文件!

所以寫靜態資源位置的時候,不要帶上映射的目錄名(如/static/,/public/ ,/resources/,/META-INF/resources/)!

使用WebJars

WebJars:http://www.webjars.org/

例如使用jquery,添加依賴:

<dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>1.11.3</version></dependency>

然后可以如下使用:

<script type="text/javascript" src="/webjars/jquery/1.11.3/jquery.js"></script>

你可能注意到href中的1.11.3版本號了,如果僅僅這么使用,那么當我們切換版本號的時候還要手動修改href,怪麻煩的,我們可以用如下方式解決。

先在pom.xml中添加依賴:

<dependency> <groupId>org.webjars</groupId> <artifactId>webjars-locator</artifactId></dependency>

增加一個WebJarController

@Controllerpublic class WebJarController { private final WebJarAssetLocator assetLocator = new WebJarAssetLocator(); @ResponseBody @RequestMapping("/webjarslocator/{webjar}/**") public ResponseEntity locateWebjarAsset(@PathVariable String webjar, HttpServletRequest request) {  try {   String mvcPrefix = "/webjarslocator/" + webjar + "/";   String mvcPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);   String fullPath = assetLocator.getFullPath(webjar, mvcPath.substring(mvcPrefix.length()));   return new ResponseEntity(new ClassPathResource(fullPath), HttpStatus.OK);  } catch (Exception e) {   return new ResponseEntity<>(HttpStatus.NOT_FOUND);  } }}

然后使用的時候按照如下方式:

<script type="text/javascript" src="/webjarslocator/jquery/jquery.js"></script>

注意:這里不需要在寫版本號了,但是注意寫url的時候,只是在原來url基礎上去掉了版本號,其他的都不能少!

靜態資源版本管理

Spring MVC 提供了靜態資源版本映射的功能。

用途:當我們資源內容發生變化時,由于瀏覽器緩存,用戶本地的靜態資源還是舊的資源,為了防止這種情況導致的問題,我們可能會手動在請求url的時候加個版本號或者其他方式。

版本號如:

<script type="text/javascript" src="/js/sample.js?v=1.0.1"></script>

Spring MVC 提供的功能可以很容易的幫助我們解決類似問題。

Spring MVC 有兩種解決方式。

注意:下面的配置方式針對freemarker模板方式,其他的配置方式可以參考。

資源名-md5 方式

例如:

<link rel="stylesheet" type="text/css" href="/css/index-2b371326aa93ce4b611853a309b69b29.css" rel="external nofollow" >

Spring 會自動讀取資源md5,然后添加到index.css的名字后面,因此當資源內容發生變化的時候,文件名發生變化,就會更新本地資源。

配置方式:

在application.properties中做如下配置:

spring.resources.chain.strategy.content.enabled=truespring.resources.chain.strategy.content.paths=/**

這樣配置后,所有/**請求的靜態資源都會被處理為上面例子的樣子。

到這兒還沒完,我們在寫資源url的時候還要特殊處理。

首先增加如下配置:

@ControllerAdvicepublic class ControllerConfig { @Autowired ResourceUrlProvider resourceUrlProvider; @ModelAttribute("urls") public ResourceUrlProvider urls() {  return this.resourceUrlProvider; }}

然后在頁面寫的時候用下面的寫法:

<link rel="stylesheet" type="text/css" href="${urls.getForLookupPath('/css/index.css')}" rel="external nofollow" >

使用urls.getForLookupPath('/css/index.css')來得到處理后的資源名。

版本號 方式

在application.properties中做如下配置:

spring.resources.chain.strategy.fixed.enabled=truespring.resources.chain.strategy.fixed.paths=/js/**,/v1.0.0/**spring.resources.chain.strategy.fixed.version=v1.0.0

這里配置需要特別注意,將version的值配置在paths中。原因我們在講Spring MVC 處理邏輯的時候說。

在頁面寫的時候,寫法如下:

<script type="text/javascript" src="${urls.getForLookupPath('/js/index.js')}"></script>

注意,這里仍然使用了urls.getForLookupPath,urls配置方式見上一種方式。

在請求的實際頁面中,會顯示為:

<script type="text/javascript" src="/v1.0.0/js/index.js"></script>

可以看到這里的地址是/v1.0.0/js/index.js。

靜態資源版本管理 處理過程

在Freemarker模板首先會調用urls.getForLookupPath方法,返回一個/v1.0.0/js/index.js/css/index-2b371326aa93ce4b611853a309b69b29.css。

這時頁面上的內容就是處理后的資源地址。

這之后瀏覽器發起請求。

這里分開說。

第一種md5方式

請求/css/index-2b371326aa93ce4b611853a309b69b29.css,我們md5配置的paths=/**,所以Spring MVC 會嘗試url中是否包含-,如果包含會去掉后面這部分,然后去映射的目錄(如/static/)查找/css/index.css文件,如果能找到就返回。

第二種版本方式

請求/v1.0.0/js/index.js。

如果我們paths中沒有配置/v1.0.0,那么上面這個請求地址就不會按版本方式來處理,因此會找不到上面的資源。

如果配置了/v1.0.0,Spring 就會將/v1.0.0去掉再去找/js/index.js,最終會在/static/下面找到。

最后

以上是Spring Boot 靜態資源處理的內容,有些不全面的地方或者讀者有更多疑問,可以查看Spring Boot完整文檔或本文參考的內容。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区在线视频| 亚洲老司机av| 欧美一区在线直播| 国产精品久久久久久久午夜| 全亚洲最色的网站在线观看| 久久精品国产精品亚洲| 日韩免费观看视频| 日韩av毛片网| 欧美性xxxx极品hd欧美风情| 最新国产成人av网站网址麻豆| 精品久久在线播放| 国产精品一区二区性色av| 久久99久久亚洲国产| 亚洲自拍偷拍在线| 国产精品久久久久不卡| 91精品在线国产| 九九精品视频在线| 欧美中文在线观看| 日韩成人中文字幕在线观看| 亚洲欧美成人精品| 欧美成人精品xxx| 国产91色在线免费| 亚洲成年人在线| 欧美激情综合色| 久久在线免费观看视频| 粉嫩老牛aⅴ一区二区三区| 久久久久久久亚洲精品| 视频一区视频二区国产精品| 国产精品一区二区女厕厕| 亚洲成av人影院在线观看| 欧美寡妇偷汉性猛交| 久久久av一区| 欧美激情视频在线观看| 国产精品高清在线观看| 日韩一区二区av| 亚洲一区av在线播放| 日韩欧美在线视频观看| 91在线视频九色| 人九九综合九九宗合| 国产婷婷成人久久av免费高清| 亚洲精品之草原avav久久| 亚洲国产91精品在线观看| 日韩免费电影在线观看| 国产精品美女免费看| 青青青国产精品一区二区| 亚洲美女黄色片| 91精品成人久久| 57pao国产精品一区| 成人免费看吃奶视频网站| 欧美日韩国产一中文字不卡| 91久久国产综合久久91精品网站| 精品视频在线播放色网色视频| 国内精品久久影院| 欧美性videos高清精品| 欧美激情2020午夜免费观看| 亚洲国产精品va在看黑人| 国产69精品99久久久久久宅男| 自拍偷拍亚洲精品| 日本在线观看天堂男亚洲| 韩国福利视频一区| 亚洲精品国产成人| 国产亚洲欧美日韩精品| 88国产精品欧美一区二区三区| 最近免费中文字幕视频2019| 日韩精品中文在线观看| 亚洲精美色品网站| 精品久久久视频| 热草久综合在线| 亚洲成人av在线| 国产成人91久久精品| 久久亚洲一区二区三区四区五区高| 亚洲乱码一区av黑人高潮| 欧美性xxxx极品hd欧美风情| 久久九九全国免费精品观看| 亚洲色图国产精品| 黑人精品xxx一区| 亚洲精品按摩视频| 久热精品在线视频| 欧美高清视频一区二区| 欧美性极品xxxx做受| 麻豆国产精品va在线观看不卡| 日韩成人av在线| 日韩少妇与小伙激情| 亚洲欧美日韩另类| 日韩美女免费视频| 中文字幕不卡av| 国产成人涩涩涩视频在线观看| 欧美一区二区三区艳史| 午夜精品久久久久久久男人的天堂| 国产一级揄自揄精品视频| 欧美国产一区二区三区| 色噜噜狠狠狠综合曰曰曰| 亚洲夜晚福利在线观看| 亚洲欧洲美洲在线综合| 久久精品国亚洲| 精品国产乱码久久久久久虫虫漫画| 精品国产一区二区三区在线观看| 91精品久久久久久久久久另类| 日韩av在线天堂网| 国产成人精品久久久| 亚洲男人的天堂在线播放| 免费91麻豆精品国产自产在线观看| 国外日韩电影在线观看| 亚洲激情自拍图| 日韩亚洲在线观看| 狠狠久久亚洲欧美专区| 久久综合亚洲社区| 欧美性xxxx| 成人av.网址在线网站| 日韩亚洲成人av在线| 色综合亚洲精品激情狠狠| 亚洲黄色www网站| 亚洲天堂第一页| 午夜免费日韩视频| 综合136福利视频在线| 国产成人久久久| 国产精品色婷婷视频| 91精品国产乱码久久久久久蜜臀| 久久久999国产精品| 国产精品成av人在线视午夜片| 欧美性一区二区三区| 中文字幕精品网| 久久精品91久久久久久再现| 热久久免费视频精品| 欧美精品一区在线播放| 亚洲激情免费观看| 91精品久久久久久久久久久久久| 亚洲精品久久久久久久久久久久| 国产精品亚洲视频在线观看| 亚洲色图国产精品| 黄色一区二区三区| 7m精品福利视频导航| 久久久久久久久中文字幕| 成人国产亚洲精品a区天堂华泰| 午夜精品久久久久久久99黑人| 蜜月aⅴ免费一区二区三区| 69**夜色精品国产69乱| 91亚洲国产成人久久精品网站| 91精品国产综合久久男男| 国产大片精品免费永久看nba| 国产精品嫩草影院久久久| 欧美成人精品在线观看| 国产精品国产三级国产专播精品人| 亚洲女人天堂成人av在线| 日韩色av导航| 久久青草精品视频免费观看| 95av在线视频| 国产日韩欧美中文在线播放| 亚洲视频免费一区| 91在线观看欧美日韩| 91精品久久久久久久久中文字幕| 91成人在线播放| 国产精品视频xxx| 亚洲日本中文字幕免费在线不卡| 亚洲一级黄色片| 国产日韩av在线| 精品国产成人在线| 777777777亚洲妇女| 久久天天躁狠狠躁夜夜躁2014| 一区二区三区四区精品| 在线视频日本亚洲性| 国产精品第100页| 欧美制服第一页| 久久久亚洲国产|