有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java哪个类提供getRequestDispatcher()方法的实现

ServletRequest接口getRequestDispatcher()方法返回RequestDispatcher的对象

我知道getRequestDispatcher()方法在接口ServletRequest中。由于它是一个接口,因此不会定义方法

此外,在另一个接口中,{em6}是继承的。但是作为一个接口,它不会定义它的方法

现在,在仔细检查JavaDocs之后,我找不到任何实现这两个接口的类,并且定义了getRequestDispatcher()方法

所以我想知道他们是从哪里定义这个方法的

提前谢谢


共 (3) 个答案

  1. # 1 楼答案

    对于jetty v6,它是org.mortbay.jetty.servlet.ServletHandler,返回org.mortbay.jetty.servlet.Dispatcher实例

    这就是Dispatcher的forward工作原理:

    1. 它接受原始请求,用新值替换请求url
    2. 清除输出流
    3. 通过上下文执行请求响应对。处理(请求、响应)
    4. 为请求重置请求url的原始值
  2. # 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

    您可以看到这个类office Dochere,并可以检查它是否实现了interface javax.servlet.ServletRequest及其方法,如getRequestDispatcher()

  3. # 3 楼答案

    每个容器(Tomcat、Jetty等)都有自己的类来实现HttpServletRequest。此类实现接口的所有方法。该类的一个实例由容器传递给servlet

    如果你真的很好奇,加上

    System.out.println(request.getClass());
    

    到您的servlet,您将知道具体类的名称

    但实际上,你不需要知道。您需要知道的是,它实现了HttpServletRequest接口,从而实现了javadoc和规范中描述的契约