关于Tomcat的URIEncoding以及GET乱码
最近在维护着Linux上的服务器,当然,开发和前期测试是在windows上执行的。
在做意见反馈的时候,出现了windows上正常,Linux下却是乱码的问题。
先排查了web服务器与mysql的连接,确认问题处在前端页面和web之间的乱码交互。
前端的代码如下:是jQuery的跨域提交。
$(function(){ // var $btn_green = $(".btn_green"); var $content = $(":input[name=content]"); var $nickname = $(":input[name=nickname]"); var $linktel = $(":input[name=linktel]"); // $btn_green.click(function(){ // var content = $content.val(); var nickname = $nickname.val(); var linktel = $linktel.val(); // if(!content){ show("亲,请填写内容哦!"); $content.focus(); return false; } // var url = "http://dev3.mywebsite.com:80/api/feedback?"; url += "content="+encodeURIComponent(content); url += "&nickname="+encodeURIComponent(nickname); url += "&linktel="+encodeURIComponent(linktel); try{ $.getScript(url); } catch(e){ // } close_feedback(); $content.val(""); // show("感谢您的建议与反馈!"); }); // function show(message){ if(message){ alert(message); } }; });
页面编码是UTF-8。 提交以后,在servlet里面:
// 请求的编码 request.setCharacterEncoding("UTF-8"); String content = request.getParameter("content"); String clientIp = request.getRemoteAddr(); String nickName = request.getParameter("nickname"); String linkTel = request.getParameter("linktel"); // 打印其中一个内容 System.out.println("content="+content);
发现在windows上是正常的,而linux服务器里面就是乱码。
于是在Servlet加上转码,linux好了,而windows又出现乱码了。
String srcChar = "ISO8859-1"; String dstChar = "UTF-8"; title = new String(title.getBytes(srcChar),dstChar); content = new String(content.getBytes(srcChar),dstChar); nickName = new String(nickName.getBytes(srcChar),dstChar); linkAddress = new String(linkAddress.getBytes(srcChar),dstChar); //
确定问题应该处在Tomcat的配置上,于是翻开两个conf/server.xml 对比,发现:
<!-- windows --> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> <Connector port="8099" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />
而Linux 的配置缺少了URIEncoding的配置项,那么默认应该是"ISO8859-1",所以如果没有配置,则需要转码一次。
<!-- Linux 上Tomcat--> <Service name="Catalina"> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="250" minSpareThreads="20"/> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla,traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json,application/javascript,application/x-javascript" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" executor="tomcatThreadPool"/>
同理,如果在Linux上的Tomcat 加上URIEncoding="UTF-8" 就好了。
结论: 约定很重要,网站一般采用UTF-8作为默认编码。如果不是特殊需求,不要变换成其他编码。
关于Tomcat的URIEncoding以及GET乱码的更多相关文章
- linux下tomcat日志文件现问号乱码
在使用liunux系统下,使用tomcat记录的日志出现乱码的情况,不能显示中文,中文出现?问号乱码情况,不能正常查看 linux下乱码可能有三个情况 1.linux不含中文支持语言包 打开远程连接客 ...
- JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码
JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码 摘要:本文主要记录了在Windows上启动Tomcat后,命令行窗口出现乱码的问题及解决办法. 问题重现 在Windows ...
- Tomcat 输出日志出现中文乱码
Tomcat 输出日志出现中文乱码 解决方案: 打开到tomcat安装目录下的conf/文件夹 修改logging.properties文件,找到 java.util.logging.ConsoleH ...
- Tomcat JSP提交参数中文乱码问题解决
参考: http://blog.csdn.net/error_case/article/details/8250209 中文乱码是个老生常谈的问题,一般情况下,只要保证页面,web服务器,数据库的编码 ...
- 关于配置Tomcat的URIEncoding
遇到的问题: 程序需要发送http GET请求到服务器,请求的参数中包含了中文字符.程序中参数为UTF-8格式,且经过了UTF-8 URL编码再发送.使用的tomcat服务器,但服务器端后台程序中取到 ...
- IDEA部署Tomcat应用所有接口中文乱码
解决问题的思路: 1.分析比对http请求头,contentType等设置 2.前段编码,后端解码,这个方式比较落麻烦,凡是有中文乱码的地方都要进行解决 3.修改Tomcat的默认编码,tomcat8 ...
- tomcat项目下载中文文件乱码问题
最近遇到在tomcat运行的项目下载文件时候都出现了乱码,然后经过排查是只有中文命名的文件才有问题,所以就推测有可能和tomcat的编码有关系 tomcat默认的编码:iso8859-1,所以中文的文 ...
- Tomcat get请求中文参数乱码
场景:使用Tomcat容器进行get方式传递中文参数到后台乱码. 原因:Tomcat默认的编码方式是ISO--. 解决方案: . 设置cofg-server.xml中的<Connector> ...
- Tomcat地址栏传中文参数乱码问题处理
javascript中有时需要向后台传递中文参数,再次展示到前台时显示为乱码,解决方案: 方案1:修改Tomcat-conf-server.xml文件 大约69-71行 修改为: <Conne ...
随机推荐
- 螺旋打印2D数组
//一破题付出血的代价 多思考!public static void offer(int [][]a){ ,right=a.length-,low=,high=a[].length-; while(l ...
- 初识RabbitMQ系列之三:.net 如何使用RabbitMQ
话不多说,直接上代码! 一:搭建一个解决方案框架:RabbitMQ_Demo 其中包含4个部分: 1:RabbitMQ 公用类库项目 2:一个生产者控制台项目 3:两个消费者控制台项目 项目结构如图: ...
- 120. Triangle(中等)
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- ERP中的地区管理
地区管理 地区管理主要实现地区数据的添加.编辑.查看.启用.禁用等功能,另外还包含地区选择控件封装. 业务功能点: 地区数据查看:地区列表树状展现,列表增加省.市.区.县.乡图标. 地区选择控件:选择 ...
- git 撤销没有提交的变化
参考: https://stackoverflow.com/questions/5807137/how-to-revert-uncommitted-changes-including-files-an ...
- Android的AIDL机制
Android 接口定义语言 (AIDL) AIDL(Android 接口定义语言)与您可能使用过的其他 IDL 类似. 您可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的 ...
- Eric5 for Python 3.3.3安装指南
一言蔽之,搭配是关键.以32位Window为例,先后安装: 1.PyQt PyQt4-4.10.3-gpl-Py3.3-Qt4.8.5-x32.exe http://www.riverbankcomp ...
- JVM内存区域划分(JDK6/7/8中的变化)
前言 Java程序的运行是通过Java虚拟机来实现的.通过类加载器将class字节码文件加载进JVM,然后根据预定的规则执行.Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同 ...
- [Pelican]Pelican入门(二)
之前是搭建了一个简单的博客,但是没有图片,没有具体的栏目分类 这次来研究下 一 导航栏 之前是直接把.md扔到的content文件夹下,结果导航栏,显示的是Category信息. 现在这么改成 D:. ...
- tomcat启动批处理——setclasspath.bat
除了上面两个批处理,还有一个比较重要的脚本,即是setclasspath.bat,它主要负责寻找.检查JAVA_HOME和JRE_HOME两个变量. ************************* ...