6

因为我是 Servlet 编程的新手,所以我可能会问一个基本问题。

我正在编写一个应用程序,其中过滤器从 servlet 获取响应,并用它进行一些计算。我发现我需要一个包装类来捕获响应。

我现在的问题是为什么需要包装器?提前致谢!

4

1 回答 1

15

1)让我们首先了解如何RequestRequest Filter工作:

当客户端向 servlet 发出请求时,它会通过容器。容器决定Request需要转发到哪个 servlet。这意味着,容器处于完全控制之中。

容器控制使实现请求过滤器变得容易,因为我们可以让容器知道Request应该先过滤,然后再到 servlet。因为容器处于完全控制之中。所以实现请求过滤器很容易。

2)现在让我们了解如何ResponseResponse Filter工作:

当容器调用 Servlet 服务方法时,它会将 2 个对象传递给方法,Request并且Response.

这仅仅意味着 Servlet 可以完全控制将响应发送回客户端。如何 ?

因为Responseobject 有指向object的指针Output Stream Writer。这意味着,一旦 Servlet 处理完请求,它将使用指向对象的指针直接写Response回客户端。因此,Servlet 不会等待任何人(像过滤器这样的中间人)并直接为客户端服务。到时候,再干预也为时已晚。Output Writer Stream

那么,解决方案是什么?

Wrapper是我们的解决方案。

包装器如何工作?

因此,在容器将真实的RequestResponse对象传递给 Servlet 之前,我们将包装我们的Response对象,然后将Real RequestWrapped Response对象发送给 Servlet 服务方法。

所以现在,Servlet 有指向我们的Wrapped Output Stream Writer对象而不是Real Response Output Stream Writer对象的指针。因此,当 Servlet 完成请求时,它会将响应写入 our Wrapped Stream,然后 OurWrapped Response Object将回写到Real Response Writer Stream.

故事寓意:wrapper处理时使用ResponseRequest不需要包装器概念。

于 2013-05-11T00:56:30.517 回答