getRequestDispatcher()
接口的ServletRequest
方法返回RequestDispatcher
的对象。
我知道getRequestDispatcher()
方法位于接口 ServletRequest
中。由于它是接口,因此无法定义方法。
此外,此接口再次在另一个接口 HttpServletRequest
中继承。但作为一个界面,它不会定义它的方法。
现在,在仔细检查JavaDocs之后,我找不到任何实现这两个接口之一的类,并定义了getRequestDispatcher()
方法。
所以我想知道他们在哪里定义了这个方法
提前致谢。
答案 0 :(得分:3)
每个容器(Tomcat,Jetty等)都有自己的实现HttpServletRequest的类。该类实现了接口的所有方法。该类的一个实例由容器传递给您的servlet。
如果您对此非常好奇,请添加
System.out.println(request.getClass());
到你的servlet,你就会知道具体类的名字。
但实际上,你不需要了解它。您需要知道的是它实现了HttpServletRequest接口,从而完成了javadoc和规范中描述的契约。
答案 1 :(得分:2)
在 TOMCAT 容器的情况下,实现的类是org.apache.catalina.connector.RequestFacade
。
实施基本上取决于容器和每个容器都有自己的实现,符合J2EE规范。
使用以下代码检查实现类: -
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException {
System.out.println(httpServletRequest.getClass());
}
}
输出: - org.apache.catalina.connector.RequestFacade
您可以查看此类官方文档here,并可以检查它是否已实施interface javax.servlet.ServletRequest
及其getRequestDispatcher()
等方法。
答案 2 :(得分:0)
对于jetty v6,它是org.mortbay.jetty.servlet.ServletHandler
及其返回org.mortbay.jetty.servlet.Dispatcher
实例。
这就是Dispatcher在那里工作的forward
: