为什么Servlet的doGet()方法将响应作为参数而不是返回值?

时间:2013-11-22 09:47:12

标签: java-ee servlets

我以前从未质疑过,但为什么

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{}

而不是

public HttpServletResponse doGet(HttpServletRequest request)
    throws ServletException, IOException{}

第二个版本不会在语义上更有意义吗?

1 个答案:

答案 0 :(得分:6)

HttpServletResponse是一个相当复杂的类,需要您了解连接套接字等。如果你必须返回一个,那么大多数代码都是相同的样板来构造它。相反,servlet容器可以为您完成这项工作,为您提供一个包含各种有用工作方法的即用型对象。

现在接下来的问题是为什么他们决定让HttpServletResponse成为一个复杂的对象,而不仅仅是让你返回一个简单的POJO。嗯,对于其中之一,该架构不允许您在拥有所有数据之前开始编写任何流式响应。