繁体   English   中英

Tomcat 9+:使用 @WebServlet 注释覆盖 Servlet 映射

[英]Tomcat 9+: overriding Servlet mapping using @WebServlet annotation

@WebServlet注释与web.xml servlet 映射的优先顺序是什么? 更具体地说,我们有一个用例,我们宁愿不修改web.xml但需要覆盖其中一个 servlet 映射。 我们的web.xml有类似的东西:

<servlet>
   <servlet-name>foo</servlet-name>
   <servlet-class>com.whatever.simple.foo</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>foo</servlet-name>
   <url-pattern>/foo/*</url-pattern>
</servlet-mapping>

我们正在考虑使用以下方法覆盖它:

@WebServlet("/foo/*")
public class OurCustomImplementation extends HttpServlet {
}

所以问题是:

  • 规范是否允许我们添加一些参数来这样做(例如覆盖或优先参数)?
  • 保证我们的 class 将始终覆盖web.xml的规范吗?
  • Tomcat 9+ 是否允许这样做,即使可能使用一些扩展?

Servlet 3.1 Final 和 4.0.Final 规范都在 12.2 Specification of Mappings 中说:

如果有效的 web.xml(在合并来自片段和注释的信息之后)包含映射到多个 servlets 的任何 url 模式,则部署必须失败。

所以规范显然不允许这样做。

替代解决方案:创建一个 WebFilter,它将转发到另一个 url,您的覆盖 servlet 处理。 或者只是在过滤器本身中做你的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM