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

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

        转换器的代码如下:

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

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

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

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

              3.使用转换器转换数据

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

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

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

     代码如下:

 

  1. public   class  EncodeFilter  implements  Filter {  
  2.   
  3.     private  String encode= "UTF-8" ;  
  4.     private   String decode(String data){  
  5.         try  {             
  6.             return   new  String(data.getBytes( "ISO-8859-1" ),encode);  
  7.         } catch  (UnsupportedEncodingException e) {  
  8.             return   "" ;  
  9.         }  
  10.     }  
  11.       
  12.     public   void  destroy() {       
  13.     }  
  14.   
  15.     public   void  doFilter(ServletRequest req, ServletResponse res,  
  16.             FilterChain fc) throws  IOException, ServletException {  
  17.            HttpServletRequest hs=(HttpServletRequest) req;  
  18.            for (Object  k :req.getParameterMap().keySet()){  
  19.                String[] vals= req.getParameterValues(k.toString());                  
  20.                if (vals.length> 1 ){  
  21.                    for ( int  i= 0 ;i<vals.length;i++){  
  22.                        vals[i]=decode(vals[i]);                      
  23.                    }  
  24.                    req.setAttribute(k.toString(), vals);  
  25.                }  
  26.                else {                     
  27.                    req.setAttribute(k.toString(), decode(vals[0 ]));  
  28.                }  
  29.               
  30.            }  
  31.            fc.doFilter(req,res);  
  32.     }  
  33.   
  34.     public   void  init(FilterConfig fc)  throws  ServletException {  
  35.         if (fc.getInitParameter( "encode" )!= null ){  
  36.             encode=fc.getInitParameter("encode" );  
  37.         }  
  38.   
  39.     }  
  40.   
  41. }  

 

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

  1. < filter >   
  2.   < filter-name > EncodeFilter </ filter-name >   
  3.   < filter-class > com.haha.common.EncodeFilter </ filter-class >   
  4.   < init-param >   
  5.    < param-name > encode </ param-name >   
  6.    < param-value > UTF-8 </ param-value >   
  7.   </ init-param >   
  8.  </ filter >   
  9.  < filter-mapping >   
  10.     < filter-name > EncodeFilter </ filter-name >   
  11.     < url-pattern > *.jsp </ url-pattern >   
  12.  </ filter-mapping >   


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值