快速业务通道

Tomcat的过滤诀窍 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
自响应对象的实际流的 引用。baStream 是我们输出流的缓冲版本,后续处理器就写入这里。closed 标 记标明了 close() 是否在此实例流中被调用。构造器将来自响应对象的流引用存储起来并创建了缓冲流。它还将文本字符串存储起来供以后的替代操作使用。

清单 8. write() 方法

public void write(int i) throws  java.io.IOException {       baStream.write(i);     }

Tomcat的过滤诀窍(6)

时间:2010-12-13 IBM Sing Li

我们须提供自己的源于 ServletOutputStream 的 write() 方法。在此,我 们当然是写入缓冲流。所有来自后续处理器的更高级输出方法都将以最低级别使 用该方法,以保证所有的写入都指向缓冲流。

清单 9. close() 及 flush() 方法

public void close()  throws java.io.IOException {       if (!closed) {        processStream();        intStream.close();        closed = true;       }      }    public void flush() throws java.io.IOException {      if (baStream.size() != 0) {         if (! closed) {         processStream();      // need to synchronize  the flush!         baStream = new ByteArrayOutputStream();         }        }      }

close() 及 flush() 方法是我们完成转换的语句。根据后续处理器不同,其 中的一个或两个程序都有可能被调用。我们使用布尔型的 closed 标识来避免异 常情况。请注意,我们将实际的替代工作委托给了 processStream() 方法。

清单 10. processStream() 方法

public void processStream()  throws java.io.IOException {       intStream.write(replaceContent(baStream.toByteArray ()));       intStream.flush();     }

processStream() 方法将经转换的输出结果从 baStream 写入其已经配有的 intStream 中去。转换工作独立于 replaceContent() 方法。

清单 11. replaceContent() 方法

public byte []  replaceContent(byte [] inBytes) {       String retVal ="";       String firstPart="";       String tpString = new String(inBytes);       String srchString = (new String (inBytes)).toLowerCase();       int endBody = srchString.indexOf(origText);       if (endBody != -1) {          firstPart = tpString.substring(0, endBody);        retVal = firstPart + newText +            tpString.substring(endBody + origText.length ());        } else {         retVal=tpString;        }       return retVal.getBytes();    } }

replaceContent() 是发生搜索与替换的语句。它将一个字节数组作为输入并 返回一个字节数组,创建一个原始的概念接口。事实上,我们能通过替换该方法 中的逻辑部分来完成任何形式的转换。这里,我们进行非常简单的文本替换。

清单 12. ReplaceTextWrapper 类

class ReplaceTextWrapper  extends HttpServletResponseWrapper {    private PrintWriter tpWriter;    private ReplaceTextStream tpStream;    public ReplaceTextWrapper(ServletResponse inResp, String  searchText,                 String replaceText)                 throws java.io.IOException {       super((HttpServletResponse) inResp

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号