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

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

第一种方式:编码写到web.xml中,过滤器读取编码,设置到request对象即可
web.xml的文件:

	encoding
	cn.itsource._02_encoding.EncodingFilter
	
		encoding
		UTF-8
	

 	
 		encoding
 		/*
 	

编码过滤器EncodingFilter
public class EncodingFilter implements Filter {

	private String charset = "UTF-8";//设置默认编码为UTF-8
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		String tempCharset = filterConfig.getInitParameter("charset");
		if(StringUtils.isNotBlank(tempCharset)){//判断 如果在配置文件中没有拿到charset
			charset = tempCharset;
		}

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		//做字符编码过滤
		request.setCharacterEncoding(charset);
		chain.doFilter(request, response);//放行
	}

	@Override
	public void destroy() {
	
	}

}


第二种方式:提供一个force参数确定是否强制使用自己设置的编码    如果设置了强制,那么哪怕request带有编码,也用我们设置的编码。
web.xml文件:


	charset
	cn.itsource._04_encoding.CharsetFilter
	
		charset
		UTF-8
	
	
	
		force
		true
	


	charset
	/*

/**
 *  解决字符编码问题的过滤器(配置版)
 * */
public class CharsetFilter implements Filter {

	private String charset = "UTF-8"; //设置默认编码为UTF-8
	private Boolean force = false;
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		String tempCharset = filterConfig.getInitParameter("charset");
		if(StringUtils.isNotBlank(tempCharset)){//判断如果在配置文件中没有拿到charset(tempCharset)
			charset = tempCharset;
		}
		String tempDorce = filterConfig.getInitParameter("force");
		if(StringUtils.isNotBlank(tempCharset)){
			force = Boolean.valueOf(tempDorce);
		} 
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		//拿到相应的请求字符编码
		String oldEncoding = request.getCharacterEncoding();
		//如果请求中原本就带有编码,如何处理编码问题?
		// 拿到原来的编码。如果存在,我们就不修改编码。如果不存在,就是用我们的编码格式
		
		/**
		 *  在web.xml文件中,如果force的值为true,就一定会执行我们设置的编码
		 *  当force为false的时候,并且编码也没有值,也执行做字符编码过滤
		 * 
		 * */
		if(force || oldEncoding==null){
			//做字符编码过滤
			request.setCharacterEncoding(charset);
		}
		chain.doFilter(request, response);//放行
	}

	@Override
	public void destroy() {
		

	}

}






你可能感兴趣的:(使用过滤器解决字符编码问题)