过滤器是在服务器上运行的,并且位于请求和响应中间起过滤功能的程序。其工作原理如下图所示:

    

  在与过滤器相关联俄Servlet或JSP运行前,过滤器先执行。一个过滤器可以一个或多个Servlet或JSP绑定,可以访问这些资源的请求信息。检查请求信息后,过滤器可以选择下一个动作:

  ① 正常调用请求的资源(即Servlet或JSP)

  ② 用修改后的请求资源调用请求资源

  ③ 调用请求的资源,修改请求响应,再将响应发到客户端

  ④ 禁止调用该资源,将请求重定向到其他资

一、过滤器编程接口

  过滤器编程用到javax.servlet.jar中的一组接口和类,下面列出了与过滤器设计相关的3个重要接口:

  接口Filter的主要方法:

  (1)init()方法

  方法原形为:public void init(FilterConfig filterConfig) throws ServletException{}

  该方法用于初始化过滤器,并获取web.xml文件中配置的过滤器初始化参数,默认情况下,服务启动时就会加载过滤器,init()方法就会执行。

  该方法有一个FilterConfig类型的参数,利用它可以获取在 web.xml 中设置的过滤器的初始化参数值。获取初始参数值的方法为:

    public String getInitParameter(String paraName)

  (2)doFilter()方法

  方法原形为:public void doFilter( ServletRequest request , ServletResponse response , FilterChain filterChain) throws IOException,ServletException{ }

    当请求和过滤器地址匹配时将进行过滤操作,该方法被执行。

  ① 第一个参数为 ServletRequest 对象,此对象给过滤器的提供了对请求信息(包括表单数据、Cookie和http请求头)的完全访问。

  ② 第二个参数为ServletResponse对象,用于响应请求。

  ③ 最后一个参数为FilterChain对象,使用该参数对象调用Servlet、JSP页面或者过滤器链中的下一个过滤器。调用方法为:

  public void doFilter(ServletRequest request ,ServletResponse response){}

  (3)destroy()方法

  方法原形:public void destroy()

  Serlet 容器在销毁过滤器实例前调用该方法,这个方法可以释放Servlet过滤器占用的资源,性质等同于Servlet的destroy()方法。

  这些方法构成了过滤器对象生命周期:创建、执行过滤方法、销毁。

二、设计过滤器

  1、过滤器基本结构

  过滤器的设计需要实现Filter接口,并根据处理的功能需要,实现Filter接口的三个方法,即上边提到的三个方法

package ...;
import ... public abstract class TestFilter implements Filter { public void destroy() {
//添加代码
} public void init(FilterConfig fConfig) throws ServletException {
//添加代码
} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//添加代码
}

  2、过滤器的建立 ※※

  (1)新建过滤器,实现Filter的接口

   选择自己要建立过滤器的包,右键 --> new --> filter --> 填写过滤器的名字 --> finish;

   或者新建Class,在Interface框后选择“Add”,输入Filter,找到“Filter--javax.servlet...”

    

package testfilter;

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; public class Test implements Filter { @Override
public void destroy() {
// TODO Auto-generated method stub } @Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// TODO Auto-generated method stub } @Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub } }

  (2) 将过滤行为放入 doFilter() 方法中,按功能需要实现doFilter()方法。

 (3)过滤器与相关联的Servlet、JSP注册。过滤器的配置信息要在web.xml注册。配置过滤器需要使用<filter>和<filter-mapping>元素,其配置格式如下:

<filter>
<filter-name>FilterName</filter-name>
<filter-class>FilterClass</filter-class>
<init-param>
<param-name>paramName1</param-name>
<param-value>paramValue1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>/path</url-pattern>
</filter-mapping>

    说明:

      ① <init-param>标签可以有多个,用来设置过滤器的初始化参数,在init(FilterConfig config)方法中通过config的getInitParameter("ParaName")获得参数值。

        ② url-pattern用来设定过滤器的过滤地址,可待通配符 “/*” 表示任何地址都要经过该过滤器。

      ③  若对servlet实现过滤,则配置方式如下:

<filter-mapping>
<filter-name>filterName</filter-name>
<servlet-name>servletName</servlet-name>
</filter-mapping>

  

JavaWeb--过滤器Filter (一)的更多相关文章

  1. JavaWeb过滤器Filter(附tomcat部分源码分析)

    过滤器Filter 过滤器通常对一些web资源进行拦截,做完一些处理器再交给下一个过滤器处理,直到所有的过滤器处理器,再调用servlet实例的service方法进行处理.过滤器可以对request进 ...

  2. JavaWeb—过滤器Filter

    1.Filter简介 Filter称之为过滤器,是用来做一些拦截的任务.比如客户端请求服务器的某个资源时(可以是Servlet.JSP.HTML等等),我们可以拦截.当服务器返回资源给客户端的时候,我 ...

  3. Introduction of Servlet Filter(介绍javaweb组件之一过滤器filter)

    javaweb的三大组件都需要交给web服务器运行,都需要在web.xml文件中配置. ①Servlet:javax.servlet.Servlet通过http协议接受客户端的请求,并作出响应的Jav ...

  4. JavaWeb学习笔记(二十二)—— 过滤器filter

    一.什么是过滤器 过滤器filter是JavaWeb三大组件之一,它与Servlet很相似!不过过滤器是用来拦截请求的,而不是处理请求的.WEB开发人员通过Filter技术,对web服务器管理的所有w ...

  5. JavaWeb 之 Filter:过滤器

    一.Filter 概述 1.概念 web 中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能. 2.作用 一般用于完成通用的操作.如:登录验证.统一编码处理.敏感字符等功能 ...

  6. 【JavaWeb】Filter 过滤器

    Filter 过滤器 简介 Filter 过滤器是 JavaWeb 三大组件之一 Filter 过滤器是 JavaEE 的规范,也就是接口 Filter 过滤器的作用是 拦截请求,过滤响应 拦截请求的 ...

  7. ⑧javaWeb之在例子中学习(过滤器Filter)

    前言 本系列 Servlet & JSP 学习系列[传送门]逐渐到了中期了,希望大家喜欢我写的,总结的点点滴滴- 今天我们来讲讲过滤器 你们的支持是我写博客的动力哦. 最近买了两本书,觉得大二 ...

  8. JavaWeb -- Servlet Filter 过滤器

    1. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Filter技术,开发人员可以实现用户在 ...

  9. Javaweb基础--->过滤器filter(转发)

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  10. JavaWeb学习篇之----Servlet过滤器Filter和监听器

    首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: ************************************************************** ...

随机推荐

  1. jmeter4.0---自带录制功能录制脚本

    1.前言 Jmeter录制脚本有两种方式.1.通过第三方工具录制比如:Badboy,然后转化为jmeter可用的脚本:2.使用jmeter本身自带的录制脚本功能. 对于小白来说可用先使用jmeter录 ...

  2. 作业要求20181023-4 Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 03

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284] 版本控制:https://git.coding.net/liuyy08 ...

  3. New Concept English Two 26 70

    $课文68  纠缠不休 712. I crossed the street to avoid meeting him, but he saw me and came running towards m ...

  4. Sqlserver 按照时间段统计数据

    WITH t1 ( [hour], title ) , ' 0:00:00--- 1:00:00' UNION ALL , ' 1:00:00--- 2:00:00' UNION ALL , ' 2: ...

  5. JSONP、CORS解决跨域问题

    一.为什么会有跨域问题? 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,对href属性都不拦截. 二.解决跨域问题的两种方式 JSONP CORS 三.JSONP 先 ...

  6. 基于tiny4412的u-boot移植(一)

    作者信息 作者:彭东林 邮箱:pengdonglin137@163.com QQ: 405728433 平台介绍 开发环境:win7 64位 + VMware11 + Ubuntu14.04 64位 ...

  7. 量化投资策略:常见的几种Python回测框架(库)

    量化投资策略:常见的几种Python回测框架(库) 原文地址:http://blog.csdn.net/lawme/article/details/51454237 本文章为转载文章.这段时间在研究量 ...

  8. streamsets excel 数据处理

    streamsets 有一个directory的origin 可以方便的进行文件的处理,支持的格式也比较多,使用简单 pipeline flow 配置 excel 数据copy 因为使用的是容器,会有 ...

  9. nexus yum 私服集成

      nexus 集成了 yum 私服使用起来还是比较简单的 配置 yum proxy 实际使用我们可能需要配置centos 以及epel 的源 centos可以用http://mirror.cento ...

  10. An internal error occurred during: "Android Library Update".

    打开 proj.android下的.cproject文件,把多余的CConfiguration配置节删掉,只留第一个就行了.