Servlet的自我理解之7:Servlet过滤器技术的具体实现

Filter(过滤器)技术是Servlet 2.3以上出现的新功能,目前已经到3.0了,是一项非常重要的技术,你要掌握它,因为他是国人专用哦!

为什么这么说,它之中最重要的,应用最为广泛的,两种:解决中文乱码和权限控制,后一种比较牛逼,作为入门者,暂先实现第一种吧~~

Filter不是一个Servlet类,在一个request到达Servlet之前预处理request,在离开Servlet时处理response,也叫“Servlet Chain”,原理图如下:

Servlet的自我理解之7:Servlet过滤器技术的具体实现_第1张图片


测试结果提示404错误,不知道哪儿的问题,代码和配置应该是没错的,今天先把代码和web.xml的配置代码贴上来,以后具体测试时再说~~

(1)首先定义一个名为CharacterEncodingFilter的Filter类,用于解决中文乱码现象,

我的工程目录结构如下:

Servlet的自我理解之7:Servlet过滤器技术的具体实现_第2张图片

具体代码如下:

package jsp_servlet;

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 CharacterEncodingFilter implements Filter{
	
	private FilterConfig config;

	//此filter被释放时的回调方法
	public void destroy() {	}

	//主要做过滤工作的方法
	//FilterChain用于调用过滤器链中的下一个过滤器
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		//获取此Filter的初始参数的值
		String encoding = config.getInitParameter("encoding");
		
		if(null != encoding && !"".equals(encoding)){
			request.setCharacterEncoding(encoding);  //设置请求数据的编码方式
		}
		
         //把请求和响应对象传给过滤链中的下一个要调用的过滤器或Sevlet
		chain.doFilter(request, response);
	}
	
	//些filter初始化时的回调方法
	//FilterConfig接口实例中封装了这个Filter的初始化参数
	public void init(FilterConfig config) throws ServletException {
		this.config = config;
	}
	
}

(2)进行web.xml相关文件的配置

  
 
 	
 	CharacterEncodingFilter
 	
 	jsp_servlet.CharacterEncodingFilter
	 
	
	
	encoding
	
	UTF-8
	
 
 
 
 	
 	CharacterEncodingFilter
 	
 	/*
 


(3)我直接run as->run on server,出现了比较纠结的404问题,怀疑是不是这么个Filter类是没法具体看到的,反正代码肯定没问题,先这样吧~~

Servlet的自我理解之7:Servlet过滤器技术的具体实现_第3张图片


参考书目:《JSP基础与案例开发详解》,清华大学出版社

你可能感兴趣的:(JAVA,EE的学习)