如何阻止Spring MVC阻塞所有其他Servlet?

时间:2010-06-10 09:21:20

标签: java spring servlets spring-mvc

我正在使用Spring 2.5 MVC并希望添加另一个第三方Servlet。问题是,Spring MVC捕获所有请求,因此Servlet没有得到任何请求。这是一个web.xml代码段:

        用SpringMVC         org.springframework.web.servlet.DispatcherServlet         2     

<servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>  

<servlet>
    <description>This is the servlet needed for cache.type servlet, returns the packed resources</description>
    <display-name>PackServlet</display-name>
    <servlet-name>PackServlet</servlet-name>
   <servlet-class>net.sf.packtag.servlet.PackServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>PackServlet</servlet-name>
    <url-pattern>*.pack</url-pattern>
</servlet-mapping>

应用程序确实需要/ *映射,pack:标签(第三方Servlet)确实需要基于文件扩展名的映射。 告诉Spring不要处理请求的任何可能性? 谢谢和问候。

2 个答案:

答案 0 :(得分:14)

实际上你不需要spring来做任何事情,servlet容器可以为你解决这个问题。

当匹配发送请求的servlet时,取决于url-pattern定义的匹配规则。没有2个servlet可能具有相同的模式,但它们可能具有重叠的模式。然后适用4条规则:

1)完全匹配优先于通配符匹配 2)较长的路径模式优先于较短的模式 3)路径匹配优先于文件类型匹配 4)/匹配任何尚未匹配的内容

<servlet-mapping>
  <servlet-name>PackServlet</servlet-name>
  <url-pattern>*.pack</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>SpringMVC</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

如果对SpringMVC使用/ *,它可能在最长路径上匹配。通过删除*,您必须遵循默认servlet的servlet规范,并且属于规则4。

Here you can find some more details

答案 1 :(得分:1)

检查此SO问题的已接受答案。它应该解决你的问题。

Can SpringMVC be configured to process all requests, but exclude static content directories?