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

Java 为什么Servlet.service被设计为返回void?,java,api,servlets,void,Java,Api,Servlets,Void,在Java7中,Servlet接口位于包“javax.Servlet”中。该接口定义了一个“服务”方法,该方法返回void并接受ServletRequest和ServletResponse作为输入参数。为什么它被设计为返回void而不是ServletResponse?我对api设计感兴趣,这似乎违反直觉。但这可能有一个很好的理由 ServletResponse不是由servlet生成的 它由web应用程序容器管理,并通过参数注入到服务,就像ServletRequest一样 输出是通过与这个Ser

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


ServletResponse不是由servlet生成的

它由web应用程序容器管理,并通过参数注入到
服务
,就像
ServletRequest
一样

输出是通过与这个
ServletResponse
实例交互创建的(它有检索Writer或OutputStream以及设置头的方法)

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

另一种方法是执行类似SpringMVC的操作,其中响应程序方法创建并向容器返回某种业务对象(或只是一个字符串)。然后,容器知道如何通过电线发送

这种更高级的API在大多数情况下更方便。然而,即使在Spring MVC中,您有时也需要访问较低级别的API,例如,流式传输不想在内存中构建的大型结果(在那里,您获得输出流并将其写入)。

默认的
service()
内部调用
doGet()
doPost()
等。Spring MVC的工作方式与您预期的一样。