Tomcat 的过滤诀窍
2009-11-05 00:00:00 来源:WEB开发网这是定制的输出流代码。 intStream 变量包含了对来自响应对象的实际流的引用。 baStream 是我们输出流的缓冲版本,后续处理器就写入这里。 closed 标记标明了 close() 是否在此实例流中被调用。构造器将来自响应对象的流引用存储起来并创建了缓冲流。它还将文本字符串存储起来供以后的替代操作使用。
清单 8. write() 方法 public void write(int i) throws java.io.IOException {
baStream.write(i);
}
我们须提供自己的源于 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() 方法。
更多精彩
赞助商链接