JAVA Linux下的验证码问题

/ 2014-11-30
一般项目涉及到会员的时候就少不了需要验证码,项目放在Windows 可以正常的运行但是一旦把项目部署到Linux 触及到验证码的方法就会导致tomcat 直接停止运行。

这个问题百度大多答案都是千篇一律的,大多都是用到了awt把项目搞挂了。
过去过来也没有撒好的方式处理,也是无意间发现了网上提到一句话,
能不用com.sun 包里面的东西就不要用,于是回想自己代码里面是不也用到这个包呢,打开一看果然。但是由于这个不用的话咋个生成验证码呀。仔细想了下,实际的运行环境只是安装了jre 也不是我开发的JDK 呀。难道com.sun 不在jre 里面,于是查看了发现果然没有呀,那咋个办呢。于是将运行环境改为了JDK 果不其然能正常的生成验证码了。当然不能在服务端无端的安装个 JDK呢。于是仔细看了下代码

// 将该图片以指定格式绘制到输入流(浏览器)
try {
    // 将图像输出到客户端
    // 明显在这里就直接停止了,根本在Jre找不到这个类
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response
            .getOutputStream());
    encoder.encode(img);
} catch (IOException e) {
    e.printStackTrace();
}

于是得考虑换种方式了

try {
    //更改后方式 不使用JPEGImageEncoder方式去响应输出流
    ByteArrayOutputStream bs = new ByteArrayOutputStream();  
    ImageOutputStream imOut = ImageIO.createImageOutputStream(bs);
    ImageIO.write(img, "png",imOut);
    response.getOutputStream().write(bs.toByteArray());
} catch (IOException e) {
    e.printStackTrace();
}



好了搞定了。 上张效果图。。。。



如果避免使用到了 com.sun 包下类这个问题??

在eclipse,myeclipse 选择的时候不要使用自己的jdk。而是使用eclipse自己提供的 JAVASE-1.7 这样的开发包,就不会有导入这些类了。

也来张图 注意看 JRE System Lib

记下这个坑,希望后来人不要跳这个坑, 就算跳了坑能很快的找到答案。
对于百度同一个答案收录很多页一直相当的不爽了

转载请注明作者和出处,并添加本页链接。
原文链接: //xiaochun.zrlog.com/165.html