作用:
>对服务器接受的请求资源和响应给游览器的资源进行管理。
>保护servlet
> 创建一个实现了Filter接口的普通java类。
覆写接口的方法:init方法,doFilter方法,destory方法。
> 调用FilterChain.doFilter方法进行拦截和放行操作
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("请求已拦截");
arg2.doFilter(arg0, arg1);//放行
System.out.println("请求已响应");
}
注意:如果只拦截请求,不放行则arg2.doFilter(arg0, null);
> 在web.xml中配置过滤器
AddStudentServlet
org.threetierarc.filter.AccessFilter
AddStudentServlet
/add.jsp
???????????
> 在web.xml中
REQUEST:拦截HTTP请求 get post
FORWARD:只拦截 通过 请求转发方式的请求
INCLUDE:只拦截拦截通过 request.getRequestDispatcher("").include() 、通过
ERROR:只拦截
注意:结合重定向、请求转发结合来理解其作用
>配置过滤器链
过滤器链可以配置多个过滤器,过滤器的先后顺序 是由
如下配置:先运行MyFilter2,在运行MyFilter1
MyServlet
org.student.filter.MyFilter
MyFilter2
/*
MyServlet
/*
REQUEST
FORWARD
MyFilter2
org.student.filter.MyFilter2
案例:
1)统一编码
2)session管理
3)权限管理
4)资源管理(统一水印、和谐词汇等)
统一编码:
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
//设置编码格式
arg0.setCharacterEncoding("utf-8");
arg1.setContentType("text/html;charse=utf-8");
//放行
arg2.doFilter(arg0, arg1);
}
session管理:
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
//判断session
HttpSession hs=((HttpServletRequest)arg0).getSession();
if(hs.getAttribute("user")==null){
((HttpServletResponse)arg1).sendRedirect("/login.jsp");
}else{
arg2.doFilter(arg0, arg1);
}
}