views:

39

answers:

1

A Spring app I'm using declares a Tuckey UrlReWrite Filter and then sets up a rewrite rule as the following:

<rule>
    <from>^/(.*)$</from>
    <to last="true">/app/$1</to>
</rule>

Why do this?

Will Spring not be able to recognize requests that do not go to the /app/ url?

Otherwise what is the advantage of this redirect?

+2  A: 

Imagine that you want Spring MVC's DispatcherServlet to handle all URLs in your application excluding the URLs of static content. If you try to do it directly with <url-pattern>/</url-pattern>, this mapping will take precedence over the static content.

With rewrite filter you can specify exclusions for the static content, like this:

<urlrewrite default-match-type="wildcard">
    <rule>
        <from>/staticContentHere/**</from>
        <to>/staticContentHere/$1</to>
    </rule>
    <rule>
        <from>/**</from>
        <to>/app/$1</to>
    </rule>    
</urlrewrite>

EDIT: Note that since Spring 3.0.4 there is a <mvc:resources /> declaration. With this declaration, DispatcherServlet will serve static content from the /resources subfolder of your webapp, so rewriting will not be needed (see http://blog.springsource.com/2010/07/22/spring-mvc-3-showcase/).

axtavt