2013-08-21 13 views
0

我有一个很难理解的线是否为PrintWriter实现HttpServletResponse的

PrintWriter out = response.getWriter() 

建设的语义首先,我注意到,HttpServletResponse的是一个接口,但没有方法的getWriter。

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

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

感谢

+0

HTTPServletResponse从ServletResponse继承了getWriter()方法(通过扩展此接口)。理解这段代码的关键是容器将HTTPServletResponse的实例(即实现该接口的某个类)传递给servlet。 –

+0

我试图用我自己的方法重新创建这个功能,但在参数部分不断得到NullPointer异常。什么样的实例被传递给HTTPServletResponse?那个类如何与接口和PrintWriter类相关联? – dido

回答

2

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

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

您具体实现了HttpServletResponse,它实现了getWriter()方法。

你应该看看HttpServletResponse的javadoc。

1

不为PrintWriter实现HttpServletResponse的

HttpServletResponse号没有getWriter方法它在ServletResponse超级接口中定义的,更具体的位置:ServletResponse#getWriter

接口变量如何调用方法?

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

相关的最后一点: