JSP页面的验证码生成及调用方法

首先是要生成验证码:

package  XX.XX

import  java.io. * ;
import  java.util. * ;
import  javax.imageio. * ;
import  java.awt. * ;
import  java.awt.image. * ;

public   class  ImageEnsure  ... {
    
public  ImageEnsure()  ... {
    }


    
private   char  mapTable[]  =   ... { ' 0 ' ' 1 ' ' 2 ' ' 3 ' ,
                              
' 4 ' ' 5 ' ' 6 ' ' 7 ' ' 8 ' ' 9 ' }
;

    
public  String getEnsure( int  width,  int  height, OutputStream os)  ... {

        
if  (width  <=   0 )
            width 
=   60 ;
        
if  (height  <=   0 )
            height 
=   20 ;

        BufferedImage image 
=   new  BufferedImage(width, height,
                                                BufferedImage.TYPE_INT_RGB);

        
//  获取图形上下文
        Graphics g  =  image.getGraphics();

        
//  设定背景色
        g.setColor( new  Color( 0xDCCCCC ));
        g.fillRect(
0 0 , width, height);

        
// 画边框
        g.setColor(Color.black);
        g.drawRect(
0 0 , width  -   1 , height  -   1 );

        
//  取随机产生的认证码
        String strEnsure  =   "" ;

        
//  4代表4位验证码
         for  ( int  i  =   0 ; i  <   4 ++ i)  ... {
            strEnsure 
+=  mapTable[( int ) (mapTable.length  *  Math.random())];
        }


        
//  将认证码显示到图象中
        g.setColor(Color.red);
        g.setFont(
new  Font( " Atlantic Inline " , Font.PLAIN,  14 ));

        
// 画的具体坐标
        String str  =  strEnsure.substring( 0 1 );
        g.drawString(str, 
8 14 );
        str 
=  strEnsure.substring( 1 2 );
        g.drawString(str, 
20 15 );
        str 
=  strEnsure.substring( 2 3 );
        g.drawString(str, 
35 18 );
        str 
=  strEnsure.substring( 3 4 );
        g.drawString(str, 
45 15 );

        
//  释放图形上下文
        g.dispose();

        
try   ... {
            
//  输出图象到页面
            ImageIO.write(image,  " JPEG " , os);
        }
  catch  (IOException e)  ... {
            
return   "" ;
        }


        
return  strEnsure;
    }

}

然后是调用,可以在页面调用,也可以在servlet中调用,我推荐是单独的一个servlet调用,在页面调用可能会出现异常,但是不影响使用。在servlet中写上如下的代码:

         // 禁用缓存,每次访问此页面,都重新生成
        response.setHeader( " Pragma " , " No-cache " ); 
        response.setHeader(
" Cache-Control " , " no-cache " ); 
        response.setDateHeader(
" Expires " 0 ); 

        
// 生成验证码的实例对象
        ImageEnsure ie  =   new  ImageEnsure();

        
// 调用里面的方法,返回的是生成的验证码中的字符串
        String str  =  ie.getEnsure( 0 , 0 ,response.getOutputStream());

        
// 获得session,并把字符串保存在session中,为后面的对比做基础
        HttpSession session  =  request.getSession();
        session.setAttribute(
" strEnsure " , str);

然后把servlet内嵌到具体的网页中,具体嵌入就是用DreamWeaver在需要插入验证码的地方插入图像,地址就指向此servlet即可。
输入验证码并提交后,在新的页面中可以按如下方法判断:

 

   < body >
  
<%
  
// session的默认存在时间为20分钟,如果20分钟不输入验证码,session将会消失,因此要做下判断
   if (session.getAttribute( " strEnsure " ) == null )
  
... {
      
%>
      
< jsp:forward page = " ImageErr.jsp " />
      
<%
  }
else ... {
  
// 获取在session中保存的生成验证码的数字
  String ensure  =  (String)session.getAttribute( " strEnsure " );

  
// 获取在页面的表单中输入的验证码
  String code  =  request.getParameter( " txtimage " );

  
// 判断输入的验证码,跟保存的生成的验证码是否一样
   if (ensure.equals(code)  &&  code  !=   null )
  
... {
    
%>
    
< jsp:forward page = " searchword?method=add " />
    
<%
    }
else ... {
      
%>
      
< jsp:forward page = " ImageErr.jsp " />
      
<%
    }

  }

      
%>
 
</ body >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值