目录
2.在项目对应的代码处添加或者参考步骤3(2和3我都操作了)
3.启动项目时候添加 -Djava.awt.headless=true
一.问题描述:
1.环境
CentOS Linux release 7.1.1503 (Core) 64
jdk1.8.0_141
tomcat启动war项目
2.问题描述:
如图,这个图片里面的验证码,一度都是好使的.突然就不好使了,图片加载不出来
调用验证码对应的接口,返回的错误信息是:
HTTP Status 500 – Internal Server Error
Type Exception Report
Message Handler processing failed; nested exception is java.awt.AWTError: Can't connect to X11 window server using 'localhost:11.0' as the value of the DISPLAY variable.
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
直接上干货:
二.解决步骤
1.linux查看进程,是否有多余的tomcat
如果有,全部kill掉,然后重启,查看是否解决(找了1天多最后却发现是这个问题,真是太坑爹了)
2.在项目对应的代码处添加或者参考步骤3(2和3我都操作了)
/**
* 解决以下问题 Handler processing failed; <br>
* nested exception is java.awt.AWTError: <br>
* Can't connect to X11 window server using 'localhost:11.0' as the value of the DISPLAY variable.
*/
System.setProperty("java.awt.headless", "true");
3.启动项目时候添加 -Djava.awt.headless=true
由于我这里是tomcat启动的,所以修改tomcat的catalina.sh文件,如果是jar启动的,启动命令中添加这句话就可以了
参考链接
https://www.cnblogs.com/caoyingjielxq/p/9638615.html
vim tomcat/bin/catalina.sh
查找JAVA_HOME=
大约在230行左右,添加位置如图
然后启动查看启动命令,如图就是成功了:
三.问题解析
由于之前项目是好使的,后来突然不好使了,所以一度以为某个人改过什么地方的代码
而且仔细查看chrome的开发者模式里的请求,发现返回500错误,而且原本应该是
Content-Type: image/jpeg
却变成了
Content-Type: text/html
网上找了一些资料,说是"请求没到你这个方法前就已经出错了,所以返回的是text格式而不是图片格式"
方向错误,继续找;
后来说是Windows下有图形化工具,而linux命令行的系统是没有的,需要指定 -Djava.awt.headless=true 这句话
也改了Catalina.sh里面多个地方,重启却有部分报错(看来有些教程很不靠谱),所以我才把步骤3贴上,这个才是有效的修改,不要听信什么"文件里面要修改8个地方"这种事情
不过重启之后还是没好使;
然后在无意中,我查找进程 ps -ef | grep tomcat 却发现,进程里有10多个tomcat,
全部kill后重启发现就好使了
特此记录一下整个过程和跳过的坑
这个tomcat的shutdown.sh之后仍保留进程是真的坑啊
——All By MedusaSTears
——2019.11.12