【问题标题】:Modifiying Spring Url in an aspect like way以类似方式修改 Spring Url
【发布时间】:2011-12-21 23:33:45
【问题描述】:

我正在寻找一种方法来修改spring:url- 标签实现中的url,而不修改jsps。

一个简短的介绍,解释我想做什么:

我有一个在 jsp 中大量使用 <spring:url 的应用程序。

像这样的东西:

<spring:url value="/resources/style/default.css" var="css_url" />
<link rel="stylesheet" type="text/css" media="screen" href="${css_url}">
    <!-- required for FF3 and Opera -->
</link>

但对于图像来说也是如此,...

现在我想稍微更改一下资源文件夹的映射,使其包含当前版本。 (所以对于 1.0.1 版本,/resources/style/default.css 变为 /resources1.0.1/style/default.css)(在有人问之前:原因是缓存

我当然不想在发布新版本时修改所有jsps中的所有spring:url标签。所以我的第一个想法是添加一个新的 ModelMap 变量(VERSION),然后修改所有 url 标签一次(&lt;spring:url value="/resources${VERSION}/style/default.css" var="css_url" /&gt;)。 -- 这行得通。

但我正在寻找更好的方法,例如在spring:url- 标签实现中“注入”版本的方法。以便标签本身将所有/resources/ 替换为/resources1.0.1/(或当前版本)。所以我问有人知道如何将一些代码添加到修改网址的spring:url- 标记实现吗?

(我不想用tuckey UrlRewriteFilter之类的东西,或者想改变映射,我很想修改spring:url的输出)

【问题讨论】:

    标签: java spring spring-mvc url-rewriting


    【解决方案1】:

    我要么拥有一个应用程序上下文属性并使用普通的 JSP EL,要么创建一个自定义标签(例如,&lt;app:versionedUrl&gt;)来封装您想要使用的任何逻辑。

    通过将属性保留在上下文中,您可以玩一些慢速滚动新版本的游戏,允许特定的用户/组/等。如果您感兴趣,也可以“冻结”某个版本等。

    另一种选择是为包含版本 ID 的 CSS 文件创建映射,并转发到实际资源或流回特定于版本的内容。

    【讨论】:

    • 我创建了一个自定义标签,扩展了 spring UrlTag。
    【解决方案2】:

    您可以使用过滤器将 URL 映射到 /resources*,然后修改请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-08
      • 2015-10-14
      • 1970-01-01
      • 2013-12-04
      • 2015-02-27
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多