


















近日打算对服务端进行进一步的解耦,便购入了云数据库服务,将数据库独立,使得Tomcat主机独立运行,提高安全性和便利性。
心血来潮,想将服务器重装为Windows,便有了下面的一系列文章:
平时我都是使用Navicat对MySQL进行管理。在备份的第一时间我便想到了使用Navicat进行数据的迁移。

右键指定的数据库,选择Dump SQL File -> Structure + Data就可以将选定数据库全部的结构、参数、表、键值保存到一个文件中,我将其输出到桌面以便恢复。

登录到新的数据库中,并建立一个名称相同的数据库。右键该数据库,选中Execute SQL File:


比对Windows和Linux的区别,对我而言:
遇到这个问题的时候,我还是不慌的,在我的意料之内。
在查找资料后,我找到了解决办法:
在conf/logging.properties文件中,添加下面一行(先检查是否已经存在,如果已经存在直接修改即可):
1java.util.logging.ConsoleHandler.encoding = GBK
2

这是因为Windows的控制台编码为GBK,而Linux的终端编码一般为UTF-8而导致的。
这可真是令人手忙脚乱了... JSP和Servlet都是正常的,但HTML的中文却是乱码。排除法:
√ HTML头部设置了<meta charset="utf-8"/>
√ HTML源文件编码经检测为UTF-8
√ web.xml拦截器编码设置为UTF-8
? 问题可能出在Tomcat的配置
—— 再次经过几经查找,我找到了两种解决方法:
编辑conf/server.xml文件,在Connector后边追加参数URIEncoding="UTF-8"
![]()
由于我开启了SSL,所以在port为443的后方加入。如果你没有使用HTTPS而只是使用了HTTP,那么找到port为80的后方加入即可。
编辑bin/catalina.sh文件:

找到JAVA_OPTS并追加参数:
1-Dfile.encoding=utf-8
通过这条参数,我们可以从根源(JVM)处告诉Tomcat,要以UTF-8的编码来读取文件。
最后,通过方法二(推荐都使用)解决了HTML中文乱码的问题。
经常使用Tomcat的小伙伴可能知道APR模式。
| 模式 | 描述 | 性能 |
| BIO | Blocking I/O 阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作。 | 低 |
| NIO | Non-Blocking I/O 基于缓冲区,并能提供非阻塞I/O操作的Java API。 | 中 |
| APR | Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 | 高 |
在Linux,我一直使用APR模式来运行Tomcat服务端,但这次有些不对劲儿。
由于APR模式需要安装额外的扩展,我便安装并进行了测试,但并没有效果。
在这之后,我尝试了:
最终的一个现象:
一旦我开启APR模式,HTTPS就无法访问。
在一个下午的苦苦挣扎后,我找到了问题所在:
一旦为JAVA_OPTS添加参数-Dfile.encoding=utf-8,APR模式就无法正常工作。
其实我本可以直接将所有的页面文件转码为GBK(Windows的默认编码)从而直接防止上述所有情况的发生,但过程复杂,且一旦需要迁移回Linux非常繁琐。
所以最后,我放弃了APR,使用无需额外扩展及配置的NIO模式:
编辑conf/server.xml:

修改protocol的参数为
```
org.apache.coyote.http11.Http11NioProtocol
1<h1>后语</h1>
2总的来说,除了在文件编码方面略有困难之外,在<strong>提前做好充足功课</strong>之后还是能够迁移成功的。<br />
3生命在于折腾。<br />
4(如果事事都能像自己预想的那样运行,谁还愿意瞎折腾呢?)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。