国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黑龙江省| 邮箱| 广西| 手机| 皮山县| 凤台县| 闸北区| 宾川县| 永清县| 无锡市| 深圳市| 堆龙德庆县| 高碑店市| 青岛市| 湖南省| 迭部县| 巧家县| 大方县| 大田县| 东乌珠穆沁旗| 施甸县| 澜沧| 应城市| 盐源县| 邮箱| 宣化县| 武义县| 双牌县| 高雄县| 阿拉善右旗| 临夏县| 上杭县| 高州市| 简阳市| 县级市| 翁牛特旗| 女性| 新密市| 贡嘎县| 综艺| 绥德县|