包装,过滤器和Servlet

时间:2013-05-10 10:34:24

标签: servlets filter wrapper

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

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

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

1 个答案:

答案 0 :(得分:13)

1)让我们先了解RequestRequest Filter的工作原理:

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

容器控制使实现请求过滤器变得容易,因为我们可以让容器知道Request应首先进入过滤器然后再进入servlet。因为容器完全可以控制。因此,实施请求过滤器非常简单。

2)现在让我们了解ResponseResponse Filter的工作方式:

当容器调用Servlet服务方法时,它会将2个对象传递给方法RequestResponse

这只是意味着Servlet完全可以将响应发送回客户端。怎么样 ?

因为Response对象具有指针Output Stream Writer对象。这意味着,一旦Servlet完成处理请求,它将使用指针直接将Response写回客户端到Output Writer Stream对象。因此,Servlet不会等待任何人(中间人喜欢过滤器)并直接为客户服务。到那时,干预已经太晚了。

那么,解决方案是什么?

Wrapper是我们的解决方案。

Wrapper如何运作?

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

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

故事的道德:在处理wrapper时使用ResponseRequest不需要包装概念。