最近在维护着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乱码的更多相关文章

  1. linux下tomcat日志文件现问号乱码

    在使用liunux系统下,使用tomcat记录的日志出现乱码的情况,不能显示中文,中文出现?问号乱码情况,不能正常查看 linux下乱码可能有三个情况 1.linux不含中文支持语言包 打开远程连接客 ...

  2. JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码

    JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码 摘要:本文主要记录了在Windows上启动Tomcat后,命令行窗口出现乱码的问题及解决办法. 问题重现 在Windows ...

  3. Tomcat 输出日志出现中文乱码

    Tomcat 输出日志出现中文乱码 解决方案: 打开到tomcat安装目录下的conf/文件夹 修改logging.properties文件,找到 java.util.logging.ConsoleH ...

  4. Tomcat JSP提交参数中文乱码问题解决

    参考: http://blog.csdn.net/error_case/article/details/8250209 中文乱码是个老生常谈的问题,一般情况下,只要保证页面,web服务器,数据库的编码 ...

  5. 关于配置Tomcat的URIEncoding

    遇到的问题: 程序需要发送http GET请求到服务器,请求的参数中包含了中文字符.程序中参数为UTF-8格式,且经过了UTF-8 URL编码再发送.使用的tomcat服务器,但服务器端后台程序中取到 ...

  6. IDEA部署Tomcat应用所有接口中文乱码

    解决问题的思路: 1.分析比对http请求头,contentType等设置 2.前段编码,后端解码,这个方式比较落麻烦,凡是有中文乱码的地方都要进行解决 3.修改Tomcat的默认编码,tomcat8 ...

  7. tomcat项目下载中文文件乱码问题

    最近遇到在tomcat运行的项目下载文件时候都出现了乱码,然后经过排查是只有中文命名的文件才有问题,所以就推测有可能和tomcat的编码有关系 tomcat默认的编码:iso8859-1,所以中文的文 ...

  8. Tomcat get请求中文参数乱码

    场景:使用Tomcat容器进行get方式传递中文参数到后台乱码. 原因:Tomcat默认的编码方式是ISO--. 解决方案: . 设置cofg-server.xml中的<Connector> ...

  9. Tomcat地址栏传中文参数乱码问题处理

    javascript中有时需要向后台传递中文参数,再次展示到前台时显示为乱码,解决方案: 方案1:修改Tomcat-conf-server.xml文件 大约69-71行  修改为: <Conne ...

随机推荐

  1. JVM内部原理

    这篇文章详细描述了Java虚拟机的内在结构.下面这张图来自<The Java Virtual Machine Specification Java SE 7 Edition>,它展示了一个 ...

  2. Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密

    本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1.  摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...

  3. mongo数据删除和游标

    数据删除 db.集合.remove(删除条件,是否只删除一个数据);默认删多条(false)true删除一条db.集合.remove({}) 删除所有元素但集合还在db.集合.drop() 删除集合 ...

  4. jdk和tomcat配置

    1.一次成功的JAVA环境变量配置,必须要配置一下三个系统变量:JAVA_HOME(变量值为JDK的路径),PATH(变量值:%JAVA_HOME%\bin;),CLASS_PATH(变量值为JDK中 ...

  5. 蚂蚁代理免费代理ip爬取(端口图片显示+token检查)

    分析 蚂蚁代理的列表页大致是这样的: 端口字段使用了图片显示,并且在图片上还有各种干扰线,保存一个图片到本地用画图打开观察一下: 仔细观察蓝色的线其实是在黑色的数字下面的,其它的干扰线也是,所以这幅图 ...

  6. postgresql跨服务器复制数据库

    假设名为dbname数据库需要从A服务器拷贝到B服务器 接收服务器B postgres用户 需先重置B服务器postgres系统用户的密码,使之与数据库用户postgres一致: passwd -d ...

  7. 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制

    剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...

  8. 好用的SQLAlchemy

    准备 安装SQLAlchemy框架 测试代码 知识点剖析 引入库支持 基类和引擎 实体类 声明类 数据库自动完成 CRUD 总结 这里简单的记录一下本人第一次使用SQLAlchemy这个ORM框架的过 ...

  9. ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门

    ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...

  10. 将String转换为其表示的路径画到屏幕上

    关于这个问题,我已经在另一篇blog中有所提及: CoreText精彩文字轮廓绘制动画的一点改进 不过原有的转换代码使用Obj-C写的,在这里我们尝试将其转换为Swift语言,然后利用它实现一个测试小 ...