JavaWeb过滤器(链)以及案例

作用:
>对服务器接受的请求资源和响应给游览器的资源进行管理。
>保护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);
		}
	}

 

你可能感兴趣的:(JavaWeb,过滤器)