我的数据库已经被插入了若干条存在非法字符的数据,请问如果使用Filter来过滤数据库中读取的每个字段?
以下是我通过文档写的代码但不知如何修改,如下:package com.xjdnw.utility;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;public class Response2Filter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {

HttpServletResponseWrapper2 response2 = new HttpServletResponseWrapper2((HttpServletResponse) response);
chain.doFilter(request, response2);

PrintWriter out = response.getWriter();   
out.println(response2.toString());    response2.setHeader("Cache-Control", "no-cache");
response2.setHeader("Pragma", "no-cache");
response2.setHeader("X-UA-Compatible", "IE=EmulateIE7");
response2.setHeader("Content-Type", "text/html; charset=UTF-8");
response2.setDateHeader("Expires", -1);
} public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub } private class HttpServletResponseWrapper2 extends HttpServletResponseWrapper {
private StringWriter stringWriter; public HttpServletResponseWrapper2(HttpServletResponse response) {
super(response); // TODO Auto-generated constructor stub
stringWriter = new StringWriter();
} public PrintWriter getWriter() { return new PrintWriter(stringWriter);
} public String toString() {
 
return stringWriter.toString();
}
}
}

解决方案 »

  1.   

    用sprint里的 置后通知,在获取数据后过滤。
    在filter里面不太行吧,因为都是页面提交时过滤,响应时没过滤哦。
      

  2.   

    这是我写的一个filter,过滤貌似不错,没出现过乱码!
    ackage com.yourcompany.gbk;import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;public class CharsetFilter implements Filter{
        protected String encoding = null;         protected FilterConfig filterConfig = null; 
        protected boolean ignore = true; 
        public void destroy() {         this.encoding = null;         this.filterConfig = null;     }     public void doFilter(ServletRequest request, ServletResponse response,                          FilterChain chain)     throws IOException, ServletException {         // Conditionally select and set the character encoding to be used         if (ignore || (request.getCharacterEncoding() == null)) {             String encoding = selectEncoding(request);             if (encoding != null)                 request.setCharacterEncoding(encoding);         }         // Pass control on to the next filter         chain.doFilter(request, response);     }     public void init(FilterConfig filterConfig) throws ServletException {         this.filterConfig = filterConfig;         this.encoding = filterConfig.getInitParameter("encoding");         String value = filterConfig.getInitParameter("ignore");         if (value == null)             this.ignore = true;         else if (value.equalsIgnoreCase("true"))             this.ignore = true;         else if (value.equalsIgnoreCase("yes"))             this.ignore = true;         else             this.ignore = false;     }     protected String selectEncoding(ServletRequest request) {         return (this.encoding);     } 
    }
    web-xml配置:
    <filter>        <filter-name>Encoding</filter-name> 
            <filter-class>com.yourcompany.gbk.CharsetFilter</filter-class>
            <init-param>              
            <param-name>encoding</param-name> 
            <param-value>GB2312</param-value>        
            </init-param>    
     </filter>    
            <filter-mapping>        
            <filter-name>Encoding</filter-name>        
            <url-pattern>/*</url-pattern>    
            </filter-mapping>
    基本上可以了
      

  3.   

    一般过滤都是防止写入的,不知道你的需求是什么?
    如果想删除,sql语句即可。
    如果数据库存的是过滤表,启动时读入内存。