2010-09-18 169 views
5

我正在构建一个Spring MVC应用程序,并且frontController servlet被映射为拦截所有请求的“/”,我将能够提供静态内容(.js ,. css,.png ...),而不是Spring。 我的应用程序结构Tomcat为Spring MVC应用程序提供静态资源

-webapp/ 
    styles/ 
    images/ 
    WEB-INF/ 
      views/ 

默认情况下,因为FrontController设计映射在我的应用程序的所有请求其手柄的上下文根,但不服务于任何静态资源。 下面是静态资源的mvc配置。

<mvc:resources mapping="/resources/**" location="/"/> 

以及页面的代码是:

<img src="resources/images/logo.png" /> 

我需要配置Tomcat没有春天的互动服务于静态资源

有什么建议吗?

回答

1

看看this mailing list thread,看看是否这样做你在找什么。

+1

坦克,我已经找到了解决办法,只图静态资源扩展defaultServlet。 – Rigoni 2010-09-18 23:52:10

7

您可以重新映射tomcats的默认servlet(它处理静态内容),例如,

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/images/*</url-pattern> 
</servlet-mapping> 
1

另一个潜在的解决方案 - 只需添加以下到您的春天的dispatcherServlet.xml(Spring Docs

<mvc:default-servlet-handler/> 

这个标签允许映射的DispatcherServlet为 “/”(超然的映射容器的默认Servlet),同时仍允许静态资源请求由容器的默认Servlet处理。它使用URL映射(给定最低优先顺序)“/ **”来配置DefaultServletHttpRequestHandler。该处理程序将把所有请求转发给默认的Servlet。

优点(相对于@号的解决方案)

  • 重映射解决方案的行为有所不同,这取决于您的容器中的URL。 Jetty/Tomcat 6将其表示为'将URL/images/*映射到WEBAPP/images/'。 Tomcat < 6(也可能是其他人)将这意味着将地图URL /图像/转换为WEBAPP/*,这是一个严重的安全漏洞。
  • 如果您想从您的网站提供favicon.ico,robots.txt等,那么您将有 为它们创建其他url映射。

缺点

  • 春天的循环,这是肯定的东西那是不必要的。

另外,不管我喜欢的解决方案,我建议将以下内容添加到您的网站。XML防止目录列表(上,说网址/图片)

<servlet> 
    <servlet-name>default</servlet-name> 
    <init-param> 
     <param-name>dirAllowed</param-name> 
     <param-value>false</param-value> 
    </init-param> 
</servlet> 
相关问题