在JSP中使用过滤器解决中文乱码问题

        JSP中乱码产生的原因是web容器(Tomcat)默认使用ISO-8859-1进行编码的,而我们可能使用的是UTF-8,GBK,GB2312等编码方式进行jsp编写的,因此需要一个转换器进行转换或者修改默认编码方式,这里我主要用转换器+过滤器完成自动转换功能.

        转换器的代码如下:

	private String encode="UTF-8";
	private  String decode(String data){
		try {			
			return new String(data.getBytes("ISO-8859-1"),encode);
		} catch (UnsupportedEncodingException e) {
			return "";
		}
	}

       使用过滤器可以完成自动转换功能,数据提交的对象是HttpRequest对象

             1.通过request对象的getParameterMap().keySet()可以获取所有键值

              2.通过getParameterValues(key)就可以获取提交的数据,结果是String[] 形式

              3.使用转换器转换数据

              4.通过request对象的setAttribute(k,v)方法将数据放回去

              5.要获取数据时通过request的getAttribute(k)方法就可以获取数据.

     为了支持多种编码,可以在过滤器中设计一个参数来控制转换的编码方式

     代码如下:

 

public class EncodeFilter implements Filter {

	private String encode="UTF-8";
	private  String decode(String data){
		try {			
			return new String(data.getBytes("ISO-8859-1"),encode);
		} catch (UnsupportedEncodingException e) {
			return "";
		}
	}
	
	public void destroy() {		
	}

	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain fc) throws IOException, ServletException {
		   HttpServletRequest hs=(HttpServletRequest) req;
		   for(Object  k :req.getParameterMap().keySet()){
			   String[] vals= req.getParameterValues(k.toString());				   
			   if(vals.length>1){
				   for(int i=0;i<vals.length;i++){
					   vals[i]=decode(vals[i]);					   
				   }
				   req.setAttribute(k.toString(), vals);
			   }
			   else{				   
				   req.setAttribute(k.toString(), decode(vals[0]));
			   }
			
		   }
		   fc.doFilter(req,res);
	}

	public void init(FilterConfig fc) throws ServletException {
		if(fc.getInitParameter("encode")!=null){
			encode=fc.getInitParameter("encode");
		}

	}

}


使用过滤器就需要修改web.xml文件,web.xml文件中添加如下配置:

<filter>
  <filter-name>EncodeFilter</filter-name>
  <filter-class>com.haha.common.EncodeFilter</filter-class>
  <init-param>
   <param-name>encode</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>
 <filter-mapping>
 	<filter-name>EncodeFilter</filter-name>
 	<url-pattern>*.jsp</url-pattern>
 </filter-mapping>


 现在就可以使用request.getAttribute(k)来获取你的数据了,界面显示用${k}就可以直接获取数据了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值