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

标签 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:tag(第三方Servlet)确实需要基于文件扩展名的映射。 有没有可能告诉 Spring 不要处理请求? 谢谢和问候。

最佳答案

其实你不需要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 .

关于java - 如何阻止 Spring MVC 阻塞所有其他 Servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3013132/

相关文章:

java - 终止 mvn spring-boot :run doesn't stop tomcat

java - MultiValueMap 获取值

java - HttpSession中的信息过多

java - 如何从 Spring MVC 中的请求参数中删除空格

servlets - Tomcat 7 的 @WebServlet 注释

java - 在Linux操作系统上使用Java通过佳能相机捕获图像

java - 类型不匹配 : cannot convert from Comparator<capture#2-of ? super T> 到 Comparator<? super T>

java - 为什么 IntelliJ IDEA 会为 System.out.println 报 'Expression statement is not an assignment or call' 错误?

java - 将 XML 拆分为多个 xml 文件

java - 为什么我需要在 Controller 中使用 spring 注解?