分享

前台ajax,get请求url,在servlet中获取参数乱码

 不醉怎能入睡 2014-08-27
在开发过程中,任何一个程序猿不可避免的令人头痛的问题就应该是乱码问题了。
简单讲述一下,我是怎么碰到这个问题的。
首先我们要做的事一个类似于QQ通讯录的一个功能,不过是在电视上呈现,做的是机顶盒的应用。
前台以ajax的方式提交get请求,这个请求众所周知的就是URL路径提交,里面携带一些参数信息,在参数中会有中文。前台将数据以utf8的格式提交,然后我再后台使用servlet框架,通过
String nickName = request.getParameter("nickName");这种方式获取参数。下面大家都知道出现了什么问题,对,乱码问题。
在网上搜了一下关于servlet的乱码问题怎么解决。一开始认为机顶盒应用汇通过中间件进行一些编码或者解码的操作,就一直没有按照网上给的一些方法进行修改。最后想到,机顶盒一定会兼容浏览器模式,不然这个机顶盒就没有存在的意义了。所以后来就根据网上的一些方法进行解码。
网上说,servlet的get请求,由于tomcat默认的编码方式是ISO-8859-1,所以会对参数进行ISO-8859-1的编码,我就尝试着用ISO-8859-1进行解码,输出结果还是不如人意,仍旧是乱码。我又尝试了网上说的那种使用new String(name.getBytes("ISO-8859-1"),"utf-8").还是不能解决问题,我就用其他的编码进行转码,也不行。
仔细审视了一下数据,前端通过机顶盒请求的数据是是utf8的,再看看自己接收到的数据跟传过来的一点都不一样,用utf根本就解析不过来。
了解了servlet和tomcat的一些编码机制,觉得,还是改一下tomcat,sever.xml配置文件中关于编码的设定。你如果不设置编码格式tomcat会以ISO-8859-1的格式进行编码和解码。所以在配置文件中设置了一下。结果不乱了。
<Connector
        port="8080"
        maxThreads="150"
        minSpareThreads="25" maxSpareThreads="75"
        enableLookups="false"
        redirectPort="8443"
        acceptCount="100"
        debug="0"
        connectionTimeout="20000"
        disableUploadTimeout="true"

        URIEncoding="UTF-8" 
/>

其实在项目中不一定哪一种情况适用自己的项目,只能自己摸索。其次,甲方公司的服务器上的东西不能随便动,也就是tomcat之类的服务器上的东西,不能随意修改,不然会影响到其他的数据。这也是我改了两天没改好的原因,之前也想到修改tomcat的编码格式,但是一直没敢动服务器上的。

除了修改tomcat的配置文件,顺便推荐一个写的很好的东西,个人觉得楼主写的非常好。
http://blog.csdn.net/xiazdong/article/details/7217022。

总结一下吧:
1、在做项目时不能焦躁,因为java开发碰到的问题不是科学甚至神学能够解释的,所以不能着急。
2、不能随便参考网上的,一定要搞清楚怎么个机制,比如servlet处理参数的问题以及编码方面的知识,只有了解透才能够更好地应用于自己的开发。
3、有时候别人好用的东西,放在自己身上,就不好用,这个很正常。

乱码解决方案以及远离,我给的链接中博主已经写得很好了。补充一下,另外的方法。

1、网上是这么说的,使用ajax,get提交时是需要对中文参数进行两次解码才能好使。
前台页面中js:type=encodeURI(encodeURI(‘商品'));
后台servlet处理:URLDecoder.decode(type, “UTF-8″);

这种方式,我没试过,既然网上这么说了,应该也有一定的道理,如果其他的方式都不好用,那就试试这个方法。

2、就是修改tomcat中的配置文件的编码格式。
<Connector
        port="8080"
        maxThreads="150"
        minSpareThreads="25" maxSpareThreads="75"
        enableLookups="false"
        redirectPort="8443"
        acceptCount="100"
        debug="0"
        connectionTimeout="20000"
        disableUploadTimeout="true"

        URIEncoding="UTF-8" 
/>

3、还有一种就是使用过滤器的方式解决,这个网上一大堆,就不在赘述了。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多