在平时的编码中我们常常会遇到乱码的问题,这个往往带给我们一些不必要的麻烦, 针对这个问题,想要做到一个很好的解决方式, 那么过滤器无非是个非常好的方式,简单而且方便!下面就是我本人写的一个过滤器的实际的例子,如果有什么不完善的地方请见谅!
一,创建Servlet 继承于HttpServlet 并实现Filter这个过滤器的借口
package com.sun.test;
imp
imp
imp
/***
*
* @author 孙海明
* 功能:处理中文乱码的过滤器 (一个Servlet 实现 Filter的接口)
*
*/
public class MyFilter extends HttpServlet implements Filter {
protected String encoding = null; //声明一个存储编码的属性
protected FilterConfig filterConfig = null; //创建一个过滤器配置对象
/**
* 销毁
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
System.out.println("------------------孙海明告诉您:过滤器执行结束了--------------");
}
/**
* 执行
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throwsIOException, ServletException {
System.out.println("------------------孙海明告诉您:正在执行过滤器------------------");
// 选择并设置要使用的字符编码
if((request.getCharacterEncoding()==null)){
String encoding = selectEncoding(); //或得配置文件里面的编码设置
if(encoding!=null){
request.setCharacterEncoding(encoding); //重新设置字符编码 , 顾虑完毕
}
}
// 将控制权传递到下一个过滤器
chain.doFilter(request, response);
}
/**
* 初始化
*/
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("------------孙海明告诉您:正在初始化--------------");
this.filterConfig = filterConfig; //初始化过滤器的配置
this.encoding = filterConfig.getInitParameter("charset"); //获得配置文件里面的编码并初始化给声明的存储编码的属性
}
//对编码的设置进行封装
protected String selectEncoding() {
return (this.encoding);
}
}
二,过滤器写好了还要在配置文件(web.xml)里面声明,并将其映射到整个程序里面使用:
<!-- 配置一个过滤器 -->
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.sun.TestFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<!-- 映射到程序中使用 -->
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
[一个处理中文乱码的过滤器就写好了!是不是很简单!额 ,本来就不难哈哈!]