包装,过滤器和Servlet

6 servlets filter wrapper

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

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

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

Rav*_*edi 13

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

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

容器控件使得实现请求过滤器变得容易,因为我们可以让容器知道Request应该首先过滤然后过滤到servlet.因为容器完全可以控制.因此,实现请求过滤很容易.

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

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

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

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

那么,解决方案是什么?

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与交易时Response.Request不需要包装概念.