我有一个入口 servlet(称为 DispatcherServlet),它根据配置参数将 /* 处的所有传入 GET 和 POST 请求重定向到其他 servlet。为了将请求分派给其他 servlet,我使用它们的名称而不是路径,因为我的 DispatcherServlet 在侦听 /*.
“旧”方法是在 web.xml 描述符中为 servlet 命名:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>mypackage.MyServlet</servlet-class>
</servlet>
之后,可以通过名称来寻址 servlet,例如,当使用RequestDispatcher
. 我的 DispatcherServlet 中的代码如下所示:
RequestDispatcher dispatcher = getServletContext().getNamedDispatcher("MyServlet"); dispatcher.forward(请求,响应);
这完美地工作。但是,我想使用没有 web.xml 的“新”Servlet 3 注释,因此我这样做:
@WebServlet(name="MyServlet")
public class MyServlet extends HttpServlet {
...
但是现在,getServletContext().getNamedDispatcher("MyServlet")
在我的 DispatcherServlet 中返回null而不是适当的调度程序 for MyServlet
,尽管我希望它@WebServlet(name="MyServlet")
的行为相同<servlet-name>MyServlet</servlet-name>
我已经在 Tomcat 7 上对此进行了测试。这是因为在调用 DispatcherServlet 时尚未加载 MyServlet,因此不知道 MyServlet 的名称吗?@WebServlet(name="...")
如果是这样,注释有什么意义;)
请不要回答“你为什么不使用过滤器?”之类的问题。等等。这更多是关于注释与web.xml的背景
提前致谢!
(ps.如果你找到更合适的,请更改标题;))