过滤器

#0、过滤器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ZIydudt-1579018627541)(0.jpg)]
在Web开发中,为了实现某些特殊的功能,经常需要对请求和响应消息进行处理。例如,在记录用户访问信息,统计页面访问次数,验证用户身份等。Filter可以实现用户在访问某个目标资源之前,对访问的请求和响应进行相关处理。

0.1Filter入门

0.1.1、什么事Filter入门

Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应前后实现一些特殊功能,它可看做一个过滤器,专门用于过滤污水杂志


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pbTrqA78-1579018627543)(0.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nZZ9yb72-1579018627544)(5.png)]

如图,当浏览器访问服务器中的目标资源时,会被Filter拦截,在Filter中进行预处理操作,然后再将请求转发给目标资源。当服务器接受到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要将相应结果发送给过滤器,在拦截器中对响应结果行处理后,才会发送给客户端*

其实,Filter过滤器就是一个实现了javax.servlet.Filter接口的类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fxLwjbMm-1579018627545)(6.png)]

定义了三个方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gTkRCr2J-1579018627546)(7.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kNfbwHXr-1579018627546)(8.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J8LiS6SE-1579018627548)(9.png)]

需要注意的是,FilterChain代表Filter链上的对象,在当前Filter对象的doFilter()方法内部需要调用FilterChain对象的doFilter()方法,才能把请求交付给Filter链中的下一个Filter或者目标资源去处理

这三个方法都是Filter的生命周期方法,其中,init()方法在Web应用程序加载的时候调用,destroy()方法在Web应用程序卸载的时候调用,这两个方法都只会被调用一次,而doFilter()方法只要有客户端请求时就会被调用。

0.1.2实现第一个Filter程序

1、实现Filter接口重写doFilter()方法:

	package com.monkey.filter;
import java.io.IOException;

import  javax.servlet.*;
/**
* @author 作者
* @version 创建时间:2019年9月8日 下午8:34:22
* 类说明 过滤器例子
*/

//实现Filter接口
public class TestFilter01 implements Filter {

public TestFilter01() {
	// TODO Auto-generated constructor stub
}

//重写doFilter()接口
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
		throws IOException, ServletException {
    	System.out.println("1233");
	response.getWriter().print("Filter1");

	//FilterChain过滤链中需要
	chain.doFilter(request, response);
	
}}

2、在Web.xml文件中进行过滤器的配置

<!-- 需要在web.xml文件中进行过滤器的配置 -->
  <!-- 写完过滤器之后必须先注册一个过滤器 -->
  <filter>
  	<filter-name>test</filter-name>
  	<filter-class>com.monkey.filter.TestFilter01</filter-class>
  </filter>  
  
    <filter-mapping>
  	  	<filter-name>test</filter-name>
  	  	<!-- 用于匹配用户请求的URL,也即匹配的过滤路径 -->
  	  	<url-pattern>*</url-pattern>
  </filter-mapping>

0.1.3、Filter链

在一个Web应同一用程序中可以注册多个Filter程序,每个Filter程序都可以针对某一份URL进行拦截,如果多个Filter程序都对同一个URL进行拦截,那么这些Filter就会组成一个Filter链(也叫过滤连)。Filter链用FilterChain对象来表示,FilterChain对象中有一个doFilter()方法,该方法的作用就是让Filter链上的当前过滤器放行,请求进入下一个Filter。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tREmiQ2G-1579018627550)(12.png)]

0.1.4、FilterConfig接口

为了获取Filter程序在web.xml文件中的配置信息,Servlet API提供了一个FilterConfig接口,该接口封装了Filter程序在web.xml中的所有注册信息,并且提供了一系列获取这些配置信息的方法:


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O1WyfrW7-1579018627551)(13.png)]

发布了107 篇原创文章 · 获赞 17 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览