CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

JSP验证码的问题(验证码不能正常显示)

楼主vvzy(yoyo)2005-08-02 13:32:40 在 Java / Web 开发 提问

各位高手可能对下面的这段很熟悉,这就是在网上很很流行的彩色验证码,不过我下载下来后不知道什么原因,一直都无法正常显示,显示的是一个框和一个红色的叉。  
  不知道是哪里有问题,请高手不吝赐教!  
   
  <%@   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(200,250));  
  g.fillRect(0,   0,   width,   height);  
   
  //设定字体  
  g.setFont(new   Font("Times   New   Roman",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());  
   
   
  %> 问题点数:30、回复次数:10Top

1 楼nf_happy()回复于 2005-08-02 13:40:57 得分 5

这根你的服务器有关,看到.jsp结尾的文件,就按"html/text"方式输出了  
        换成serlvet输出这个图片就可以了Top

2 楼pxjianke(一无所有-光明唧)回复于 2005-08-02 14:21:54 得分 5

应该是和你的服务器有关,你把它做成一个servlet试一试。。。我的就是按照servlet生成6位字符的。。Top

3 楼songsong2008()回复于 2005-08-02 14:49:31 得分 2

没事啊,我的可以显示Top

4 楼joneyonly()回复于 2005-08-02 15:22:33 得分 3

markTop

5 楼yys79(shart-shoot)回复于 2005-08-02 15:23:53 得分 3

一定是生成图片时候出生么错误了,看看错误信息就知道了Top

6 楼King6860()回复于 2005-08-02 16:03:04 得分 3

nod。Top

7 楼guyungong(唉!一声叹息)回复于 2005-08-02 17:25:53 得分 3

我试了可以显示出来的,可就是加在别的jsp页面里,只有左上角有这一个彩色验证码,别的内容都没了Top

8 楼vvzy(yoyo)回复于 2005-08-03 07:57:24 得分 0

不能显示吧,我这里怎么不行呢?这个代码不是用servlet的。  
  请看全部代码说明:  
   
  JSP彩色验证码    
     
  <%@   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(200,250));    
  g.fillRect(0,   0,   width,   height);    
   
  //设定字体    
  g.setFont(new   Font("Times   New   Roman",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());    
  %>    
   
   
   
  使用验证码图片的文件a.jsp    
   
  <%@   page   contentType="text/html;charset=gb2312"   %>    
  <!DOCTYPE   HTML   PUBLIC   "-//W3C//DTD   HTML   4.01   Transitional//EN">    
  <html>    
  <head>    
  <title>认证码输入页面</title>    
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">    
  <META   HTTP-EQUIV="Pragma"   CONTENT="no-cache">    
  <META   HTTP-EQUIV="Cache-Control"   CONTENT="no-cache">    
  <META   HTTP-EQUIV="Expires"   CONTENT="0">    
  </head>    
  <body>    
  <form   method=post   action="check.jsp">    
  <table>    
  <tr>    
  <td   align=left>系统产生的认证码:</td>    
  <td><img   border=0   src="image.jsp"></td>    
  </tr>    
  <tr>    
  <td   align=left>输入上面的认证码:</td>    
  <td><input   type=text   name=rand   maxlength=4   value=""></td>    
  </tr>    
  <tr>    
  <td   colspan=2   align=center><input   type=submit   value="提交检测"></td>    
  </tr>    
  </form>    
  </body>    
  </html>    
   
   
   
  验证的页面check.jsp    
   
  <%@   page   contentType="text/html;   charset=gb2312"   language="java"   import="java.sql.*"   errorPage=""   %>    
  <html>    
  <head>    
  <title>认证码验证页面</title>    
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">    
  <META   HTTP-EQUIV="Pragma"   CONTENT="no-cache">    
  <META   HTTP-EQUIV="Cache-Control"   CONTENT="no-cache">    
  <META   HTTP-EQUIV="Expires"   CONTENT="0">    
  </head>    
   
  <body>    
  <%    
  String   rand   =   (String)session.getAttribute("rand");    
  String   input   =   request.getParameter("rand");    
  %>    
  系统产生的认证码为:   <%=   rand   %><br>    
  您输入的认证码为:   <%=   input   %><br>    
  <br>    
  <%    
  if   (rand.equals(input))   {    
  %>    
  <font   color=green>输入相同,认证成功!</font>    
  <%    
  }   else   {    
  %>    
  <font   color=red>输入不同,认证失败!</font>    
  <%    
  }    
  %>    
  </body>    
  </html>  
  Top

9 楼iamzhanglin(生活的压力与生命的尊严哪一个重要?)回复于 2005-08-03 08:40:02 得分 3

upTop

10 楼yupingping(平平)回复于 2005-08-03 10:37:10 得分 3

upTop

相关问题

  • jsp验证码显示问题
  • JSP彩色验证码在weblogic下显示得了么?
  • jsp验证码问题
  • 显示不出验证码
  • linux+tomcat+jdk1.4.2环境下运行显示验证码的jsp文件错误!请高手指点!
  • 验证码不能显示的问题
  • Xp无法显示验证码问题
  • 关于验证码图片的显示
  • 50分:要个jsp 生成验证码,提交后怎么验证
  • jsp验证码问题,大家帮忙看看。

关键词

  • 验证
  • 验证码

得分解答快速导航

  • 帖主:vvzy
  • nf_happy
  • pxjianke
  • songsong2008
  • joneyonly
  • yys79
  • King6860
  • guyungong
  • iamzhanglin
  • yupingping

相关链接

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

广告也精彩

反馈

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