过滤器概述

---------------siwuxie095

过滤器是从 Servlet 2.3 规范开始新增的功能,它也是一个由 Servlet 容器管理的对象

过滤器的结构同 Servlet 非常类似

如:也有负责初始化和清理资源的 init() 方法和 destroy() 方法

虽然二者结构类似,但功能完全不同

过滤器的功能可以理解为:在 源数据 和 目的数据 之间起过滤作用的中间组件

一个简单的过滤器实例:

访问指定资源之前打印一条日志,访问指定资源之后再打印一条日志

点击选择工程名,右键->New->Filter,包名为:com.siwuxie095.filter,

类名为:FilterOne

FilterOne.java:


package com.siwuxie095.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;

/**

*

* 过滤器的功能:

* 在元数据和目的数据之间起过滤作用的中间组件

*

* 在servlet被调用之前截获该调用,同时在servlet被调用之后截获该调用

*

* 截获后,对请求或者响应信息进行处理

*

* 如:修改实际请求中的参数信息或修改实际响应中的参数信息

*

* 应用范围:如权限控制日志记录图像转换数据压缩 etc.

*

* 过滤器的生命周期同servlet类似,首先初始化,然后执行doFilter方法中业务逻辑,最后销毁

*/

public class FilterOne implements Filter {

public FilterOne() {

System.out.println("===== 构造方法 =====");

}

/**

* servlet容器启动时会执行过滤器的init()方法,这一点和servlet不同

*

* servlet的init()方法是在servlet第一次被访问时才会被执行

* 而过滤器的init()方法在容器启动时就执行

*

* init()方法的参数是FilterConfig类型的,它用来获取过滤器初始化配置信息的接口

*

* FilterConfig 是一个接口,它有一个重要方法:getInitParameter()方法

*/

public void init(FilterConfig fConfig) throws ServletException {

System.out.println("===== 初始化方法 =====");

//FilterConfig的getInitParameter()方法,需要传入String类型参数,

//返回值是String类型,创建以接收返回值,且返回的是以参数命名的初始化参数的值(键值对)

//若参数不存在返回空

String initParam=fConfig.getInitParameter("param");

System.out.println("param = "+initParam);

}

/**

* doFilter()方法同servlet的service()方法一样,

* 都用来执行具体业务逻辑,是过滤器中最重要的一个方法

*

* 参数除了请求和响应的对象之外,还有一个FilterChain对象

* FilterChain也提供了一个doFilter()方法,开发人员根据业务需要决定是否调用该方法

*

* 如果调用该方法,servlet容器就会将请求和响应,转发给下一个组件进行处理

* 下一个组件由可能是一个过滤器,也有可能是一个servlet,或其他的web组件

*

* 不调用该方法,就不会有后续的处理

*/

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

System.out.println("===== 开始执行doFilter方法 =====");

chain.doFilter(request, response);

System.out.println("===== 结束执行doFilter方法 =====");

}

//销毁过滤器

public void destroy() {

System.out.println("===== 销毁方法 =====");

}

}

在部署描述符 web.xml 中注册 filter:

部署描述符 web.xml 在 WEB-INF 目录下,如果没有,手动创建即可

点击选择工程名,右键->Java EE Tools->Generate Deployment Descriptor Stub

过滤器的 init() 方法在 Servlet 容器被启动时就执行(即 启动 Tomcat 时

就执行,在 init() 方法前执行的是构造方法),而 Servlet 的 init() 方法却

是在 Servlet 第一次被访问时才执行

过滤器的 doFilter() 方法同 Servlet 的 service() 方法一样,都是

用来执行具体的业务逻辑,是过滤器中最重要的一个方法

过滤器在 Servlet 被调用之前截获该调用,同时在 Servlet 被调用之后截获该调用

「即 过滤器作用于 Servlet 执行的前后」

截获后,对请求信息 或 响应信息进行处理,如:修改实际请求中的参数信息

或 修改实际响应中的参数信息

应用范围:权限控制、日志记录、图像转换、数据压缩 …

过滤器的生命周期同 Servlet 类似,首先初始化,

然后执行 doFilter() 方法中业务逻辑,最后销毁

【made by siwuxie095】

时间: 2024-08-18 17:04:53

过滤器概述的相关文章

学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)

过滤器Filter Filter和Lister是Servlet规范里的两个高级特性.不同于Servlet,它们不用于处理客户端请求,只用于对request.response进行修改或者对context.session.request事件进行监听. Filter意为滤镜或者过滤器,用于Servlet之外对request或者response进行修改.Filter提出了滤镜链的概念,一个Filterchain包括多个F 1 什么是过滤器 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它

黑马day14 过滤器概述&生命周期&执行过程

过滤器:当访问一个web资源的时候,过滤器就在你访问这个web资源的前进行拦截...在放行过后...filter过滤器也可以做一些其他的事情. 编写过滤器的步骤: 1.写一个过滤器类实现filter接口 2.在web.xml文件中进行注册.. 案例1: (1).过滤器类 package cn.itheima.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterCha

servlet 过滤器 概述

Filter 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链. 优点:过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容.而在实际使用时,就要特别注意过滤链的执行顺序 2.过滤器的作用描述 在HttpServle

过滤器 & 装饰者模式

一.过滤器概述    ------------------------------------------------    1.1.什么是过滤器?        Servlet技术规范中, 定义了Servlet.Filter.Listener三门技术, 其中Filter也叫做过滤器,通过过滤器技术,开发人员可以实现用户在访问某个资源之前或之后,对访问的请求和响应进行拦截,从而做一些相关的处理. 过滤器:            ◇ 所谓的过滤器, 就是拦截用户对资源的访问            

JavaWeb之过滤器

时间: Talk is cheap  Show me the code JavaWeb三大组件:    Servlet.Listener.Filter    都需要在web.xml中进行配置,Listener中的两个感知监听器不需要配置. --过滤器概述 过滤器是JavaWeb的三大组件之一,它与Servlet很相似,不过过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet或其他资源(JSP.css.html)时,会先执行部署在这个请求上的Filter,如果Filter"放行

26、过滤器

过滤器 项目开发中,经常会涉及到重复代码的实现! 注册 ---- 提交Servlet [1. 设置编码格式] ----转到JSP 修改 ---- 提交Servlet [1. 设置编码格式] --- 转到JSP 其他: 如判断用户是否登陆,只有登陆才能有操作权限! 涉及到重复判断: 获取session,取出session数据,判断是否为空,为空说明没有登陆,不能操作 只有登陆后,才能操作! 如何解决: 抽取重复代码,封装 每个用到重复代码的地方,手动的调用! 过滤器,设计执行流程: 用户访问服务器

过滤器总结

一.过滤器概述 过滤器就好比应用中的保安.利用过滤器实现对请求和响应的拦截. 二.编写过滤器的步骤 1.编写一个类,实现javax.servlet.Filter接口 2.配置web.xml,指定哪些资源需要拦截 三.过滤器的执行过程 1. 2.过滤器的生命周期 结论: a.应用被加载时就完成了过滤器的实例化和初始化,只有一次 b.针对用户的每次资源访问,容器都会调用doFilter方法 c.应用被卸载或服务器停止时,会执行destory方法 3.过滤器的参数配置FilterConfig web.

浅析过滤器

一.过滤器概述 过滤器是JavaWeb三大组件之一,它与Servlet很相似.对于Web应用程序来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和资源之间的请求和响应信息并对这些信息进行过滤.本文将对过滤器的和实现机制和应用进行简单的总结. 当Web容器接收到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联,如果有那么容器将请求交给过滤器进行处理.下图所示为过滤器的工作过程. 在web应用程序中可以部署多个过滤器形成一个过滤器链,在请求资源时,过滤器链中的过滤器将依次对请求

JavaWeb的Filter过滤器

过滤器Filter 过滤器概述 什么是过滤器 过滤器JavaWeb三大组件之一,它与Servlet很相似!不过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter"放行",那么会继承执行用户请求的Servlet:如果Filter不"放行",那么就不会执行用户请求的Servlet. 其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否