spring - SpringMVC 是否可以配置为处理所有请求,但排除静态内容目录?

标签 spring configuration spring-mvc

如果我将 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/

相关文章:

xml - 从 XML 到 XML 文档的 XSLT 转换

Spring aop方面: using ".." not working to replace parameters?

java - Spring MessageSource 基本名称路径问题

configuration - Vim 配置行号着色

linux - 在/etc/environment 中添加或更新一条配置记录

Java Spring-MVC 应用程序不发送 CSS 和 JS 文件。错误404

debugging - Hudson 和配置(调试、发布、并行等)

java - 如何使Spring Web Flow中的 session 失效?

Spring分页不起作用

java - Spring MVC 插件架构