spring mvc中default servlet已经不适用鸟

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

这种利用default servlet访问静态资源的方式在tomcat 6.0.30及以后版本中已经被禁用了
因为这为访问WEB-INF下的文件提供了便捷路径,例如http://localhost:8080/app/WEB-INF/web.xml之类的地址是可以访问的。

BalusC在https://issues.apache.org/bugzilla/show_bug.cgi?id=50026中提了bug,Mark Thomas说
the default servlet was never intended to be mapped to anything other than /

而6.0.30的changelog50026 中timw说: Add support for mapping the default servlet to URLs other than /. (timw),也许是我E文不够好,在我看来这两句完全矛盾

幸好在http://stackoverflow.com/questions/3822524/tomcat-serving-static-content中有很好的解决方案。

一种是用URLrewriter

web.xml:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
...
<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/app/*</url-pattern>
</servlet-mapping>


urlrewrite.xml:

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

另一种是用<mvc:resources/>,不过这个标签好像在springmvc3.0.4之前有问题,不过之后的应该没问题了

网上还有其他人说用<mvc:default-servlet-handler/>,搞了半天没看明白怎么个使用,求指教

当然最简单的就是不用RESTful风格的URL,那样彻底没这方面问题,至少在非面向互联网的企业应用中应该还是可行的。

你可能感兴趣的:(spring,mvc,servelt,default,静态资源)