Filter对Response的改变:HttpServletResponseWrapper的工作原理

7)Filter对Response的改变:HttpServletResponseWrapper的工作原理

马 克-to-win:前面我们讲的知识,主要说的是由于Filter的参与,用户的访问路径被改变的问题。底下我们就要讲一点更难的话题,就是Filter 如何改变一个现有的html。比如我写的新浪博客,写完以后,一上传,内容有时有些改变,谁动的手脚?肯定是新浪公司编了什么Filter过滤器,把我的 html的内容给改变了。马克-to-win:现在问题是:这是如何实现的呢?这里核心问题其实就是如何改变Response?本来我的html在原来的 Response里,准备返回给客户端。但现在在Filter当中被改变了。但这又是怎么改变的呢?这里涉及到一个 HttpServletResponseWrapper的类实例myWrapper问题。Wrapper英文就是包裹者的意思。正常情况下,我们过去的认 识是:chain.doFilter(request, response);的意思就是访问完后面的目标资源以后,目标资源把要返回给客户端的内容放在Response当中。而现在这里的例子就不同了:通过 chain.doFilter(request, myWrapper);目标资源就会把 要返回给客户端的内容放在myWrapper当中了。这时在Filter当中,我们就可以从myWrapper当中取出返回给客户端的内容,接着就可以大 大方方的对其进行改变了。要想做成这件事儿,当然还得符合sun公司制定的有关HttpServletResponseWrapper的所有规章制度。首 先通过MarkToWinWrapper myWrapper = new MarkToWinWrapper((HttpServletResponse) response);让response和myWrapper联系起来。马克-to-win:之后,在我编的MarkToWinWrapper这个普通类 当中,需要初始化一个CharArrayWriter的实例:myContent = new CharArrayWriter();和PrintWriter的实例pw=new PrintWriter(myContent);

详情请见:http://www.mark-to-win.com/index.html?content=Jsp/jspUrl.html&chapter=Jsp/jsp6_web.html#HttpServletResponseWrapper

猜你喜欢

转载自blog.csdn.net/mark_to_win/article/details/84982319