-1

Servlet API 将 doGet 定义为:

public void doGet ( HttpServletRequest req, HttpServletResponse res)

为什么它没有被定义为(这对我来说看起来更直观):

public HttpServletResponse doGet ( HttpServletRequest req )

我知道 ServletContainer 创建了一个 HttpServletResponse 实例并传递给我们的 doGet() 方法;但是为什么我们没有办法创建这个对象并返回它呢?

4

1 回答 1

3

你为什么要这样做?换句话说 -HttpServletResponse您创建的实例将如何实现比来自容器的实例更多?

无论如何,这里有几个原因:

  • 有些方法有严格的约定(例如,在发送完所有标头后,您不能添加更多标头)。容器如何确保这是否正确实施?
  • 一些方法需要大量的低级细节,例如encodeUrl。为什么要把这个负担交给用户?
  • sendRedirect和其他方法sendError需要立即执行容器操作。如果您HttpServletResponse自己创建,则此操作很有可能会不必要地延迟到您退出为止doGet
于 2013-04-11T13:10:08.180 回答