在java 7中,Servlet接口(interface)位于包“javax.servlet”中。该接口(interface)定义了一个“服务”方法,该方法返回 void 并接受 ServletRequest 和 ServletResponse 作为输入参数。为什么它被设计为返回 void 而不是 ServletResponse?我对 api 设计很感兴趣,但它似乎违反直觉。但这可能是有充分理由的。
http://docs.oracle.com/javaee/7/api/index.html?javax/servlet/ServletRequest.html
最佳答案
ServletResponse
不是由 servlet 生成的。
它由Web应用程序容器管理,并通过参数注入(inject)到service
,就像ServletRequest
一样。
通过与此 ServletResponse
实例交互来创建输出(它具有检索 Writer 或 OutputStream 以及设置 header 的方法)。
这样,只有容器需要关心管理套接字和其他低级事物。
另一种方法是执行类似 Spring MVC 的操作,其中响应者方法创建并向容器返回某种业务对象(或只是一个字符串)。然后容器知道如何通过网络发送它。
这个更高级别的 API 在大多数情况下更方便。然而,即使在 Spring MVC 中,您有时也需要访问较低级别的 API,例如流式传输您不想在内存中构建的大型结果(您可以在其中获取 OutputStream 并写入它)。
关于java - 为什么 Servlet.service 被设计为返回 void?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26706987/