java验证码代码_java生成验证码,可刷新

code.jsp

pageEncoding="UTF-8"%>

< http-equiv="Content-Type" content="text/html; charset=UTF-8">

验证码

CodeAction.java

package struts.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.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.commons.lang.RandomStringUtils;

/**

* MyEclipse Struts Creation date: 08-2-2008

*

* XDoclet definition:

*

* @struts.action validate="true"

*/

public class CodeAction 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);//这个s的值就是页面验证码上显示的值

// 保存入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);

}

}

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2008-08-13 21:35

浏览 7514

评论

2 楼

guiza

2009-02-21

多谢,解决啦

1 楼

guiza

2009-02-21

点击后没刷新是怎么回事

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值