Filter接口源代码:
public abstract interface Filter{ public abstract void init(FilterConfig paramFilterConfig) throws ServletException; public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain) throws IOException, ServletException; public abstract void destroy(); }
Filter的工作原理:
Filter接口中有一个doFilter方法,当我们编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法 。
Filter开发步骤:
Filter开发分为2步:
* 编写java类实现Filter接口,并实现其doFilter方法。
* 在web.xml 文件中使用<filter>和<filter-mapping>元素对编写的filter类进行注册,并设置它所能拦截的资源。
示例:
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; /** * @author yangcq * @description 过滤器Filter的工作原理 */ public class FilterTest implements Filter{ public void destroy() { System.out.println("----Filter销毁----"); } public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException { // 对request、response进行一些预处理 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); System.out.println("----调用service之前执行一段代码----"); filterChain.doFilter(request, response); // 执行目标资源,放行 System.out.println("----调用service之后执行一段代码----"); } public void init(FilterConfig arg0) throws ServletException { System.out.println("----Filter初始化----"); } }
web.xml里配置filter:
- <filter>
- <description>过滤器名称</description>
- <filter-name>自定义的名字</filter-name>
- <filter-class>com.yangcq.filter.FilterTest</filter-class>
- <!--配置FilterTest过滤器的初始化参数-->
- <init-param>
- <description>配置过滤器的初始化参数</description>
- <param-name>name</param-name>
- <param-value>gacl</param-value>
- </init-param>
- <init-param>
- <description>配置FilterTest过滤器的初始化参数</description>
- <param-name>like</param-name>
- <param-value>java</param-value>
- </init-param>
- </filter>
Filter链:
在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了ilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,
如果没有,则调用目标资源。
相关推荐
Java三大器过滤器&拦截器&监听器实现,其中每一个包都能单独运行,但是全部一起运行时会报错,原因是SpringBoot有关@Bean注入的问题,作者学艺不精只有待以后学懂后改,大家先将就看,源码解析及有关Java三大器理解...
Python基础(补充):python三大器之迭代器 迭代器是 Python 中的一种重要数据类型,它们是可重复执行的对象,用于实现循环操作。迭代器的概念来自于数学中的迭代法,即重复执行一系列运算步骤,从前面的量依次求出...
1. **天赋与决心** - 文中的"大器之才"指的是具有非凡才能和潜力的人,比尔·盖茨就是这样的例子。他在年幼时就表现出了超出同龄人的聪颖好学,对图书管理表现出浓厚的兴趣,并且愿意付出努力去做好这件事。 2. **...
Python 基础补充:Python 三大器之生成器 Python 中的生成器(Generator)是一种特殊的数据结构,能够在循环的过程中不断推算出后续的元素,从而节省大量的空间。生成器可以用两种方式创建:生成器表达式和生成器...
Python基础(补充):python三大器之装饰器 Python中的函数是一等公民,可以作为参数传递,也可以作为返回值返回。高阶函数可以接受函数作为参数,也可以把函数作为结果值返回。在本文中,我们将学习Python中的...
【大器之才】这个词语在文章中用来形容比尔·盖茨,指的是具有很高才能、能够成就大事业的人。这个词语通常用于赞扬那些具备非凡潜力和杰出能力,有望在未来取得显著成就的个体。在文章中,这个四年级的男孩表现出的...
动力电池-国之大器,锂电崛起.pdf
动力电池:国之大器,锂电崛起.pdf
【标题】"非常大器漂亮实用的查询源码"揭示了这是一个美观且功能强大的查询功能的源代码。源码通常是编程人员为了实现特定功能而编写的代码,它提供了对程序内部逻辑的直接访问,便于其他开发者研究、学习或在自己的...
标题中的“动力电池-国之大器,锂电崛起”揭示了本文将着重探讨的动力电池,特别是锂电池在国家能源战略中的重要地位以及其近年来的发展趋势。锂离子电池由于其高能量密度、长寿命和环保特性,已成为新能源汽车的...
multisim仿真,低频功率发大器
免杀过云杀专用。可以把文件虚胖到几百M,轻松过云杀压缩后仍然原体积压缩,释放后几百M。干什么你懂得
6. **过滤机制**:为了防止重复内容的出现,大器新闻采集还具有内容过滤机制,能够识别已经发布的新闻,避免重复采集和发布。 7. **自定义发布模板**:用户可以根据自己的需求,设计个性化的新闻发布模板,使发布的...
《大器新闻采集1[1].5.0 FOR Discuz!X1.5》是一款专为Discuz!X1.5论坛系统设计的新闻采集工具,其主要功能是自动化地从互联网上抓取新闻内容,并将其发布到基于Discuz!X1.5平台的论坛中。这款软件旨在提高网站内容...
第三步:把darqi目录下的子目录images读写权限设成777,这个是为图片本地化用的,如果设置不同目录存放,则要将该目录读写权限设置成777; 第四步:将压缩包中cron目录下的文件cron_darqi_auto.php上传到你的论坛...
在这个成语中,"大器"并不是指普通的物品,而是特指古代的一些重要且制作工艺复杂的器物,如圭璋和钟鼎。 圭璋是古代中国的礼器,主要由玉制成,具有重要的社会和政治意义。它们在祭祀、朝贡和重要仪式中使用,象征...
"ios-大器建筑.zip"这个压缩包可能包含了一个关于智能硬件App开发的项目或者教程资源,尽管具体内容无法直接查看,但我们可以根据其标题和描述推测其中可能涵盖的关键知识点。 1. **iOS开发基础**:首先,理解并...
公司秉持的核心价值观是“担大任、行大道、成大器”,体现了其在业务上的远大志向和执着追求。企业精神上倡导“务实、高效”,这使得晨迪自动化在生产和服务上持续追求实际效果和工作效率。 在产品开发和质量控制...