关于Tomcat的URIEncoding以及GET乱码

来源:互联网 发布:拍证书的软件 编辑:程序博客网 时间:2024/05/16 18:23

最近在维护着Linux上的服务器,当然,开发和前期测试是在windows上执行的。

在做意见反馈的时候,出现了windows上正常,Linux下却是乱码的问题。

先排查了web服务器与mysql的连接,确认问题处在前端页面和web之间的乱码交互。

前端的代码如下:是jQuery的跨域提交。

[javascript] view plaincopy
  1. $(function(){  
  2.     //  
  3.     var $btn_green = $(".btn_green");  
  4.     var $content = $(":input[name=content]");  
  5.     var $nickname = $(":input[name=nickname]");  
  6.     var $linktel = $(":input[name=linktel]");  
  7.     //  
  8.     $btn_green.click(function(){  
  9.         //  
  10.         var content = $content.val();  
  11.         var nickname = $nickname.val();  
  12.         var linktel = $linktel.val();  
  13.         //  
  14.         if(!content){  
  15.             show("亲,请填写内容哦!");  
  16.             $content.focus();  
  17.             return false;  
  18.         }  
  19.         //  
  20.         var url = "http://dev3.mywebsite.com:80/api/feedback?";  
  21.         url += "content="+encodeURIComponent(content);  
  22.         url += "&nickname="+encodeURIComponent(nickname);  
  23.         url += "&linktel="+encodeURIComponent(linktel);  
  24.         try{  
  25.             $.getScript(url);  
  26.         } catch(e){  
  27.             //  
  28.         }  
  29.         close_feedback();  
  30.         $content.val("");  
  31.         //  
  32.         show("感谢您的建议与反馈!");  
  33.     });  
  34.     //  
  35.     function show(message){  
  36.         if(message){  
  37.             alert(message);  
  38.         }  
  39.     };  
  40. });  


页面编码是UTF-8。 提交以后,在servlet里面:

[java] view plaincopy
  1. // 请求的编码  
  2. request.setCharacterEncoding("UTF-8");  
  3.   
  4. String content = request.getParameter("content");  
  5. String clientIp = request.getRemoteAddr();  
  6. String nickName = request.getParameter("nickname");  
  7. String linkTel = request.getParameter("linktel");  
  8. // 打印其中一个内容  
  9. System.out.println("content="+content);  

发现在windows上是正常的,而linux服务器里面就是乱码。

于是在Servlet加上转码,linux好了,而windows又出现乱码了。

[java] view plaincopy
  1. String srcChar = "ISO8859-1";  
  2. String dstChar = "UTF-8";  
  3. title = new String(title.getBytes(srcChar),dstChar);  
  4. content = new String(content.getBytes(srcChar),dstChar);  
  5. nickName = new String(nickName.getBytes(srcChar),dstChar);  
  6. linkAddress = new String(linkAddress.getBytes(srcChar),dstChar);  
  7. //  

确定问题应该处在Tomcat的配置上,于是翻开两个conf/server.xml 对比,发现:

[html] view plaincopy
  1. <!-- windows  -->  
  2. Service name="Catalina">  
  3. <Connector port="8080" protocol="HTTP/1.1"   
  4.            connectionTimeout="20000"   
  5.            redirectPort="8443" URIEncoding="UTF-8" />  
  6.   
  7. <Connector port="8099" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />  

而Linux 的配置缺少了URIEncoding的配置项,那么默认应该是"ISO8859-1",所以如果没有配置,则需要转码一次。

[html] view plaincopy
  1. <!-- Linux 上Tomcat-->  
  2. <Service name="Catalina">  
  3.   <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"  maxThreads="250" minSpareThreads="20"/>  
  4.   <Connector port="80" protocol="HTTP/1.1"  
  5.              connectionTimeout="20000"  redirectPort="8443"  compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla,traviata"  
  6. ompressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json,application/javascript,application/x-javascript"  
  7.         />  
  8.   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" executor="tomcatThreadPool"/>  

同理,如果在Linux上的Tomcat 加上URIEncoding="UTF-8" 就好了。

结论: 约定很重要,网站一般采用UTF-8作为默认编码。如果不是特殊需求,不要变换成其他编码。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 阴茎上皮肤皴了怎么办 手皮肤干燥起皮怎么办 一到冬天手脚冰凉怎么办 脸上的皮肤被搓掉了怎么办 皮肤的表皮搓掉了怎么办 固体水彩经常掉出来怎么办 画水彩纸皱了怎么办 画完水彩纸皱了怎么办 旗袍后面隐形拉链气包怎么办 电动缝纫机不往前走怎么办 衬衣领子磨烂了怎么办 白寸衣领变黄怎么办 黑衣领衣服洗发黄怎么办 白毛衣用84变黄怎么办 白色貂毛衣变黄怎么办 蓝色T恤衣领汗積洗不掉怎么办 蓝色t恤衣领汗积洗不掉怎么办 羽绒服在衣柜里放黄了怎么办 白羽绒服放久了泛黄怎么办 白色t恤领子发黄怎么办 身体爱出油衣服领子总爱脏怎么办 白色衣服衣领净洗后变红怎么办 棒球服衣领洗变形怎么办 挂盐水手肿了怎么办 衣服买大了肩宽怎么办 买来的衣服肩宽怎么办 素描揉擦之后的黑点怎么办 扭脖子响了一下怎么办 画的眼线容易掉怎么办 做完眼线后眼睛肿了怎么办 洗眼线眼睛肿了怎么办 眼线留眼泪总是爱花妆怎么办 戴眼镜眼球外凸怎么办 修眉后的眉渣怎么办 内眼线容易晕妆怎么办 手抖不会画眼线怎么办 画眼线眼睛总眨怎么办 画眼线总是晕妆怎么办 眼线笔没用完干了怎么办 新的眼线笔干了怎么办 不涂口红没气色怎么办