package Doudya.Page.Listener;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import javax.servlet.ServletException;
public class EncodingFilter implements Filter{
protected FilterConfig fc;
private String eds = "utf-8";
public void init(FilterConfig fc) throws ServletException{
this.fc = fc;
this.eds = fc.getInitParameter("encoding");
}
public void doFilter(final ServletRequest sq,final ServletResponse sp,FilterChain nfc) throws IOException,ServletException{
HttpServletResponse hsp = (HttpServletResponse)sp;
HttpServletRequest hsq = (HttpServletRequest)sq;
HttpSession hs = hsq.getSession();
try{
hsp.setCharacterEncoding(eds);
hsp.getWriter().println("<!-- 本页已经设置编码为/"" + eds + "/" -->");
nfc.doFilter(sq,sp);
}catch(Exception e){/***这里很可能会捕捉到所有页面上的错误***/}
}
public void setFilterConfig(final FilterConfig fc){
this.fc = fc;
}
public void destroy(){
this.fc = null;
}
}
/***********************************************************************************************/
上面是一个简单的过滤器,它可以在每个jsp文件的上方加上一行字,也可以把页面上的所有错误忽略掉。哈哈。其实就是那个空的catch。这是我自己程序中出现Bug的地方啦。因为我要调试一个错误,可是每一次都会跳转到固定的错误页/error.jsp上而error.jsp的exception却是空的,我很疑惑。(原来的catch不是空的,现在我把它去掉了,为了大家看得更清楚。)。
那么,我发这篇文章的目的就出来了。 我想,大家尽可以利用这个Bug来做点什么了。我们可以利用它把所有页面上的错误都收集起来,以便修复,这可比在每一页上都加入错误处理要方便得多。还可以利用我写注释的方法为每一个页面都写上一些东西,即使别人加了新的页面,他的页面上也会带上你加的东西,好玩不???
反正我觉得很好玩。不过这样会使验证码的Servlet出现问题,因为它会先写上一些字然后再设置contentType然后就乱套了,图片就不能用了。所以配置这个过滤器最好避开验证码的Servlet。在我这里设置的是*.jsp。我想,如果把htm也加进去会很吓人。如果你想做动态htm倒可以考虑一下。过滤器是可以为htm文件写上一个头的。
总之,JSP的过滤器是很好玩的。