如果要想实现过滤器,那么需要有一个过滤器的实现类,而这个类需要实现javax.servlet.Filter接口。而Filter接口里面定义有三个处理方法:
过滤器初始化:public void init(FilterConfig filterConfig) throws ServletException;
|- FilterConfig可以取得初始化参数,与ServletConfig类似;执行过滤:public void doFilter(ServletRequest request,ServletResponseresponse, FilterChain chain) throws IOException, ServletException;
- 销毁:public void destroy();
过滤器的应用:
- 为所有的页面设置编码格式(UTF-8)
import java.io.IOException;
import javax.servlet.*;
public class EncodingFilter implements Filter{
private String charset = "UTF-8";
@Override
public void init(FilterConfig filterConfig) throws ServletException,IOException{
if(filterConfig.getInitParameter("charset")!=null){
this.charset = filterConfig.getInitParameter("charset");
}
}
@Override
public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain){
//为客户端请求的数据设置UTF-8编码
req.setCharsetEncoding(this.charset);
chain.doFiletr(req,resp);
//为服务器端返回的数据设置UTF-8编码
resp.setCharsetEncoding(this.charset);
}
@Overridde
public void destroy(){}
}
//过滤器类写好后,还需要配置web.xml文件才可生效
- 登录状态的控制
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
public class EncodingFilter implements Filter{
private String charset = "UTF-8";
@Override
public void init(FilterConfig filterConfig) throws ServletException,IOException{}
@Override
public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain){
//向下转型成HttpdServletRequest取得HttpSession对象
HttpServletRequest request = (HttpServletRequest)req;
HttpSession session = request.getSession();
if(session.getAttribute("username")!=null){
chain.doFilter(rq,resp);
}else{
req.setAttribute("message","您还未登录,请先登录");
req.getRequestDispatcher("跳转路径").forward(req,resp);
}
}
@Overridde
public void destroy(){}
}
//过滤器类写好后,还需要配置web.xml文件才可生效