我正在构建一个Spring MVC应用程序,并且frontController servlet映射在“/”中拦截所有请求,我将能够提供静态内容(.js,.css,.png ...)从tomcat而不是Spring。 我的应用结构是
-webapp/
styles/
images/
WEB-INF/
views/
默认情况下,因为frontController映射到我的应用程序的上下文根,它处理所有请求但不提供任何静态资源。 静态资源的mvc配置如下。
<mvc:resources mapping="/resources/**" location="/"/>
页面的代码是:
<img src="resources/images/logo.png" />
我需要配置Tomcat以提供静态资源而不进行弹簧交互。
有什么建议吗?
答案 0 :(得分:7)
您可以重新映射tomcats默认servlet(处理静态内容),例如
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>
答案 1 :(得分:1)
查看this mailing list thread,看看是否符合您的要求。
答案 2 :(得分:1)
另一个可能的解决方案 - 只需将以下内容添加到Spring DispatcherServlet.xml(Spring Docs)
<mvc:default-servlet-handler/>
此标记允许将DispatcherServlet映射到“/”(从而覆盖容器的默认Servlet的映射),同时仍允许容器的默认Servlet处理静态资源请求。它使用URL映射(给定最低优先级顺序)“/ **”配置DefaultServletHttpRequestHandler。此处理程序将所有请求转发到默认Servlet。
优点(与@nos的解决方案相比)
缺点
此外,无论人们喜欢哪种解决方案,我都建议在web.xml中添加以下内容以防止目录列表(在URL /图像上)
<servlet>
<servlet-name>default</servlet-name>
<init-param>
<param-name>dirAllowed</param-name>
<param-value>false</param-value>
</init-param>
</servlet>