使用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中的配置文件格式相似)

  <filter>
  	<filter-name>charsetEncodingFilter</filter-name>
  	<filter-class>com.aaa.filter.CharsetEncodingFilter</filter-class>
  	<init-param>
  		<param-name>CharsetEncoding</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  </filter>
  
  <filter-mapping>
  	<filter-name>charsetEncodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>


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


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



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






  • 15
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值