解决全站字符乱码

描述:乱码问题一直存在,我们可以在servlet中进行解决,但是如果servlet很多,这样处理起来就会很麻      烦,所以可以在全局设置码表问题,这样就用到了filter拦截所以请求与响应,设置字符集。

//拦截器继承了自己写的拦截器父类
public class CharacterFilter extends HttpFilter {
	@Override
	public void doFilter(HttpServletRequest request,
			HttpServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 解决response中文乱码
		response.setContentType("text/html;charset=utf-8");
		// 解决request中文乱码,但是只对post有效,get还需手动转换
		request.setCharacterEncoding("utf-8");	
		// 应用已经包装的类,将包装后的request放到放行的代码中
		MyRequest myrequest = new MyRequest(request);
		// 放行
		chain.doFilter(myrequest, response);
	}
}
//对 request 进行包装
//HttpServletRequestWrapper类是sun公司帮我们包装好的一个类,这个类继承了ServletRequestWrapper实现了HttpServletRequest
//因为HttpServletRequest这个类的方法很多,所以我们用到包装设计模式要将所有的方法都原封不动的调用父类的方法,很麻烦所以sun公司实现了
//我们就单独继承HttpServletRequestWrapper这个类就行了,覆盖我们想增强的代码就行了。
class MyRequest extends HttpServletRequestWrapper {
	public MyRequest(HttpServletRequest request) {
		super(request);	
	}
	// 重写父类的方法   需要加强的方法
	@Override
	public String getParameter(String name) {
		// 解决 get 方式下请求参数的乱码问题
		// 调用被包装对象的 getParameter方法来获得参数
		String value = super.getParameter(name);
		// 判断非空
		if(value==null)
			return null;
		// 获得请求的方式
		String method = super.getMethod();
		if("get".equalsIgnoreCase(method)) {
			try {
				//此处写死了代码,其实转成什么码表应该配置在web.xml文件中的初始化参数。
				value = new String(value.getBytes("iso-8859-1"), "utf-8");
			} catch (UnsupportedEncodingException e) {
				throw new RuntimeException(e);
			}
		}
		return value;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值