我想我可能知道发生了什么事。
在工作的web.xml中,将servlet设置为默认servlet(如果没有其他匹配项,则/本身就是默认的servlet),它将回答与另一个映射不匹配的任何请求。
在“失败1”中,您的/ 映射确实是有效的路径映射。通过web.xml中的/
映射,它可以回答除其他路径映射以外的所有请求。根据规范,扩展映射是由显式映射覆盖的隐式映射。这就是扩展映射失败的原因。一切都明确地映射到应用程序。
在失败2中,除了与静态内容映射匹配的内容外,App负责其他所有事情。为了显示快速测试中发生的情况,我进行了设置。这是一个例子。
/some-static-content-folder/包含
test.png
尝试访问test.png我尝试过:
/some-static-content-folder/test.png
并且找不到该文件。但是尝试
/some-static-content-folder/some-static-content-folder/test.png
它出现了。因此,似乎Tomcat默认的servlet(至少为6.0.16)会删除servlet映射,并会尝试使用剩余路径查找文件。
Jetty给出了您和我所期望的行为。
是否有某些原因导致您无法执行某些 *** 作,例如为其余调用映射根目录。诸如app映射到/ rest_root /
之类的事情要由您负责rest_root文件夹中发生的任何事情,但是Tomcat应该处理其他任何地方,除非您进行其他显式映射。我建议将您的其余servlet设置为路径映射,因为它可以更好地声明意图。使用/或/
似乎不合适,因为您必须映射例外。以SO为例,我的其余映射将类似于
/ users / *用于用户servlet
/ posts / *用于posts servlet
映射顺序
- 显式(路径映射)
- 隐式(扩展映射)
- 默认(/)
请纠正我弄错的任何事情。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)