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

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

第一种方式:编码写到web.xml中,过滤器读取编码,设置到request对象即可
web.xml的文件:
<filter>
	<filter-name>encoding</filter-name>
	<filter-class>cn.itsource._02_encoding.EncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter>
 	<filter-mapping>
 		<filter-name>encoding</filter-name>
 		<url-pattern>/*</url-pattern>
 	</filter-mapping>

编码过滤器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文件:
<!-- 解决编码问题而配置的过滤器 -->
<filter>
	<filter-name>charset</filter-name>
	<filter-class>cn.itsource._04_encoding.CharsetFilter</filter-class>
	<init-param>
		<param-name>charset</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
	<!--   force:强制    如果用户配置了这个值,那么代表全部强制使用我们设置的编码 -->
		<param-name>force</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>charset</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

/**
 *  解决字符编码问题的过滤器(配置版)
 * */
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() {
		

	}

}






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值