【问题标题】:Does PrintWriter implement HTTPServletResponsePrintWriter 是否实现 HTTPServletResponse
【发布时间】:2013-08-21 15:29:50
【问题描述】:

我很难理解线条构造的语义

PrintWriter out = response.getWriter()

首先,我注意到 HTTPServletResponse 是一个接口,但没有 getWriter 方法。

那么response.getWriter() 怎么可能呢?或者更好的是,接口变量如何调用方法? 除此之外,PrintWriter 是否实现了 HTTPServletResponse?

我查看了 Java 实现,但似乎不是;那么如何分配response.getWriter()

谢谢

【问题讨论】:

  • HTTPServletResponse 从 ServletResponse 继承 getWriter() 方法(通过扩展此接口)。理解这段代码的关键是容器将 HTTPServletResponse 的实例(即实现该接口的某个类)传递给 servlet。
  • 我尝试使用自己的方法重新创建此功能,但在参数部分不断收到 NullPointer 异常。什么样的实例被传递到 HTTPServletResponse?该类与接口和 PrintWriter 类有何关系?

标签: java jsp http tomcat servlets


【解决方案1】:

response.getWriter() 返回一个PrintWriter 的实例。

方法getWriter()定义在接口ServletResponse上,该接口是HttpServletResponse的父接口。

您有一个HttpServletResponse 的具体实现,它实现了getWriter() 方法。

您应该查看 HttpServletResponse 的 javadoc。

【讨论】:

    【解决方案2】:

    PrintWriter 是否实现 HTTPServletResponse

    没有。 HttpServletResponse 没有getWriter 方法它在ServletResponse 超级接口中定义,更具体的在这里:ServletResponse#getWriter

    接口变量如何调用方法?

    例如,在您的 servlet 的 doGet 方法中,您会收到一个 HttpServletResponse 参数,该参数是应用程序服务器与实现此接口的类的实例一起发送的。请注意,类实现可能因供应商而异,即 Tomcat 中的类实现与 WebLogic 中的类实现不同。这样做是为了让您可以通过使用接口专注于主要工作,而不是为不同的应用服务器实现编写不同的逻辑。

    与最后一点有关:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-17
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2017-12-27
      相关资源
      最近更新 更多