关于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 ...
随机推荐
- PWA初体验
一.前言 现在市面上的Native APP成千上万个,各种应用商店里面的APP琳琅满目.原生的APP下载到手机上之后,用户就可以获取一个方便的入口,体验上也十分顺畅.但是再好的事物难免有点缺点: 1 ...
- Day 2 Python数值计算
一.数值数据类型 在Python中,数值数据类型有以下两种: 整数 整数用"int"数据类型表示.int类型的数据可以是正数也可以是负数,Python可以处理任意大小的整数. 浮点 ...
- 动手实现一个vue中的模态对话框组件
写在前面 对话框是很常用的组件 , 在很多地方都会用到,一般我们可以使用自带的alert来弹出对话框,但是假如是设计 出的图该怎么办呢 ,所以我们需要自己写一个对话框,并且如果有很多地方都用到,那我们 ...
- MySQL EXTRACT() 函数
定义和用法 EXTRACT() 函数用于返回日期/时间的单独部分,比如年.月.日.小时.分钟等等. 语法 EXTRACT(unit FROM date) date 参数是合法的日期表达式.unit 参 ...
- flowable设计器插件安装
原文地址:http://www.shareniu.com/ 工欲善其事必先利其器,要想使用flowable,必须搭建一套环境,本文以Eclipse中安装flowable插件为例详细说明整个安装过程. ...
- miracl去除某些特殊信息
只需要在mirdef.h中增加定义 #define MR_STRIPPED_DOWN 即可在编译的时候,去掉错误信息 #define MIRACL 32 #define MR_LITTLE_ENDI ...
- Device Mapper 代码分析
Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实或虚拟的块设备. DM以块设备的形式注册到Linux内核中,凡是挂载(或者说&quo ...
- Ajax 异步加载
AJAX (Asynchronous JavaScript and XML,异步的 JavaScript 和 XML).它不是新的编程语言,而是一种使用现有标准的新方法,是在不重新加载整个页面的情况下 ...
- 初识Spring Boot框架
前面的铺垫文章已经连着写了六篇了,主要是介绍了Spring和SpringMVC框架,小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说 ...
- TeamView 无法捕捉画面问题的解决办法
teamview是个非常不错的远程协助软件,你要是在项目中还搞个QQ远程协助啥的就显的非常不专业了. 在teamview连接远程后,看到的是一片漆黑,中间框提示"现在无法捕捉画面.这可能是由 ...