@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映射规范中说:
如果有效的web.xml(合并来自片段和注释的信息之后)包含映射到多个servlet的任何url模式,则部署必须失败。
因此,规范显然不允许这样做。
替代解决方案:创建一个WebFilter,该WebFilter向前调度到另一个URL,该URL由你的上等servlet处理。或者只是在过滤器本身中做你的事情。
@WebFilter选项适用于我们的目的