因为我是Servlet编程的新手,所以我可能会问一个基本问题。
我正在编写一个应用程序,其中Filter从servlet获取响应,并使用它进行一些计算。我发现我需要一个包装类来捕获响应。
我现在的问题是为什么需要包装?提前谢谢!
答案 0 :(得分:13)
1)让我们先了解Request
和Request Filter
的工作原理:
当我们说客户端向servlet发出请求时,它会通过容器。容器决定需要转发到哪个servlet Request
。这意味着,容器完全可以控制。
容器控制使实现请求过滤器变得容易,因为我们可以让容器知道Request
应首先进入过滤器然后再进入servlet。因为容器完全可以控制。因此,实施请求过滤器非常简单。
2)现在让我们了解Response
和Response Filter
的工作方式:
当容器调用Servlet服务方法时,它会将2个对象传递给方法Request
和Response
。
这只是意味着Servlet完全可以将响应发送回客户端。怎么样 ?
因为Response
对象具有指针到Output Stream Writer
对象。这意味着,一旦Servlet完成处理请求,它将使用指针直接将Response
写回客户端到Output Writer Stream
对象。因此,Servlet不会等待任何人(中间人喜欢过滤器)并直接为客户服务。到那时,干预已经太晚了。
那么,解决方案是什么?
Wrapper
是我们的解决方案。
Wrapper如何运作?
因此,在容器将真正的Request
和Response
对象传递给Servlet之前,我们将包装我们的Response
对象,然后发送Real Request
和Wrapped 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
不需要包装概念。