Linux下验证码无法显示问题总结

问题现象
web应用在windows和开发linux服务器验证码显示正常,部署包新的生产linux服务器商,验证码无法显示
异常日志
Can’t connect to X11 window server
问题分析
java在图形处理时调用了本地的图形处理库。在利用Java作图形处理(比如:图片缩放,图片签名,生成报表)时,如果运行在windows上不会出问题。如果将程序移植到Linux/Unix上的时候有可能出现图形不能显示的错误。这是由于Linux的图形处理需要一个X Server服务器。
解决问题方案
1.检查jdk版本 java -version ,不能使用openjdk
2.tomcat TOMCAT_HOME/bin/catalina.sh,在“echo “Using CATALINA_BASE: $CATALINA_BASE””上面加入以下行:
JAVA_OPTS=”-server -Xms128m -Xmx256m -XX:MaxPermSize=256M -XX:PermSize=128M -Djava.awt.headless=true ”
3.jetty TOMCAT_HOME/bin/ jetty.sh 修改 JAVA_OPTIONS
JAVA_OPTIONS+=(“-Xmx1024m” “-Xmn512m” “-XX:PermSize=128m” “-XX:MaxPermSize=256m” “-Djava.awt.headless=true”)
4.终极解决方案
一般是在程序开始激活headless模式,告诉程序,现在你要工作在Headless mode下,就不要指望硬件帮忙了,你得自力更生,依靠系统的计算能力模拟出这些特性来:
public void init(ServletConfig config) throws ServletException {
super.init(config);
height = Integer
.parseInt(getServletConfig().getInitParameter(“height”));
width = Integer.parseInt(getServletConfig().getInitParameter(“width”));
String webAppRootValue = config.getServletContext().getRealPath(“/”);
System.setProperty(“webAppAdmin”, webAppRootValue);
System.setProperty(“java.awt.headless”, “true”);
}