【问题标题】:Having two different servlets mapped on the same URL pattern将两个不同的 servlet 映射到同一个 URL 模式
【发布时间】:2011-12-14 16:48:24
【问题描述】:

我遇到了一个别人写的J2EE项目。当我来到web.xml 时,有两个不同的servlet 映射在同一个URL 模式上。我想知道这种方法的目的。这究竟是如何工作的,目的是什么?

这里是web.xml的相关部分:

<servlet>
    <servlet-name>fileDownload</servlet-name>
    <servlet-class>com.htsoft.core.web.servlet.FileDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>fileDownload</servlet-name>
    <url-pattern>/file-download</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>fileDownLoad</servlet-name>
    <servlet-class>com.kaiwii.oa.action.system.FileDownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>fileDownLoad</servlet-name>
    <url-pattern>/file-downLoad</url-pattern>
</servlet-mapping>  

【问题讨论】:

  • 粘贴xml的部分就好了。
  • 我已经发布了 web.xml 内容。
  • 不一样:servlet 规范声明模式匹配区分大小写。

标签: java servlets web.xml


【解决方案1】:

只有一个 servlet 会被调用;我不知道使用两个 servlet 处理单个请求的机制(我也不知道这意味着什么)。

Servlet URL 模式可能会重叠,但有两个具有完全相同的 URL 是没有意义的。我不记得 servlet 规范是否明确禁止它,但是匹配在第一次匹配时停止。匹配方法在规范中定义。

Servlet 2.4 spec PDF 见 p. 85+

【讨论】:

  • 规范很清楚,url-patterns 必须按照它们出现的顺序进行测试,所以第一个最长的匹配成立。 SRV 2.5。
  • @EJP 我认为这就是映射规范部分的作用?
  • 我修改了我的评论,但讨论过滤器映射和安全约束的部分对 web.xml 顺序是明确的; #11.1 讨论 不是。
  • @EJP 是的,规范暗示它,但是......你知道那个效果如何。
  • 没错。考虑到十多年来在这方面做了多少工作,这是一个奇怪的遗漏。
猜你喜欢
  • 1970-01-01
  • 2019-08-29
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 2012-03-17
  • 1970-01-01
  • 2011-05-12
相关资源
最近更新 更多