CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  应用服务器

linux+tomcat+jdk1.4.2环境下运行显示验证码的jsp文件错误!请高手指点!

楼主zhiye(智野)2005-01-26 12:22:42 在 Java / 应用服务器 提问

img.jsp文件中包含的包如下:  
   
  import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"    
   
  在windows系统下运行正常,将代码转移到linux环境下后提示下列错误,不知是什么原因,请高手指点!  
   
  java.lang.NoClassDefFoundError  
  java.lang.Class.forName0(Native   Method)  
  java.lang.Class.forName(Class.java:141)  
  java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)  
  java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1041)  
  java.awt.image.BufferedImage.getGraphics(BufferedImage.java:1031)  
  org.apache.jsp.admin.image_jsp._jspService(image_jsp.java:73)  
  org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)  
  javax.servlet.http.HttpServlet.service(HttpServlet.java:802)  
  org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)  
  org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)  
  org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)  
  javax.servlet.http.HttpServlet.service(HttpServlet.java:802)  
   
  问题点数:100、回复次数:11Top

1 楼RomandAccessFile(goodghost)回复于 2005-01-26 12:24:58 得分 10

你用的Class.forName方法找不到注册的类,环境出错,最好你设一下Path和ClassPathTop

2 楼zhiye(智野)回复于 2005-01-26 12:27:13 得分 0

如果是Path或ClassPath设置有问题的话,那其他程序应该也有问题才对吧.实际上其他程序运行是正常的!Top

3 楼eyes2near(eyes2near)回复于 2005-01-26 12:37:44 得分 50

这样处理:  
  看不懂找我:msn:eyes2near@hotmail.com  
   
  在Java运行时加上参数:-Djava.awt.headless=true  
   
  确切的说是因为再linux你没有启动Xserver,所以如果不设置以上参数就会出问题。你应该修改你的servlet   container的启动脚本,在启动选项中加入上边的参数。Top

4 楼singedcat(以夢為馬)回复于 2005-01-26 12:44:21 得分 10

upTop

5 楼chshzh2000(地皮)回复于 2005-01-26 12:48:56 得分 10

设一下Path和ClassPath  
  Top

6 楼eyes2near(eyes2near)回复于 2005-01-26 13:05:59 得分 0

这个不是Path和ClassPath的问题,你就按照我上边说的做就一定ok的,这个问题我已经给许多人讲过了。Top

7 楼meeting(太阳雨)回复于 2005-01-26 13:43:16 得分 20

楼上已说了,肯定没错.  
  JDK1.4以上在LINUX下加参数:-Djava.awt.headless=true  
  具体的说就是在tomcat的/bin/catalina.sh加上JAVA_OPTS=-Djava.awt.headless=true  
  早期的JDK版本就要在LINUX上装个什么包Top

8 楼hcqhappy(月坏)回复于 2005-01-26 13:45:59 得分 0

eyes2near   zhiye   (智野)     能不能分享一下你的验证码   代码吗     谢谢Top

9 楼zhiye(智野)回复于 2005-01-26 13:59:21 得分 0

to:hcqhappy(月坏),你的msn?Top

10 楼eyes2near(eyes2near)回复于 2005-01-26 14:00:04 得分 0

我的生成验证码的代码,懒得修改,你凑合看吧。  
  <%@   page   contentType="image/jpeg"   %>  
  <%@   page   import="java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.*,java.io.*"%>  
   
  <%    
  int   width=100,   height=12;  
  String[]   keys={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};  
  Random   random   =new   Random();  
   
  StringBuffer   sb   =   new   StringBuffer();  
  for(int   i=0;i<8;i++){  
  sb.append(keys[random.nextInt(keys.length)]);  
  }  
  String   validateString   =   sb.toString();  
  String   imgFile;  
  String   rpath   =   application.getRealPath("/userhome/validatecodebg");  
  InputStream   imageIn;  
          JPEGImageDecoder   decoder;  
          BufferedImage   image;  
          Graphics   g;  
  try{  
  File   folder   =   new   File(rpath);  
  String[]   files   =   folder.list();  
  imgFile   =   files[random.nextInt(files.length)];  
  imageIn   =   new   FileInputStream(new   File(rpath+"/"+imgFile));  
          decoder   =   JPEGCodec.createJPEGDecoder(imageIn);  
          image   =   decoder.decodeAsBufferedImage();  
                imageIn.close();  
                width   =   image.getWidth();  
                height   =   image.getHeight();  
                g   =   image.getGraphics();  
  }catch(Exception   e){  
  image   =   new   BufferedImage(width,height,   BufferedImage.TYPE_INT_RGB);  
  g   =   image.getGraphics();  
  g.setColor(Color.white);  
  g.fillRect(0,0,width,height);  
          }  
           
  g.setColor(Color.black);  
          //g.drawLine(0,0,width,height);  
           
  Font   mFont   =   new   Font("",Font.BOLD,12);  
          g.setFont(mFont);  
   
  g.drawString(validateString,2,height-2);  
  g.dispose();  
   
          ServletOutputStream   output=response.getOutputStream();  
          JPEGImageEncoder   encoder   =   JPEGCodec.createJPEGEncoder(output);  
          encoder.encode(image);  
  session.setAttribute("User.ValidateCode",validateString);  
  %>Top

11 楼zhiye(智野)回复于 2005-01-26 14:11:24 得分 0

也是在网上找到的,给你参考一下:  
   
  <%@   page   contentType="image/jpeg"   import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"   %>  
  <%!  
  Color   getRandColor(int   fc,int   bc){//给定范围获得随机颜色  
                  Random   random   =   new   Random();  
                  if(fc>255)   fc=255;  
                  if(bc>255)   bc=255;  
                  int   r=fc+random.nextInt(bc-fc);  
                  int   g=fc+random.nextInt(bc-fc);  
                  int   b=fc+random.nextInt(bc-fc);  
                  return   new   Color(r,g,b);  
          }  
  %>  
  <%  
  //设置页面不缓存  
  response.setHeader("Pragma","No-cache");  
  response.setHeader("Cache-Control","no-cache");  
  response.setDateHeader("Expires",   0);  
   
  //   在内存中创建图象  
  int   width=60,   height=20;  
  BufferedImage   image   =   new   BufferedImage(width,   height,   BufferedImage.TYPE_INT_RGB);  
   
  //   获取图形上下文  
  Graphics   g   =   image.getGraphics();  
   
  //生成随机类  
  Random   random   =   new   Random();  
   
  //   设定背景色  
  g.setColor(getRandColor(180,250));  
  g.fillRect(0,   0,   width,   height);  
   
  //设定字体  
  g.setFont(new   Font("宋体",Font.PLAIN,18));  
   
  //画边框  
  g.setColor(new   Color());  
  g.drawRect(0,0,width-1,height-1);  
   
  //   随机产生155条干扰线,使图象中的认证码不易被其它程序探测到  
  g.setColor(getRandColor(160,200));  
  for   (int   i=0;i<155;i++)  
  {  
    int   x   =   random.nextInt(width);  
    int   y   =   random.nextInt(height);  
                  int   xl   =   random.nextInt(12);  
                  int   yl   =   random.nextInt(12);  
    g.drawLine(x,y,x+xl,y+yl);  
  }  
  //   取随机产生的认证码(4位数字)  
  String   sRand="";  
  for   (int   i=0;i<4;i++){  
          String   rand=String.valueOf(random.nextInt(10));  
          sRand+=rand;  
          //   将认证码显示到图象中  
          g.setColor(new   Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));  
  //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成  
          g.drawString(rand,13*i+6,16);  
  }  
  //   将认证码存入SESSION  
  session.setAttribute("rand",sRand);  
   
  //   图象生效  
  g.dispose();  
   
  //   输出图象到页面  
  ImageIO.write(image,   "JPEG",   response.getOutputStream());  
  %>Top

相关问题

  • axis1.2RC2+ tomcat 5.0.12 + jdk 1.4.2_06 配置有问题,请指点
  • 我该用什么Linux啊?望指点
  • 本人欲投linux门下,请指点
  • 我的linux的安装问题,请大家给指点指点。多谢了!!!
  • 指点指点
  • tomcat运行jsp出错。(请各位能详细指点,谢谢。)
  • 第一次用TOMCAT,启动不了,请各位大侠指点?
  • 关于TOMCAT配置问题,哪位能指点一下!!
  • 如何将 Tomcat 4 整合在 IIS 里,请高手指点
  • tomcat+sybase连接问题!请高手指点!

关键词

  • 验证
  • 代码
  • apache
  • servlet
  • jsp
  • service
  • 验证码
  • jspservlet
  • awt
  • bufferedimage

得分解答快速导航

  • 帖主:zhiye
  • RomandAccessFile
  • eyes2near
  • singedcat
  • chshzh2000
  • meeting

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo