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中配置过滤器

  <!--配置过滤器  -->
  <filter>
  	<filter-name>AddStudentServlet</filter-name>
  	<filter-class>org.threetierarc.filter.AccessFilter</filter-class>  	
  </filter>
  <filter-mapping>
  	<filter-name>AddStudentServlet</filter-name>
  	<url-pattern>/add.jsp</url-pattern>
  	<dispatcher>???????????</dispatcher>
  </filter-mapping>

> 在web.xml中<dispatcher></dispatcher>可以写多个:
REQUEST:拦截HTTP请求 get post
FORWARD:只拦截 通过 请求转发方式的请求
INCLUDE:只拦截拦截通过 request.getRequestDispatcher("").include()  、通过<jsp:include page="..." />此种方式发出的请求
ERROR:只拦截<error-page>发出的请求

注意:结合重定向、请求转发结合来理解其作用

>配置过滤器链
过滤器链可以配置多个过滤器,过滤器的先后顺序 是由 <filter-mapping>的位置 决定。
如下配置:先运行MyFilter2,在运行MyFilter1

  <filter>
  		<filter-name>MyServlet</filter-name>
  		<filter-class>org.student.filter.MyFilter</filter-class>
  </filter>

    <filter-mapping>
	   <filter-name>MyFilter2</filter-name>
	  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <filter-mapping>
  	<filter-name>MyServlet</filter-name>
  	<url-pattern>/*</url-pattern>
  	<dispatcher>REQUEST</dispatcher>
  	<dispatcher>FORWARD</dispatcher>
  </filter-mapping>
  
  <filter>
	  <filter-name>MyFilter2</filter-name>
	  <filter-class>org.student.filter.MyFilter2</filter-class>
  </filter>

案例:
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);
		}
	}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值