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

标签 java api servlets void

在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/

相关文章:

javascript - video.js 使用类而不是 URL 结束事件

web-services - 未确认电子邮件但成功登录的 REST API Http 状态代码

java - 将字符串从 jsp 传递到 servlet 时获取 null

java - Elasticsearch High Level Rest Client - 带有类型(子)字段的 Java map - 日期、数字等

api - 您在youtube-videos脚本中的开发人员 key 是什么?

java - 如何在我的 Eclipse 项目中导入 javax.servlet/jakarta.servlet API?

java - 使用tomcat7部署并自动编译servlet

java - 为什么 Weld 在 Tomcat 上显示 "Injection into Listeners is not supported"?

java - 正则表达式避免了 Java 中不必要的回溯

java - 在ZK Java中生成原生html表