过滤器主要有三种作用,即:字符转码,权限设定和敏感字处理。。

(1)字符转码:在写博客,发帖子,写评论等的地方,我们发的一定是中文的,但是在编程的时候,很多都是不能识别中文的。。那我们就要用到过滤器,把应该输入,能识别中文的地方过滤一下。新建一个Filter 实现javax的Filter接口,在DoFilter的方法里面写中文处理的方法。当然要在web.xml中进行设置,这样我们在被过滤的方法里就能输出中文了。

public class CharFilter implements Filter {

@Override

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

request.setCharacterEncoding("UTF-8");

chain.doFilter(request, response);

}

}

(2)权限设定:比如在博客中发博文的时候,不登录是不能发博文的,那我么就要对用户登录还是没登录作下筛选过滤。方法和字符转码的一样,不同的只是DoFilter中得方法和web.xml中得设置。        以下就是判断用户是否登录的Filter:    

public class AuthFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest req=(HttpServletRequest)request;

Bloger b=(Bloger)req.getSession().getAttribute("bloger");

if(b==null){

request.getRequestDispatcher("login.jsp").forward(request,response);  

}

else{

chain.doFilter(request, response);

}

}

(3)敏感字处理:在论坛中,敏感字是绝对不会被发布的,会被屏蔽成***。

public class HxFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

String content = request.getParameter("content");

content = content.replace("敏感字", "***");

request.setAttribute("content", content);

chain.doFilter(request, response);

}

这里要注意的是:既然在DoFilter中进行了request.setAttribute接收被转换的content,那么在Servlet中接收的当然应该是String content=(String)request.getAttribute("content");而不是request.getParameter得到的。。