如果我将 Spring 应用程序映射为处理所有传入请求 ('/*'),则静态内容请求会返回 404。例如,对“myhost.com/css/global.css”的请求将返回 404,即使在 Spring 拦截请求时资源存在。
替代方法是将 SpringMVC 映射到子目录(例如 '/home/'),但在这种情况下,您必须在应用程序的所有链接中传递此目录。有没有办法将 SpringMVC 映射到“/”并从处理中排除一组目录?
我当前的 web.xml 配置是:
<servlet>
<servlet-name>springApp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springApp</servlet-name>
<url-pattern>/home/*</url-pattern>
</servlet-mapping>
理想情况下,我希望映射如下所示:
<servlet-mapping>
<servlet-name>springApp</servlet-name>
<url-pattern>/*</url-pattern>
<exclude>/css/*,/js/*</exclude>
</servlet-mapping>
这种事情可能吗?
最佳答案
注意:此答案仅适用于 Spring 3.0.4+
(顺便说一句,这个问题也在这里处理过:Spring serving static content with mvc:resources, invalid xsd)
查看 Spring subversion samples repository 中的 Spring mvc-showcase 项目.它准确地显示了您想要做什么,即您可以描述 DisapatcherServlet 不会处理的静态资源。请参阅文件 /mvc-showcase/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
。这是我如何处理这些排除的片段,其中 JS、CSS 和图像位于应用程序上下文根中(MVC 命名空间映射到 mvc
:
<!-- resources exclusions from servlet mapping -->
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/js/**" location="/js/" />
关于spring - SpringMVC 是否可以配置为处理所有请求,但排除静态内容目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1234298/