首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux/unix + RESIN 验证码无法显示的有关问题

2012-11-10 
linux/unix + RESIN 验证码无法显示的问题最近公司项目开发中遇到的一个问题,整理一下,和大家分享。验证码

linux/unix + RESIN 验证码无法显示的问题
    最近公司项目开发中遇到的一个问题,整理一下,和大家分享。

    验证码无法显示的问题,验证码的代码就是google上查找到的最常见的代码,服务器采用resin部署于linux或unix。不是常见的out.clear()问题,这次的问题发现在一个我压根就没有想到的地方,profile DISPLAY 环境变量。

    1) 问题描述:
    登录页面等有验证玛显示的页面,通常可以正确显示验证码图片,但是在某些情况下发现验证码图片无法显示,并且目前只发生在linux/unix平台,windows下正常.而且和resin/jdk版本无关.

    bug的直接表现是表现为ie下是红叉,firefox下无实现.将验证码图片的地址在ie输入框中输入,则页面报错:


     在windows平台下运行,结果正常,打印:
sun.awt.Win32GraphicsEnvironment

     将代码放到出问题的resin安装所在的linux平台,手工编译运行:
javac Test.java
java -cp . Test

    报错,打印为:

执行unset再运行可以发现问题消失:
$> unset DISPLAY
$> java -cp . Test
sun.awt.X11GraphicsEnvironment
$>

   在此情况下(unset  DISPLAY )下重新启动resin,发现验证码可以正常显示。

4) 解决的方法:
        必须保证resin运行时DISPLAY 环境变量没有设置,如果resin运行的环境有其他要求必须使用DISPLAY,则可以在运行resin前使用unset清除. 建议的简单而有效的方法是直接修改resin/bin/httpd.sh文件,在第二行(具体行数无所谓,但必须在最后一行前)插入:
#! /bin/sh
unset DISPLAY
#....

5)疑惑
1. Can't connect to X11 window server using '10.3.18.16' as the value of the DISPLAY variable
为什么要去连X11 window server ?不懂

2. 从Test.java运行看抛出的是Error : java.lang.InternalError,但是页面上显示的是java.lang.NoClassDefFoundError,看了看源代码也没有发现先catch 后throws的错误处理,不清楚这里的具体处理,不方便继续追查,作罢。
1 楼 aunox 2007-10-19   问题答案很容易在网上查到。类Unix系统里面如果主机上面没有带显示器的话,需要启动虚拟界面进程,此进程在系统安装时是可以选装的(openwin或X11)。 2 楼 skydream 2007-10-19   我google了一下"验证码 DISPLAY",没有发现相关的内容。

不过发现google的搜索引擎实在太强了,我刚发了这个帖子,才15分钟就在google上找到了我自己的帖子,简直快的有些变态了......

顺便百度了一下,呵呵,没有找到。 3 楼 myy 2007-10-19   google "unix BufferedImage.getGraphics" 4 楼 aunox 2007-10-22   搜索这个“Can't connect to X11 window server using ”你会找到需要的答案的。

热点排行