【问题标题】:Why use a Url Rewrite Filter in Spring?为什么在 Spring 中使用 Url Rewrite Filter?
【发布时间】:2011-04-03 06:03:51
【问题描述】:
我正在使用的 Spring 应用程序声明了一个 Tuckey UrlReWrite 过滤器,然后设置如下重写规则:
<rule>
<from>^/(.*)$</from>
<to last="true">/app/$1</to>
</rule>
为什么要这样做?
Spring 是否无法识别未转到 /app/ url 的请求?
否则这个重定向有什么好处?
【问题讨论】:
标签:
spring
spring-mvc
url-rewriting
servlet-filters
tuckey-urlrewrite-filter
【解决方案1】:
假设您希望 Spring MVC 的 DispatcherServlet 处理应用程序中的所有 URL,不包括静态内容的 URL。如果您尝试直接使用<url-pattern>/</url-pattern> 执行此操作,此映射将优先于静态内容。
使用重写过滤器,您可以为静态内容指定排除项,如下所示:
<urlrewrite default-match-type="wildcard">
<rule>
<from>/staticContentHere/**</from>
<to>/staticContentHere/$1</to>
</rule>
<rule>
<from>/**</from>
<to>/app/$1</to>
</rule>
</urlrewrite>
编辑:
请注意,自 Spring 3.0.4 以来,有一个 <mvc:resources /> 声明。使用此声明,DispatcherServlet 将提供来自 web 应用程序的 /resources 子文件夹的静态内容,因此不需要重写(请参阅 http://blog.springsource.com/2010/07/22/spring-mvc-3-showcase/)。