小毅的验证码

Posted on 2008-09-10 16:42 H2O 阅读(172) 评论(0)  编辑  收藏 所属分类: java
checkCode.java
package com.yz.checkcode;

import java.io.IOException;    
import java.io.PrintWriter;

import javax.servlet.ServletException;    
import javax.servlet.ServletOutputStream;    
   
import javax.servlet.http.HttpServlet;    
import javax.servlet.http.HttpServletRequest;    
import javax.servlet.http.HttpServletResponse;    
import javax.servlet.http.HttpSession;    
   
import com.sun.image.codec.jpeg.JPEGCodec;    
import com.sun.image.codec.jpeg.JPEGImageEncoder;    
   
import java.awt.*;    
import java.awt.image.*;    
import java.util.*;    
   
public class checkCode    
    extends HttpServlet {    
   
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws   
       ServletException, IOException {    
     response.reset();    
     response.setContentType("image/jpeg");    
     response.setHeader("Pragma","No-cache");
     response.setHeader("Cache-Control","no-cache");
     response.setHeader("Expires",   "Tues,   01   Jan   1980   00:00:00   GMT");   
    
   
//在内存中创建图象    
    int width = 58, height = 18;    
     BufferedImage image = new BufferedImage(width, height,    
                                             BufferedImage.TYPE_INT_RGB);    
   
//获取图形上下文    
     Graphics g = image.getGraphics();    
   
//生成随机类    
     Random random = new Random();    
   
//设定背景色    
     g.setColor(new Color(201 + random.nextInt(50), 201 + random.nextInt(50),    
                         201 + random.nextInt(50)));    
     g.fillRect(0, 0, width, height);    
   
//设定字体    
     g.setFont(new Font("Times new Roman", Font.PLAIN, 18));    
   
//画边框    
g.setColor(new Color(255,140,0));    
g.drawRect(0,0,width-1,height-1);    
   
//随机产生155条干扰线,使图象中的认证码不易被其它程序探测到    
     g.setColor(new Color(160 + random.nextInt(41), 160 + random.nextInt(41),    
                         160 + random.nextInt(41)));    
    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);    
     }    
   
//取随机产生的认证码
    String src 
= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ0123456789"
;
     String sRand 
= ""
;    
    for (int i 
= 0; 
i < 4; i++) {    
        int position
=random.nextInt(src.length());
        
String radomChar
=src.charAt(position)+"";
       
sRand +
= radomChar;    
   
//将认证码显示到图象中    
       g.setColor(new Color(20 + random.nextInt(111), 20 + random.nextInt(111),    
                           20 + random.nextInt(111)));    
   
//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成    
       g.drawString(  radomChar, 13 * i + 6, 16);    
     }    
    
//图象生效    
     g.dispose(); 
     HttpSession session 
= request.getSession(true);  
     
     
//将认证码存入SESSION    
      session.setAttribute("checkCode", sRand);
   
//输出图象到页面     
     ServletOutputStream out 
= response.getOutputStream();    
     
JPEGImageEncoder encoder 
= JPEGCodec.createJPEGEncoder(out);    
     
encoder.encode(image);    
     System.out.println("验证码:\t"+sRand);
     out.println(sRand);
     out.flush();
     out.close();
   }    
}    

getKey.java
package com.yz.checkcode;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class getKey extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();    
        String key=request.getSession().getAttribute("checkCode").toString();
        out.println(key);
        out.flush();
        out.close();
    }
}

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 0, comments - 21, trackbacks - 0, articles - 101

Copyright © H2O