日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用Spring MVC进行资源版本控制

發布時間:2023/12/3 javascript 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Spring MVC进行资源版本控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提供靜態資源時,通常的做法是將某種版本信息附加到資源URL。 這使瀏覽器可以無限期地緩存資源。 每當資源的內容更改時,URL中的版本信息也會更改。 更新的URL會強制客戶端瀏覽器放棄緩存的資源,并從服務器重新加載最新的資源版本。

使用Spring,只需兩個簡單的步驟即可配置版本化的資源URL。 在這篇文章中,我們將看到它是如何工作的。

提供版本化網址

首先,我們需要告訴Spring應該通過版本化的URL訪問資源。 這是在資源處理程序MVC配置中完成的:

@Configuration public?class?MvcApplication?extends?WebMvcConfigurerAdapter?{@Overridepublic?void?addResourceHandlers(ResourceHandlerRegistry?registry)?{VersionResourceResolver?versionResourceResolver?=?new?VersionResourceResolver().addVersionStrategy(new?ContentVersionStrategy(),?"/**");registry.addResourceHandler("/javascript/*.js").addResourceLocations("classpath:/static/").setCachePeriod(60?*?60?*?24?*?365)?/*?one?year?*/.resourceChain(true).addResolver(versionResourceResolver);}... }

在這里,我們為位于類路徑內名為static的文件夾中JavaScript文件創建資源處理程序。 這些JavaScript文件的緩存時間設置為一年。 重要的部分是VersionResourceResolver ,它支持帶有版本信息的資源URL。 VersionStrategy用于獲取資源的實際版本。

在此示例中,我們使用ContentVersionStrategy 。 此VersionStrategy實現從資源的內容計算MD5哈希并將其附加到文件名。

例如:假設我們在classpath:/ static /目錄中有一個JavaScript文件test.js。 test.js的MD5哈希為69ea0cf3b5941340f06ea65583193168。

現在,我們可以將請求發送至:

/javascript/test-69ea0cf3b5941340f06ea65583193168.js

它將解析為classpath:/static/test.js。

請注意,仍然可以在沒有MD5哈希的情況下請求資源。 因此,此請求也適用:

/javascript/test.js

另一個VersionStrategy實現是FixedVersionStrategy 。 FixedVersionStrategy使用固定版本字符串作為前綴添加到資源路徑。

例如:

/v1.2.3/javascript/test.js

生成版本化的URL

現在,我們需要確保應用程序生成的資源URL包含MD5哈希。

一種解決方法是使用ResourceUrlProvider 。 使用ResourceUrlProvider,可以將資源URL(例如/javascript/test.js)轉換為版本化的URL(例如/javascript/test-69ea0cf3b5941340f06ea65583193168.js)。 使用MVC配置會自動聲明ID為mvcResourceUrlProvider的ResourceUrlProvider bean。

如果您將Thymeleaf用作模板引擎,則可以使用@bean語法直接從模板訪問ResourceUrlProvider bean。

例如:

<script?type="application/javascript"th:src="${@mvcResourceUrlProvider.getForLookupPath('/javascript/test.js')}"> </script>

如果使用的模板引擎不能直接訪問Spring Bean,則可以將ResourceUrlProvider Bean添加到模型屬性中。 使用ControllerAdvice ,可能看起來像這樣:

@ControllerAdvice public?class?ResourceUrlAdvice?{@InjectResourceUrlProvider?resourceUrlProvider;@ModelAttribute("urls")public?ResourceUrlProvider?urls()?{return?this.resourceUrlProvider;} }

然后,在視圖內部,我們可以使用urls模型屬性訪問ResourceUrlProvider:

<script?type="application/javascript"?th:src="${urls.getForLookupPath('/javascript/test.js')}"> </script>

此方法應與所有支持方法調用的模板引擎一起使用。

生成版本化URL的另一種方法是使用ResourceUrlEncodingFilter 。 這是一個Servlet篩選器,它重寫HttpServletResponse.encodeURL()方法以生成版本化的資源URL。

要使用ResourceUrlEncodingFilter,我們只需要向配置類中添加一個額外的bean:

@SpringBootApplication public?class?MvcApplication?extends?WebMvcConfigurerAdapter?{@Overridepublic?void?addResourceHandlers(ResourceHandlerRegistry?registry)?{//?same?as?before?..}@Beanpublic?ResourceUrlEncodingFilter?resourceUrlEncodingFilter()?{return?new?ResourceUrlEncodingFilter();}... }

如果您使用的模板引擎調用了響應encodeURL()方法,則版本信息將自動添加到URL。 這將適用于JSP,Thymeleaf,FreeMarker和Velocity。

例如:通過Thymeleaf,我們可以使用標準的@ {..}語法來創建URL:

<script?type="application/javascript"?th:src="@{/javascript/test.js}"></script>

這將導致:

<script?type="application/javascript"?src="/javascript/test-69ea0cf3b5941340f06ea65583193168.js"> </script>

摘要

將版本信息添加到資源URL是最大化瀏覽器緩存的常見做法。 使用Spring,我們只需要定義一個VersionResourceResolver和一個VersionStrategy即可提供版本化的URL。 在模板引擎內部生成版本化URL的最簡單方法是使用ResourceUrlEncodingFilter。

如果標準的VersionStrategy實現不符合您的要求,則可以創建我們自己的VersionStrategy實現。

  • 您可以在GitHub上找到完整的示例源代碼。

翻譯自: https://www.javacodegeeks.com/2015/09/resource-versioning-with-spring-mvc.html

總結

以上是生活随笔為你收集整理的使用Spring MVC进行资源版本控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。