博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web应用过滤器Fileter
阅读量:4048 次
发布时间:2019-05-25

本文共 2242 字,大约阅读时间需要 7 分钟。

在Web应用开发中,我们经常使用过滤器截取从客户端发来的请求,做出相应的处理。过滤器可以说是外部进入网站的第一道关卡。

我们可以利用这道关卡做很多事,例如:对数据进行编码;判断用户是否来自可信任的网络;过滤垃圾数据;记录日志;判断客户端浏览器版本;验证用户是否合法等等……

 

下图用UML时序图简单画了一下filter的基本原理

 

 

一、定义过滤器类,必须实现 java.servlet.Filter接口 

实现三个方法:

1、init(FilterConfig filterConfig) 初始化过滤器,在Servlet容器(服务器刚启动时,一般为tomcat启动时)创建过滤器实例的时候就会调用该方法,多用于读取web.xml文件中Servlet过滤器的初始化参数  

                                                                       

2、doFilter(ServletRequest request,ServletResponse response,FilterChain chain)  进行过滤处理,所有过滤处理都在这个方法中实现

这个方法得到调用后,里面重要的一点是要调用chain.doFilter(request,response)方法,来完成对下一个过滤器doFilter(ServletRequest request,ServletResponse response,FilterChain chain))方法的调用,如果没有下一个过滤器,则把客户请求传给相应的web组件                   

                                                                            

3、destroy()  过滤器销毁  Servlet容器在销毁过滤器实例之前该方法得到调用,以释放占用的资源

 

二、在web.xml中配置过滤器

首先声明Filter,指定Filter的名字和实现类,如果有参数,需要配置参数。

 

实例1、字符编码过滤器

package com.jialin.drp.util.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;public class CharsetEncodingFilter implements Filter {    	private String encoding;		@Override	/**	 * 销毁这个过滤器	 */	public void destroy() {		// TODO Auto-generated method stub		System.out.println("销毁过滤器");	}	@Override	/**	 * 进行过滤处理,所有过滤处理都在这个方法中实现	 */	public void doFilter(ServletRequest request, ServletResponse response,			FilterChain chain) throws IOException, ServletException {		System.out.println("编码过滤器>>>>begin");		request.setCharacterEncoding(encoding);		chain.doFilter(request, response);		System.out.println("编码过滤器>>>>end");			}		@Override	/**	 * 是服务器启动时会创建实例,该方法得到调用 	 */	public void init(FilterConfig filterConfig) throws ServletException {				//初始化过滤器,获取初始化参数		this.encoding=filterConfig.getInitParameter("encoding");		System.out.println("初始化过滤器>>>>>encoding="+encoding);	}}

配置文件:

CharsetEncodingFilter
com.jialin.drp.util.filter.CharsetEncodingFilter
encoding
GBK
CharsetEncodingFilter
*.jsp
CharsetEncodingFilter
/servlet/*

说明:CharsetEncodingFilter的filter-mapping中,它的url-pattern为*.jsp,这表示对所有jsp都起作用。/servlet/*表示以/servlet/的所有URL将被过滤。如果为/*表示对所有URL的请求过滤

转载地址:http://kedci.baihongyu.com/

你可能感兴趣的文章
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>
苹果Swift编程语言入门教程【中文版】
查看>>
捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
查看>>
iphone开发基础之objective-c学习
查看>>
iphone开发之SDK研究(待续)
查看>>
计算机网络复习要点
查看>>
Variable property attributes or Modifiers in iOS
查看>>
NSNotificationCenter 用法总结
查看>>
C primer plus 基础总结(一)
查看>>
剑指offer算法题分析与整理(三)
查看>>
Ubuntu 13.10使用fcitx输入法
查看>>
pidgin-lwqq 安装
查看>>
mint/ubuntu安装搜狗输入法
查看>>
C++动态申请数组和参数传递问题
查看>>
opencv学习——在MFC中读取和显示图像
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
JVM最简生存指南
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>