在同一URL模式上映射两个不同的servlet

10

我遇到了一个由他人编写的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 的部分会很好。 - hellectronic
我已经发布了web.xml的内容。 - kaiwii ho
3
不一样:servlet 规范规定,模式匹配区分大小写。 - Dave Newton
1个回答

15
只会调用一个servlet;我不知道有处理两个servlet的单个请求的机制(也不确定那是什么意思)。
Servlet URL模式可能会重叠,但具有完全相同URL的两个模式没有意义。我不记得Servlet规范是否明确禁止它,但匹配在第一个匹配停止。匹配方法在规范中定义。
参见p. 85+的Servlet 2.4规范PDF

说明书非常清楚,url-patterns 必须按照它们出现的顺序进行测试,因此第一个最长的匹配项会生效。SRV 2.5。 - user207421
@EJP 我认为这就是映射规范部分的作用吧? - Dave Newton
1
没错。这是一个奇怪的遗漏,考虑到它已经进行了十多年的工作。 - user207421
我在这个规范中没有找到“必须按照它们出现的顺序测试url-patterns”的要求,而且@WebServlet注释也没有“priority”参数。 - Mladen Adamovic
@MladenAdamovic 没有什么意外的,虽然我还没有验证这个。 - Dave Newton
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接