2

有什么好的理由为什么javax.servlet.Servlet's 的
void service(ServletRequest req, ServletResponse res)方法具有ServletResponse给定的参数,而不是仅仅返回它?

4

4 回答 4

3

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

该 API 由JCP在不同 Java 服务器供应商(IBM、Sun、Apache、Oracle 等)同意最低要求的过程之后定义,从而定义了现在被视为官方标准的内容。然而,不同的供应商有不同的方式来实现他们的 servlet 容器,导致现在它们的数量不同(每个都有不同的特性)。

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

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

于 2013-09-25T10:06:27.440 回答
0

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

如果您看到文档

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

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

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

于 2013-09-25T09:46:17.197 回答
0

基于来自客户端的请求,Web 容器创建一个 ServletResponse 对象并将该对象传递到服务方法中,以便可以向客户端提供响应。

于 2013-09-25T10:04:14.117 回答
0

传入的对象res将是特定于容器的子类ServletResponse。您不能以独立于容器的方式自己创建这样的实例。

于 2013-09-25T09:49:22.090 回答