[英]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 {
}
所以问题是:
web.xml
的规范吗?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.