使用Filter过滤器解决字符编码问题

Java中的字符编码,默认为:ISO-8859-1(西方编码)。这种编码方式为单字节码,只支持英文、俄文、葡萄牙文等乱七八糟文,不支持中文。因此,我们需要对JSP页面或者Servlet中进行字符编码集的处理,国际编码(UTF-8)。

  • 在JSP页面中把最上方标签中的字符编码ISO-8859-1改为UTF-8即可。

	<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

  • 在Servlet中我们最常用的是设置下方代码进行解决乱码问题:

	request.setCharacterEncoding("UTF-8");
		
	response.setCharacterEncoding("UTF-8");

或者是:

	request.setCharacterEncoding("UTF-8");
		
	response.setContentType("text/html;charset=UTF-8");

然而,上面这两种是我们最常用的方式,但是在大型项目中,我们写这么多解决字符编码集的代码,是不是所谓“重复性的垃圾代码”?所以,我们最好的解决方法是在项目中写一个处理字符编码的过滤器。(Filter)

下面是字符编码Filter的设置方法:

package com.aaa.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;

/**
 * @Discription 字符编码过滤器
 * @author ***
 * @company ***
 * @date 2017-11-18
 **/
public class CharsetEncodingFilter implements Filter {  
	
	private static String encoding; // 定义变量接收初始化的值

	public void destroy() {
		
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// 设置字符编码链锁
		request.setCharacterEncoding(encoding);
		response.setCharacterEncoding(encoding);
		chain.doFilter(request, response);
		
	}
	// 初始化
	public void init(FilterConfig config) throws ServletException {
		// 接收web.xml配置文件中的初始参数
		encoding = config.getInitParameter("CharsetEncoding");
		
	}

}


下面为web.xml配置文件中的代码:(跟servlet中的配置文件格式相似)

  
  	charsetEncodingFilter
  	com.aaa.filter.CharsetEncodingFilter
  	
  		CharsetEncoding
  		UTF-8
  	
  
  
  
  	charsetEncodingFilter
  	/*
  


filter中的filter-name 为过滤器名,可以随便起(但是最好见名知意)。filter-class 为要配置filter类的类全名。init-param为初始化参数,param-name为初始化参数的名,param-value为参数的值。


filter-mapping中的filter-name必须和上面filter中的filter-name相同。url-pattern为过滤的范围,此处写 /* 代表过滤所有的请求。 



使用过滤器来自动过滤我们项目中的每一个参数编码,我们就不用麻烦的为每一个参数进行转码了,一个过滤器解决了所有乱码问题。






你可能感兴趣的:(Java,Web,JSP)