部署机器

  • 操作系统:centos 7
  • java版本: java version "1.7.0_80"

问题症状

  • 将一个java web的程序部署到了两台配置相同的服务器上之后(服务器1、服务器2),程序都正常启动,当前端请求注册服务时,会向后台请求图片验证码,然而(服务器1)验证码出现了如图1所示的乱码问题,图二为(服务器2)正常的验证码显示。

图1

图2

问题探索

  • 猜测1:java字符的编码问题

    • 探索过程:将字符编码转换成utf-8编码,但是乱码问题没有得到解决
  • 猜测2:服务器字体问题,由于两台服务器的java环境是一样的,因此猜测两台服务器的字体配置不一致导致的。

    • 探索过程:(ps:以下操作均在linux的root权限下操作)

    1.查看两台服务器的字体版本,通过在服务器上输入如下指令:

rpm -qa | grep font

服务器1

服务器2

上面的两幅图分别显示了服务器1和服务器2的字体库版本,可以看出两台服务器的字体库版本是一样的,因此排除了字体库版本不一样的假设。

2.查看linux字体库里面的字体有哪些

怎样知道字体库的位置呢,通过输入如下指令就可以找到:

find / -name fonts

进入上图标出的文件夹,指令为:

cd /usr/share/fonts

进入文件夹,发现服务器1的文件夹下有一个文件夹lxy,而服务器2该文件夹下没有文件夹,下图显示了文件文件夹lxy的内容。

解决方案

  • 将lxy文件夹移动到其他的文件夹(ps:貌似只改文件夹的名称是不行的,必须将该文件夹移出fonts文件夹),然后重启web服务,问题得到解决。指令:
mv lxy tager

总结

  • 该问题是linux字体库里面的字体文件不同造成的,我猜测java加载字体库时先加载linux系统自带的字体库,如果找不到对应的字体库就会去找java自己的字体库(ps:只是本人的猜测,是否是这样,有待哪位大神来解锁)。

最新文章

  1. 高级SQL运用
  2. 《Entity Framework 6 Recipes》中文翻译系列 (17) -----第三章 查询之分页、过滤和使用DateTime中的日期部分分组
  3. MyEclipse 2015 Stable 2.0安装包及破解工具下载
  4. oracle job create table insert into
  5. [C++基础]一个比较常用的配置文件/初始化文件读取程序
  6. 拓展Jquery对象,实现Post提交并跳转
  7. depth_write
  8. 浅析extendedLayout, automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars
  9. Solution multisite htaccess cleanURL
  10. Ubuntu常用命令速查手册-珍藏版-完整版
  11. the C programming language 阅读笔记1
  12. 利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖
  13. 基于路由器物理接口的vlan间路由
  14. dubbo的简单应用
  15. 2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
  16. Elixir 简介
  17. ionic3 打包 混淆代码
  18. Java SE中的Synchronized
  19. Python - 使用objgraph生成对象引用关系图
  20. 「JLOI2015」骗我呢 解题报告?

热门文章

  1. jQuery Ajax方法调用 Asp.Net WebService、WebMethod 的详细实例代码
  2. JQuery weui 中的Popup (弹出层:底部)
  3. Java8的I/O整理
  4. 浅谈Vue中的$set的使用
  5. 结合element-ui封装的一个分页函数
  6. oracle--批量删除部分表,将某一列拼接成字符串
  7. 通过document.domain实现跨域访问
  8. 使用userAgent区分浏览器版本
  9. 第九届蓝桥杯A组第三题: 乘积尾零
  10. Python 中的 os 模块常见方法?