------------恢复内容开始------------
Filter 过滤器的使用
1、过滤器需要实现 implements Filter
2、属于Servlet规范,实现Filter接口,需要实现Filter接口,需要实现其中的三个方法
- init( ) 初始化方法
- doFilter( ) 放行,
- destroy() 销毁,结束
3、过滤器的配置和Servlet的配置类似,在web.xml只需要将Servlet修改filter
<filter> <filter-name>HelloFilter</filter-name> <filter-class>com.kong.filter.HelloFilter</filter-class> </filter> <filter-mapping> <filter-name>HelloFilter</filter-name> <url-pattern>/*【过滤范围】</url-pattern> </filter-mapping> <filter>
4、当设置成拦截/*,就是拦截所有的请求,因此会被Filter拦截,并执行其中的方法,其中必须在doFilter中实现放行操作:chain.doFilter(request,response),否则过滤器不会放行,S0ervlet中收不到任何请求。
所有
chain.doFilter(request,response)成为了一条分界线,分界线前一部分的请求是拦截Filter执行,分界线后面的代码即将响应给客户端执行
5、顺序问题:如果设置了web.xml配置文件,就按照配置的maping顺序执行,如果是注解方式配置,就按照全类名【包名+类名】排序的顺序。
6、 过滤器的生命周期和Servlet的生命周期类似:
- 实例化 一次
- 初始化 : init() 一次
- 服务 : doFilter() 多次
- 销毁 : destroy() 一次
7、过滤器的匹配规则
- 精确匹配: /hello.do :拦截/hello.do的请求 拦截/xxx的 请求
- 模糊匹配: *.xx : 拦截以*.xx结尾的请求 /* :拦截所有的请求
8、给过滤器配置初始化参数
- xml方式
-
在filter注解后面,在注解<filter-mapping></filter-mapping>后面添加: <filter> <init-param> <param-name>parameter</param-name> <param-value>value</param-value> </init-param> </filter>
- 注解方式
-
1 在Filter类的头顶设置注解,并配置初始化参数,设置注解就不需要设置xml,二者不能冲突,重新重加载 。 2 @WebFilter(urlPatterns 3 ={"/*"}, initParams = {@WebInitParam(name="encoding", 4 value = "GBK")} )
注解方式1 在Filter类头上设置注释,并初始化参数 ,不能和xml同时设置,会导致重加载。 2 实例代码: 3 @WebFilter(urlPatterns 4 = {"/*"},initParams = {@WebInitParam(name="parameter", 5 value = "value")})
个人理解【新手】 :拦截器就是为了匹配自己是否能访问该页面,条件去判断,当不满足条件是无法调转该页面,条件达成时可以通过拦截器到达该页面。例如在网页登录成功后可以访问更多界面,路人未登录时无法进入一些界面,例如:支付界面,付费页面等
------------恢复内容结束------------