IT兄弟连 JavaWeb教程 过滤器1
Servlet过滤器是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强,监听器可以监听到Web应用程序启动和关闭。创建过滤器和监听器需要继承相应接口,并对其进行配置。
过滤器
在现实生活中,自来水都是经过一层层过滤处理才达到食用标准的,每一层过滤都起到一种净化的作用。JavaWeb中的Servlet过滤器与自来水被过滤的原理相似,Servlet过滤器主要用于对客户端(浏览器)的请求进行过滤处理,现将过滤后的请求转交给下一个资源,它在JavaWeb开发中具有十分重要的作用。
1 过滤器的定义
Servlet过滤器与Servlet十分相似,但它具有拦截客户端(浏览器)请求的功能,Servlet过滤器可以改变请求中的内容来满足开发中的需要。对于程序开发人员而言,过滤器实质上就是在Web应用服务器上的一个Web应用组件,用于拦截客户端(浏览器)与目标资源的请求,并对这些请求进行一定过滤处理再发送给目标资源。过滤器的处理方式如图1所示。

图1 过滤器
从上图可以看出,在Web服务器中部署了过滤器后,不仅客户端发送的请求会经过过滤器的处理,而且请求在发送到目标资源处理以后,请求的回应信息也同样要经过过滤器。
过滤器对象放置在javax.servlet包中,其名称为Filter,它是一个接口。除这个接口外,与过滤器相关的对象还有FilterConfig对象与FilterChain对象,这两个对象也同样是接口对象,位于javax.servlet包中,分别为过滤器的配置对象与过滤器的传递工具。在实际开发中,定义过滤器对象只需要直接或间接地实现Filter接口即可。
Filter接口:
每一个过滤器对象都要直接或间接地实现Filter接口,在Filter接口中定义了3个方法,分别为init()方法,doFilter()方法和destroy()方法,其方法声明及说明如下:
● public void init(FilterConfig config)throws ServletException
过滤器初始化方法,该方法在过滤器初始化时调用
● public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)thrwos IOException,ServletException
对请求进行过滤处理
● public void destroy()
销毁方法,以便释放资源
FilterConfig接口:
FilterConfig接口有Servlet容器进行实现,主要用于获取过滤器中的配置信息,其方法声明及说明如下:
● public String getFilterName()
用于获取过滤器的名字
● public ServletContext getServletContext()
获取Servlet上下文
● public String getInitParameter(String name)
获取过滤器的初始化参数值
● public Enumeration getInitParameterNames()
获取过滤器的所有初始化参数
FilterChain接口:
FilterChain接口仍然由Servlet容器进行实现,在这个接口中只有一个方法,其方法声明如下:
punlic void doFilter(ServletRequest request,ServletResponse response)throws IOException, ServletException
该方法用于将过滤后的请求传递给下一个过滤器,如果此过滤器已经是过滤器链中的最后一个过滤器,那么,请求将传送给目标资源。
2 过滤器实现步骤
创建一个过滤器对象需要实现javax.servlet.Filter接口,同时实现Filter接口的3个方法,下面的例子演示了过滤器的创建。
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 MyFilter implements Filter{
//初始化方法
public void init(FilterConfig fConfig)throws ServletException{
//初始化处理
}
public void doFilter(ServletRequest request,ServletResponse response,
FilterChain chain)throws IOException,ServletException{
//过滤处理
chain.doFilter(request,response);
}
public void destroy(){
//释放资源
}
}
过滤器中的init()方法用于对过滤器的初始化进行处理,destroy()方法是过滤器的销毁方法,用于释放资源,对于过滤处理的业务逻辑需要编写到doFilter()方法中,在请求过滤处理后,需要调用chain参数的doFilter()方法将请求向下传递给下一个过滤器或目标资源。
使用过滤器并不一定要将请求向下传递到下一个过滤器或目标资源,如果业务逻辑需要,也可以在过滤处理后,直接回应与客户端。
过滤器与Servlet十分相似,在创建之后同样需要对其在web.xml中进行配置,过滤器的配置主要分为两个步骤,分别为声明过滤器对象和创建过滤器映射。下面的代码演示过滤器的配置。
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.xdl.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/MyFilter</url-pattern>
</filter-mapping>
<filter>标签用于声明过滤器对象,在这个标签中必须配置两个子元素,分别为过滤器的名称与过滤器完整类名,其中<filter-name>用于定义过滤器的名称,<filter-class>用于指定过滤器的完整类名。
<filter-mapping>标签用于创建过滤器的映射,它的主要作用就是指定Web应用中,那些URL应用哪一个过滤器进行处理。在<filter-mapping>标签中需要指定过滤器的名称与过滤器的URL映射,其中<filter-name>用于定义过滤器的名称,<url-pattern>用于指定过滤器应用的URL。
<filter>标签中的<filter-name>可以是自定义的名称,而<filter-mapping>标签中的<filter-name>是指定已经定义的过滤器的名称,它需要与<filter>标签中的<filter-name>一一对应。
IT兄弟连 JavaWeb教程 过滤器1的更多相关文章
- IT兄弟连 JavaWeb教程 过滤器3
过滤器案例:字符编码过滤器 在JavaWeb程序开发中,由于Web容器内部所使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码现象. 图3 无字符编码过滤器 从上图可以看出 ...
- IT兄弟连 JavaWeb教程 过滤器与监听器经典面试题
1.谈谈你对Servlet过滤器的理解 过滤器是Servlet2.3规范中定义的一种小型的.可插入的Web组件.用来拦截Servlet容器的请求和响应过程,以便查看.提取客户端和服务器之间正在交换的数 ...
- IT兄弟连 JavaWeb教程 过滤器2
3 多个过滤器的执行顺序 如果一个Web应用中使用一个过滤器不能解决实际中的业务需要,那么可以部署多个过滤器对业务请求进行多次处理,这样做就组成了一个过滤器链.Web服务器在处理过滤器链时,将按过滤 ...
- IT兄弟连 JavaWeb教程 ServletContext对象
ServletContext是Servlet与Servlet容器之间直接通信的接口.Servlet容器在启动一个Web应用时,会为它创建一个ServletContext对象.每个Web应用都有唯一的S ...
- IT兄弟连 JavaWeb教程 JSON和JSON字符串
JSON (JavaScript Object Notation)是JavaScript语言中的一种对象类型.JSON的好处是易于阅读和解析.当客户端和服务器端需要交互大量数据时,使用JSON格式传输 ...
- IT兄弟连 JavaWeb教程 经典案例
案例需求:编写一个jsp servlet程序,在login.jsp发起login.do登录请求,当输入的用户名是abc密码是123时,则判断是登录成功,其它暂时认为是登录失败.当用户登录成功时,将用户 ...
- IT兄弟连 JavaWeb教程 文件下载技术
● 列出提供下载的文件资源 我们要将Web应用系统中的文件资源提供给用户进行下载,首先我们要有一个页面列出上传文件目录下的所有文件,当用户点击文件下载超链接时就进行下载操作,编写一个ListFile ...
- IT兄弟连 JavaWeb教程 文件上传技术
在Web应用系统开发中,文件上传和下载功能是非常常用的功能. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参 ...
- IT兄弟连 JavaWeb教程 监听器4
感知Session绑定事件的监听器 保存在Session域中的对象可以有多种状态:绑定(session.setAttribute("bean",Object)到Session中:从 ...
随机推荐
- P1856 [USACO5.5]矩形周长Picture
P1856 [USACO5.5]矩形周长Picture $len$ $sum$ $num$ $flag\_l$ $flage\_ ...
- [LeetCode] 698. Partition to K Equal Sum Subsets
Problem Given an array of integers nums and a positive integer k, find whether it's possible to divi ...
- hihocoder 微软编程之美2015 初赛 第二场(暴力+字典序+图论+思维算法)
题目1 : 扑克牌 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 一副不含王的扑克牌由52张牌组成,由红桃.黑桃.梅花.方块4组牌组成,每组13张不同的面值.现在给定52 ...
- Springboot2.0入门介绍
Springboot目前已经得到了很广泛的应用,why这么牛逼? Springboot让你更容易上手,简单快捷的构建Spring的应用 Spring Boot让我们的Spring应用变的更轻量化.比如 ...
- freemaker开发
推荐书籍 百度云盘 密码: c3m9 1. 前言 本书为<FreeMarker 2.3.19 中文版手册>,包含了freemarker开发得方方面面,可以作为开发freemarker的字典 ...
- cad定制快捷键
1.工具-自定义-编辑程序参数,改好之后,关闭. 2.在命令行输入:reinit-选择PGP文件-确定.
- UML中的6大关系详细说明
UML中的6大关系详细说明: 1.关联关系: 含义:类与类之间的连结,关联关系使一个类知道另外一个类的属性和方法:通常含有“知道”,“了解”的含义 体现:在C#中,关联关系是通过成员变量来实现的: 方 ...
- python-unittest单元测试框架
可以理解为是已经帮我们封装好的东东,可以完成执行用例\预期与实际结果的对比等. import unittest 封装好的单元测试框架,可以直接使用 编写的测试类的继承unittest.TestCase ...
- Go丨语言package github.com/Go-SQL-Driver/MySQL: exec: "git": executable file not found in %PATH%解决方法
Go语言在添加第三方MySQL驱动的时候报错: go: missing Git command. See https://golang.org/s/gogetcmd package github.co ...
- Mac替换sublime图标
下载.icns格式一个图标:http://www.easyicon.net/language.en/iconsearch/sublime/ 终端执行:open /Applications/Sublim ...