热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java之Filter过滤器

简介   filter过滤器主要使用于前台向后台传递数据的过滤操作。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实
简介

    filter过滤器主要使用于前台向后台传递数据的过滤操作。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。

Filter工作原理

    过滤器可以有多个称之为过滤链FilterChain,服务器会按照web.xml中过滤器定义的先后循序执行。过滤器通过chain.doFilter()决定是否继续执行。 在过滤器中,可以拦截请求,判断请求是否满足过滤规则,对满足过滤规则的请求进行修改(如,统一设置编码格式)或者决定是否继续执行下面的操作(如,判断用户是否登录)。

《Java之Filter过滤器》

Filter使用步骤

1、新建一个类,实现javax.serlvet.filter接口

    Filter中有三个方法:

    A.void  init(FilterConfig config) //设置filter 的配置对象;

    b.void destory() //销毁filter对象;

    c.void doFilter(ServletRequestreq,ServletResponse res,FilterChain chain) //执行filter 的工作。

    doFilter方法中,过滤器可以对请求和响应做它想做的一切,通过调用他们的方法收集数据,或者给对象添加新的行为。Filter通过调用chain.doFilter()将控制权传送给下一个过滤器,如果过滤器想要终止请求的处理或得到对响应的完全控制,则可以不调用下一个过滤器,而将其重定向至其它一些页面。当链中的最后一个过滤器调用chain.doFilter()方法时,将运行最初请求的Servlet。

2、在Web.xml中进行配置(配置和Servlet类似)

    配置标签:


myFilter
***.MyFilter


myFilter
/*
目标资源
REQUEST


url-pattern标签详解:

    a、精确匹配,不用任何修饰符

      例如:/servlet/TestServlet 

    b、扩展匹配:*.扩展名

      例如:*.jsp 

    c、路径前缀匹配:目录/*

      例如:/servlet/* 

    d、全部匹配:/*

      例如:/*

Dispatcher标签详解:

    指定过滤器所拦截的资源被Servlet容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多 个 子元素用来指定 Filter 对资源的多种调用方式进行拦截。
a、REQUEST:
    当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。
b、INCLUDE:
    如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
c、FORWARD:
    如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
d、ERROR:
    如若在A.jsp页面page指令中指定了error属性为examError.jsp,那么A.jsp中若出现了异常,会跳转到examError.jsp中处理。而在跳转到examError.jsp时,若过滤器配置了ERROR的dispather那么则会拦截,否则不会拦截。此功能类似error-page应用。

Filter使用场景

Filter的使用情况分为三种:
   1>
通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。如,用户权限限制。
   2>
通过在调用chain.doFilter方法之前,做些处理来达到某些目的。如,设置编码格式。
   3>
通过在调用chain.doFilter方法之后,做些处理来达到某些目的。如,对整个web网站进行压缩。

常用Filter代码分享


推荐阅读
author-avatar
傻a2602909381
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有