JAVA Linux下的验证码问题
一般项目涉及到会员的时候就少不了需要验证码,项目放在Windows 可以正常的运行但是一旦把项目部署到Linux 触及到验证码的方法就会导致tomcat 直接停止运行。
这个问题百度大多答案都是千篇一律的,大多都是用到了awt把项目搞挂了。
过去过来也没有撒好的方式处理,也是无意间发现了网上提到一句话,
能不用com.sun 包里面的东西就不要用,于是回想自己代码里面是不也用到这个包呢,打开一看果然。但是由于这个不用的话咋个生成验证码呀。仔细想了下,实际的运行环境只是安装了jre 也不是我开发的JDK 呀。难道com.sun 不在jre 里面,于是查看了发现果然没有呀,那咋个办呢。于是将运行环境改为了JDK 果不其然能正常的生成验证码了。当然不能在服务端无端的安装个 JDK呢。于是仔细看了下代码
// 将该图片以指定格式绘制到输入流(浏览器)
于是得考虑换种方式了
如果避免使用到了 com.sun 包下类这个问题??
对于百度同一个答案收录很多页一直相当的不爽了
这个问题百度大多答案都是千篇一律的,大多都是用到了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