为什么Servlet.service设计为返回void?

时间:2014-11-03 02:35:05

标签: java api servlets void

在java 7中,Servlet接口位于包" javax.servlet"中。该接口定义了一个"服务"返回void并接受ServletRequest和ServletResponse作为输入参数的方法。为什么它被设计为返回void而不是ServletResponse?我对api设计很感兴趣,看起来反直觉。但这可能是一个很好的理由。

http://docs.oracle.com/javaee/7/api/index.html?javax/servlet/ServletRequest.html

1 个答案:

答案 0 :(得分:3)

ServletResponse不是servlet生成的东西。

Web应用程序容器管理,并通过参数注入service,就像ServletRequest一样。

通过与此ServletResponse实例交互来创建输出(它具有检索Writer或OutputStream以及设置标头的方法)。

这样,只有容器需要关心管理套接字和其他低级别事物。

另一种方法是执行类似Spring MVC的操作,其中responder方法创建并向容器返回某种业务对象(或只是一个String)。然后容器知道如何通过电线发送它。

对于大多数情况,这种更高级别的API更方便。但是,即使在Spring MVC中,您有时也需要访问较低级别的API,例如流式传输您不希望在内存中构建的大型结果(在那里您可以获得OutputStream并写入它)。 p>