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(
00, width, height);

        
//画边框
        g.setColor(Color.black);
        g.drawRect(
00, 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(01);
        g.drawString(str, 
814);
        str 
= strEnsure.substring(12);
        g.drawString(str, 
2015);
        str 
= strEnsure.substring(23);
        g.drawString(str, 
3518);
        str 
= strEnsure.substring(34);
        g.drawString(str, 
4515);

        
// 释放图形上下文
        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 >
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值