Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件
等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。过滤器根据请求的URL分析确定要拦截什么样的请求。所谓的拦截就是在真正请求资源之前将代表请求的request对象和代表响应的response对象截获从而实现:
1.在资源执行之前做一些额外的操作
2.在资源之后做一些额外的操作
3.控制是否允许访问的资源
一、Filter开发分为二个步骤
1.编写java类实现Filter接口,并实现(三个方法)其doFilter方法
2.在 web.xml 文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册,并设置它所能拦截的资源
package com.jjyy.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* filter测试
* @author JiangYu
*
*/
public class TestFilter implements Filter {
public void destroy() {
System.out.println();
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("执行之前操作。。。。");
chain.doFilter(request, response);
System.out.println("执行之后操作。。。。");
}
public void init(FilterConfig config) throws ServletException {
System.out.println();
}
}
web,xml中
注册Filter
<span style="white-space:pre"> </span><filter>
<filter-name>FilterTest01</filter-name>
<filter-class>com.jjyy.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterTest01</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
二、Filter链
1.在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链
2.web服务器根据Filter在web.xml文件中的注册顺序<mapping>,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的
FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则
调用第2个filter,如果没有,则调用目标资源。
三、Filter的生命周期
1.init(FilterConfig filterConfig)throws ServletException
和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法进行初始化(注
filter对象只会创建一次,init方法也只会执行一次)开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象
注意:FilterConfig接口
FilterConfig接口代表web.xml中对当前过滤器的配置信息
2.doFilter(ServletRequest,ServletResponse,FilterChain)
每次filter进行拦截都会执行
在实际开发中方法中参数request和response通常转换为HttpServletRequest和HttpServletResponse类型进行操作
所有对当前资源访问进行拦截的过滤器按照拦截顺序就组成了一个过滤器链.这个过滤器链的最后一个节点是要访问的资源
Filter中调用FilterChain提供了doFilter方法,这个方法一旦被调用就表明当前过滤器没有问题了,请执行过滤器链的下一个节点.如果下一个节点是资源则直接执行了资源
3.destroy()
在Web容器卸载 Filter 对象之前被调用
四、filter注册web.xml
<span style="white-space:pre"> </span><filter>
<filter-name>Demo1Filter</filter-name> <!-- 给过滤器起一个名字 -->
<filter-class>com.itheima.filter.Demo1Filter</filter-class> <!--过滤器的处理类 -->
<init-param>
<!--可以配置当前过滤器的初始化信息,可以配置多个,在Filter中利用FilterConfig对象来获取 -->
<param-name>name1</param-name>
<param-value>value1</param-value>
</init-param>
</filter>
<filter-mapping>
<!-- 一个Filter可以配置多个filter-mapping -->
<filter-name>Demo1Filter</filter-name>
<url-pattern>/servlet/Demo1Servlet</url-pattern>
<!-- 一个Filtermapping中可以配置多个url-partten,这个url-partten的写法和servlet-mapping中的写法相同-->
<url-pattern>/servlet/*</url-pattern>
<url-pattern>/*</url-pattern>
<url-pattern>*.do</url-pattern>
<servlet-name>Demo3Servlet</servlet-name>
<!-- 也可以配置多个servlet-name,其中填入servlet的名字明确的通知要拦截哪个名字的Servlet -->
<dispatcher>REQUEST</dispatcher>
<!-- 配置拦截哪种方式的对资源的访问可以是REQUEST/FORWARD/INCLUDE/ERROR四个值之中的一个,可以配置多个dispatcher,如果一个都不配则默认是REQUEST -->
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
分享到:
相关推荐
Filter技术的基础详细学习笔记,总结了Filter技术的各个知识点,可以用来复习以及对基础知识的巩固,对新人的学习很有帮助。
课程涵盖:Servlet程序、Filter过滤器、Listener监听器、JSP页面、EL表达式、JSTL标签库、jQuery框架、Cookie技术、Session会话、JSON使用、Ajax请求等全部Web开发核心技术点,并在讲解知识点过程中带领大家完成一个...
简单易懂的过滤器学习教程,实例讲解,基础知识学习,快速上手运用,值得推荐
4.Servlet过滤器设计 设计两个Servlet过滤器:一个用于防止中文数据乱码,另一个用于防止未登录用户访问网站资源。 《Java-Web应用开发基础》教学课件08课程设计实例全文共73页,当前为第10页。 8.3设 计 思 路 ...
在我们开发中经常需要在页面显示给用户的信息需要一定处理格式化,才能显示给用户。比如时间本地化,或者yyyy-MM-dd HH:mm:ss格式...在angularjs中为我们提供了叫filter的指令,让我们能够很轻易就能做到着一些列的功能
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
这是一套web开发的基础课件,包含css,dao,el表达式,filter过滤器,html基础,javabean,javascripte,servlet以及web开发的基础知识javaweb1-javaweb7
java知识点汇总。包含HTML、java基础、java高级、数据库入门基础知识、过滤器filter、hibernate入门文档、mybatis入门文档、servlet基础知识、spring框架基础知识、struts2入门基础知识。
23_布隆过滤器BloomFilter理论知识 24_布隆过滤器理论复习 25_缓存雪崩 26_缓存穿透和bloomFilter-helloworld 27_Guava解决缓存穿透 28_Redis布隆过滤器解决缓存穿透 29_docker安装rebloom 30_缓存击穿简介 31_高...
3_java基础知识-循环-类型转换 4_循环-函数-数组-重载 5_多为数组-冒泡-折半-选择排序 6_oop-封装-继承-static-final-private 7_多态-接口-异常体系 8_适配器/ k% N! Y7 j/ |- c) O5 M' V6 S 9_多线程-yield-join-...
学习Java开发,首先要学习java基础知识,尤其是校招的时候非常注重基础,即使没有项目也没关系,基础一定要打好,一般笔试以及面试的第一轮,对基础的考察是比较多的。 第二阶段:数据库 大概用时:7天 重点知识点...
(1)使用Filter过滤器进行身份认证; (2)当用户点击“浏览及订购商品”,从后台数据库中获取该订购网的所有商品显示出来; (3)当用户选择相应商品的数量后,选择其后的购物篮,注意用户可以多选的。最后点击”...
预设的过滤器的类型的常量Filter ,并与它们的相关核心图像过滤器的一个实例沿,它们包含的细节的其参数取决于触摸力。 例如,锐化滤镜是“锐化亮度”滤镜,其输入锐度取决于作用力: Filter(name: "Sharpen", ...
针对初学者,学习Ajax验证用户的唯一性实战是为了巩固Ajax,Jquery,Json与Struts2基础知识,具体内容如下 浏览效果图: 那我们就开始了,操作步骤如下 1.首先我们先导入所需要的包及文件 Json 包: struts2 包:...
8.8.1 Struts Prepare And Execute Filter过滤器 8.8.2 struts.xml文件配置出错 8.9 精彩回顾 第9章 庖丁解牛 ——揭密Struts2高级技术 9.1 本章学习任务 9.1.1 本章知识体系 9.1.2 实例开发任务 9.2 OGNL表达式...
课程涵盖:Servlet程序、Filter过滤器、Listener监听器、JSP页面、EL表达式、JSTL标签库、jQuery框架、Cookie技术、Session会话、JSON使用、Ajax请求等全部Web开发核心技术点,并在讲解知识点过程中带领大家完成一个...
课程涵盖:Servlet程序、Filter过滤器、Listener监听器、JSP页面、EL表达式、JSTL标签库、jQuery框架、Cookie技术、Session会话、JSON使用、Ajax请求等全部Web开发核心技术点,并在讲解知识点过程中带领大家完成一个...
04 django模板之过滤器 05 django模板之控制语句if和for循环 06 django模板之标签tag补充 07 django模板之自定义filter和simple_tag 08 django模板之继承标签extend和添加标签include 第51章 01 数据库表与表之间...
11. 请简要介绍一下Vue中的过滤器(filter)。 12. 如何在Vue中实现混入(mixin)? 13. 请简要介绍一下Vue中的异步组件。 14. 如何在Vue中实现懒加载(lazy loading)? 15. 请简要介绍一下Vue中的路由器(router)...
通常,诸如PDE方法,Lévy过程,傅立叶方法或Kalman过滤器之类的主题在从业人员中并不普遍,他们更喜欢使用更多标准的工具。 这些笔记本的目的是通过交互式python实现展示它们的实际应用,以展示这些有趣的主题。...