package com.servet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
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;
public class yanzhenma extends HttpServlet {
// 验证码图片的宽度。
private int width = 80;
// 验证码图片的高度。
private int height = 30;
// 验证码字符个数
private int codeCount = 4;
private int x = 0;
// 字体高度
private int fontHeight;
private int codeY;
char[] codeSequence = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
/**
* 初始化验证图片属性
*/
public void init() throws ServletException {
// 从web.xml中获取初始信息
// 宽度
String strWidth = this.getInitParameter("width");
// 高度
String strHeight = this.getInitParameter("height");
// 字符个数
String strCodeCount = this.getInitParameter("codeCount");
// 将配置的信息转换成数值
try {
if (strWidth != null && strWidth.length() != 0) {
width = Integer.parseInt(strWidth);
}
if (strHeight != null && strHeight.length() != 0) {
height = Integer.parseInt(strHeight);
}
if (strCodeCount != null && strCodeCount.length() != 0) {
codeCount = Integer.parseInt(strCodeCount);
}
} catch (NumberFormatException e) {
}
x = width / (codeCount + 1);
fontHeight = height - 2;
codeY = height - 4;
}
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
// 定义图像buffer
BufferedImage buffImg = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
// 创建一个随机数生成器类
Random random = new Random();
// 将图像填充为白色
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定。
Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
// 设置字体。
g.setFont(font);
// 画边框。
g.setColor(Color.black);
g.drawRect(0, 0, width - 1, height - 1);
// 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
g.setColor(Color.BLACK);
for (int i = 0; i < 50; 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);
}
// randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
StringBuffer randomCode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 随机产生codeCount数字的验证码。
for (int i = 0; i < codeCount; i++) {
// 得到随机产生的验证码数字。
String strRand = String.valueOf(codeSequence[random.nextInt(10)]);
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
/*
* red = random.nextInt(255); System.out.println(red); green =
* random.nextInt(255); blue = random.nextInt(255);
*/
// 用随机产生的颜色将验证码绘制到图像中。
g.setColor(new Color(96, 96, 96));
g.drawString(strRand, (i + 1) * x, codeY);
// 将产生的四个随机数组合在一起。
randomCode.append(strRand);
}
// 将四位数字的验证码保存到Session中。
HttpSession session = req.getSession();
session.setAttribute("validateCode", randomCode.toString());
System.out.println(randomCode.toString());
// 禁止图像缓存。
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
// 将图像输出到Servlet输出流中。
ServletOutputStream sos = resp.getOutputStream();
ImageIO.write(buffImg, "jpeg", sos);
sos.close();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
图片验证码生成实例带有横杠干扰
共25个文件
tld:5个
xml:3个
js:2个
3星 · 超过75%的资源 需积分: 10 24 下载量 3 浏览量
2010-06-20
14:20:35
上传
评论
收藏 48KB RAR 举报
温馨提示
JQuery调用后台的java类产生图片验证码。 很实用,下载后可以直接运行的实例! 有什么好的建议可以Q我623791070 谢谢
资源推荐
资源详情
资源评论
收起资源包目录
xiangmu.rar (25个子文件)
xiangmu
src
com
servet
yanzhenma.java 4KB
Result.java 2KB
.classpath 560B
.mystrutsdata 255B
.mymetadata 294B
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.jsdt.ui.superType.name 6B
.jsdtscope 500B
org.eclipse.jdt.core.prefs 334B
.myeclipse
.project 1KB
WebRoot
META-INF
MANIFEST.MF 36B
index.jsp 811B
pages
css
verifyCode.js 748B
jquery-1.2.6.js 98KB
WEB-INF
classes
com
servet
yanzhenma.class 4KB
Result.class 2KB
struts-config.xml 674B
struts-tiles.tld 8KB
validator-rules.xml 13KB
.struts-config.mex 2KB
lib
struts-bean.tld 9KB
struts-html.tld 72KB
struts-logic.tld 14KB
struts-nested.tld 70KB
web.xml 2KB
共 25 条
- 1
资源评论
- yy25351222014-02-27多谢分享,可以学习一下~
- 羽繁星2013-04-16还可以吧,可以看看.
Mike_Yi
- 粉丝: 25
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功