Struts中Action产生的图形验证码

来源:互联网 发布:radius端口号 编辑:程序博客网 时间:2024/04/29 03:25

ACTION代码:

 

*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package hospital.lb.action;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* MyEclipse Struts
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class ValidatecodeAction extends Action {
/*
  * Generated Methods
  */
/**
  * Method execute
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  */
  public ActionForward execute(ActionMapping mapping, ActionForm form,  
        HttpServletRequest request, HttpServletResponse response) {  
      try {  
        int width = 50;  
        int height = 18;  
        // 取得一个4位随机字母数字字符串  
        String s = RandomStringUtils.random(4, true, true);  
          
        // 保存入session,用于与用户的输入进行比较.  
        // 注意比较完之后清除session.  
        HttpSession session = request.getSession(true);  
        session.setAttribute("validateCode", s);  
    
        response.setContentType("images/jpeg");  
        response.setHeader("Pragma", "No-cache");  
        response.setHeader("Cache-Control", "no-cache");  
        response.setDateHeader("Expires", 0);  
    
        ServletOutputStream out = response.getOutputStream();  
        BufferedImage image = new BufferedImage(width, height,  
            BufferedImage.TYPE_INT_RGB);  
        Graphics g = image.getGraphics();  
        // 设定背景色  
        g.setColor(getRandColor(200, 250));  
        g.fillRect(0, 0, width, height);  
    
        // 设定字体  
        Font mFont = new Font("Times New Roman", Font.BOLD, 18);// 设置字体  
        g.setFont(mFont);  
    
        // 画边框  
        // g.setColor(Color.BLACK);  
        // g.drawRect(0, 0, width - 1, height - 1);  
    
        // 随机产生干扰线,使图象中的认证码不易被其它程序探测到  
        g.setColor(getRandColor(160, 200));  
        // 生成随机类  
        Random random = new Random();  
        for (int i = 0; i < 155; i++) {  
          int x2 = random.nextInt(width);  
          int y2 = random.nextInt(height);  
          int x3 = random.nextInt(12);  
          int y3 = random.nextInt(12);  
          g.drawLine(x2, y2, x2 + x3, y2 + y3);  
        }  
    
        // 将认证码显示到图象中  
        g.setColor(new Color(20 + random.nextInt(110), 20 + random  
            .nextInt(110), 20 + random.nextInt(110)));  
    
        g.drawString(s, 2, 16);  
    
        // 图象生效  
        g.dispose();  
        // 输出图象到页面  
        ImageIO.write((BufferedImage) image, "JPEG", out);  
        out.close();  
      } catch (Exception e) {  
        e.printStackTrace();  
      }  
      return null;  
    }  
    
    private 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);  
  }  
}

 

JSP代码:

 

<img id="aimage" src="pubValidatecode.do?" style="cursor:pointer;" />&nbsp;<a href="#" onclick="changeImage()" style="font-size:12px;">看不清?换一张</a>

 

 

原创粉丝点击