将ServletResponse作为参数传递的任何好理由?

时间:2013-09-25 09:44:47

标签: java servlets

javax.servlet.Servlet的原因是否有任何正当理由 void service(ServletRequest req, ServletResponse res)方法将ServletResponse作为参数给出,而不仅仅是返回它?

4 个答案:

答案 0 :(得分:2)

Java Servlet API是一个抽象,它定义了任何Java Web应用程序处理任何类型请求所需的最低要求(如果你看一下,你会注意到几乎所有的类都被定义为接口或抽象类)。

此API已由JCP在不同Java服务器供应商(IBM,Sun,Apache,Oracle等)就最低要求达成一致的流程之后定义,从而定义了现在被视为官方的内容标准。但是,不同的供应商有不同的方法来实现他们的servlet容器,导致现在它们的数量不同(每个都具有不同的功能)。

由于servlet容器需要跟踪对象(请求和响应)以正确处理两者,因此无法利用创建ServletResponse(或HTTP变体{{的责任。 1}})对用户 - 请记住Servlet的HttpServletResponse方法内部的内容是用户代码。因此,servlet容器在调用service方法之前创建并预填充请求和响应对象(使用它们自己的实现)。从用户的角度来看,只需通过接口处理它们就足够了,这也可以保护特定于供应商的代码,因为我们无法访问这两个对象的实际实现。

然而,当定义API时,这些供应商意识到,在某些情况下,用户希望覆盖任何这些对象的默认行为,因此它们包含一组包装器(service,{{1可以通过用户代码扩展,并在servlet或过滤器中使用,以替换容器提供的默认实现。

答案 1 :(得分:0)

请求的完整周期由requestresponse组成,当我们发出请求时,请求和响应对象由容器创建并提供处理它们的权限。

如果你看到文档

  

由servlet容器调用,以允许servlet响应请求。

与请求关联的响应对象,您只需响应该请求。

如果你自己创建一个Response对象,没有请求,你可以随机发送一个响应吗?

答案 2 :(得分:0)

作为res传入的对象将是ServletResponse的容器特定子类。您无法以独立于容器的方式自己创建此类实例。

答案 3 :(得分:0)

根据来自客户端的请求,Web容器创建ServletResponse对象并在服务方法中传递此对象,以便可以提供对客户端的响应。