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

来源:互联网 发布:淘宝工具箱 编辑:程序博客网 时间:2024/05/03 16:44

首先是要生成验证码:

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>
原创粉丝点击