专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 JavaWeb过滤器Filter的介绍

JavaWeb过滤器Filter的介绍

更新时间:2021-09-06 11:27:26 来源:动力节点 浏览781次

Filter简介

过滤器是处在客户端和服务器资源之间的一到过滤网,我们可以根据具体的需求来对请求头和数据就行预处理,也可以对响应头和和数据进行后处理。例如Jsp, Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

Filter的工作原理

服务器的servlet容器接收到客户端发送的请求后,服务器的servlet容器根据web.xml配置文件中配置的Filter拦截客户端发送request,检查客户端request,如果不满足过滤要求,Filter拦截对应request;如果满足过滤要求,则在Filter中调用doFilter方法,执行request并对request进行处理并产生response,服务器将response发送给客户端之前,Filter会拦截response是否满足过滤要求,如果不满足,Filter会拦截response;如果满足过滤要求,则将response响应给客户端。

Filter的生命周期

1.初始化(init):filter的创建和销毁都是有服务器负责的。服务器启动的时候,web服务器创建Filter的实例对象,并调用其init方法,完成对象的初始化功能。filter对象只会创建一次,init方法也只会执行一次。

2.运行(doFilter):拦截到请求时,执行doFilter方法。可以执行多次。

3.销毁(destroy):服务器关闭时,web服务器销毁Filter的实例对象。

Filter的使用

1.过滤器的快速入门

(1)定义一个类,实现接口Filter,并复写Filter接口doFilter方法

package com.wedu.demo.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
 * 过滤器快速入门
 */
public class FilterDemo implements Filter { public void init(FilterConfig config) throws ServletException { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("doFilter方法执行……"); chain.doFilter(req, resp); } public void destroy() { }
}

(2)配置拦截路径

以web.xml配置

   filter com.wedu.demo.servlet.FilterDemo   filter /*    hello 
com.wedu.demo.servlet.HelloServlet   hello /hello 

使用注解的方式配置拦截路径

2.过滤器的配置详解

(1)配置拦截路径具体资源路径:只有访问指定的资源时,过滤器才会被执行,如:/index.jsp

拦截目录:访问目录下的所有资源时,过滤器都会被执行,如:/user/*

后缀名拦截:访问所有指定后缀名的资源时,过滤器就会被执行,如:*.jsp

拦截所有资源:访问所有资源时,过滤器都会被执行,如:/*

(2)拦截方式的配置过滤器的四种拦截方式:REQUEST(默认的)、FORWARD、INCLUDE、ERROR。REQUEST:直接访问目标资源时执行过滤器 。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;

FORWARD:转发访问执行过滤器。包括:RequestDispatcher#forward()方法、标签都是转发访问;

INCLUDE:包含访问执行过滤器。包括:RequestDispatcher#include()方法、标签都是包含访问;

ERROR:当目标资源在web.xml中配置为中时,并且真的出现异常,转发到目标资源时,会执行过滤器;

使用web.xml方式配置:

filter com.wedu.demo.servlet.FilterDemo
 filter /*  FORWARD REQUEST

使用注解的方式配置:

package com.wedu.demo.servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
 * 过滤器的拦截方式配置
 */
@WebFilter(value = "/*",dispatcherTypes = {DispatcherType.FORWARD,DispatcherType.REQUEST})
public class FilterDemo implements Filter { public void init(FilterConfig config) throws ServletException { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("FilterDemo……"); chain.doFilter(req, resp); } public void destroy() { }
}

(3)多个过滤器的配置方式

web.xml配置

 filter1 com.wedu.demo.servlet.FilterDemo
 filter1 /*
 filter2 com.wedu.demo.servlet.FilterDemo
 filter2 /*

注意:执行顺序根据定义,谁定义在上面谁先先执行。

注解方式配置

在定义的每个过滤器上面加上对应的注解即可。

注意:执行的顺序按照类名的字符串比较规则比较,值小的先执行。

以上就是动力节点小编介绍的"JavaWeb过滤器Filter的介绍",希望对大家有帮助,想了解更多可查看JavaWeb教程。动力节点在线学习教程,针对没有任何Java基础的读者学习,让你从入门到精通,主要介绍了一些Java基础的核心知识,让同学们更好更方便的学习和了解Java编程,感兴趣的同学可以关注一下。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>