在java.servlet.http包中,包含了一个名为HttpServletResponseWrapper的类,该类的对象表示一个自定义的响应对象,实现了HttpServletResponse接口,其构造方法通过传入的HttpServletResponse类型的参数,将响应转换为自定义的响应,构造方法的语法结构:
public HttpServletResponseWrapper(HttpServletResponse response)
创建Cr.java类文件,处理对页面响应的内容,用toString()方法进行重载,将页面中的内容转换为自定义的响应
package com.cn.zj.ServletFilter;
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class Cr extends HttpServletResponseWrapper {
private CharArrayWriter output;
public Cr(HttpServletResponse response) {
super(response);
this.output=new CharArrayWriter();
}
public String toString(){
return output.toString();
}
public PrintWriter getWriter(){
return new PrintWriter(output);
}
}
创建过滤器CtFilter.java,在doFilter()方法中获取页面的响应,对响应进行处理
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class CtFilter extends HttpServlet implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws ServletException,
IOException {
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
Cr wrapper = new Cr((HttpServletResponse)response);
filterChain.doFilter(request, wrapper);
String resStr = wrapper.toString().trim();
String newStr = "";
if (resStr.indexOf("混蛋") > 0) {
newStr = resStr.replace("混蛋","好人");
}
out.println(newStr);
}
}
web.xml文件配置过滤器
<welcome-file-list>
<welcome-file>index2.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>cr</filter-name>
<filter-class>com.cn.zj.ServletFilter.CtFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cr</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
index2.jsp页面
<%@ page contentType="text/html; charset=gb2312" language="java"
import="java.sql.*" errorPage=""%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>使用过滤器对响应页面中敏感字符过滤</title>
<style type="text/css">
<!--
body
-->
</style>
</head>
<body>
<div> 网络编程词典您的建议有那些:</div>
<table height="100" width="300" cellpadding="2" cellspacing="2" border="2" bordercolor="lightblue">
<Tr align="center"><td>
<div style="size: 6ex;">增学习内容丰富度,混蛋,技术与技术的实用性网络浏览响应时间,以后周全的客服安排</div>
</td></Tr>
</table>
</body>
</html>