Tomcat 的过滤诀窍
2009-11-05 00:00:00 来源:WEB开发网编写转换资源的过滤器
现在该来试一下更复杂的过滤器了。该过滤器:
从过滤器定义的实例初始化参数中读取一组 "search" 及 "replace" 文本
过滤被访问的 URL,将出现的第一个 "search" 文本替代为 "replace" 文本
在我们深入研究这个过滤器的过程中,您将对内容转换/替代过滤器的架构加深了解。相同的架构能用于任何加密、压缩及转换(如由 XSLT 转换来的 SML)过滤器。
核心机密是在链式处理的过程中传递一个定制的响应对象的包装版本。该定制的包装响应对象须隐藏原响应对象(从而对其实现 包装),并提供一个定制的流以供后续处理器写入。如果工作(文本替换、转换、压缩、加密…等)能迅速完成,定制流的执行就能中止后续记录并完成需要的工作。然后定制的流就会将经转换的数据写入包装的响应对象(也就是说,简单的字符替换加密)。如果工作无法迅速完成,定制的流就需等待,直到后续处理器完成对流的写入(也就是说,当其关闭或刷新流时)。然后它才完成转换工作,并将经转换的输出结果写入“真正的”响应中。
在我们的过滤器( ReplaceTextFilter )中,定制的包装响应对象叫作 ReplaceTextWrapper 。定制流的执行叫做 ReplaceTextStream 。您能在 com.ibm.devworks.filters 包中的 ReplaceTextFilter.java 文件里找到源代码。现在就让我们来研究一下源代码吧。
清单 7. ReplaceTextStream 类 class ReplaceTextStream extends ServletOutputStream {
private OutputStream intStream;
private ByteArrayOutputStream baStream;
private boolean closed = false;
private String origText;
private String newText;
public ReplaceTextStream(OutputStream outStream,
String searchText,
String replaceText) {
intStream = outStream;
baStream = new ByteArrayOutputStream();
origText = searchText;
newText = replaceText;
}
更多精彩
赞助商链接