package com.zhangjun.imageCode;
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;
/**
* <p>Description:登陆验证码</p>
* @author 张军
* @version 1.0
* @date 2012-10-02
*/
@SuppressWarnings("serial")
public class VerifyCodeServlet extends HttpServlet {
/**
* 验证码图片的宽度。
*/
private int width = 77;
/**
* 验证码图片的高度。
*/
private int height = 22;
/**
* 验证码字符个数
*/
private int codeCount = 4;
/**
* xx
*/
private int xx = 0;
/**
* 字体高度
*/
private int fontHeight;
/**
* codeY
*/
private int codeY;
/**
* codeSequence
*/
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z',
'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) {
e.printStackTrace();
}
xx = width / (codeCount + 1);
fontHeight = height - 2;
codeY = height - 4;
}
/**
* @param req
* @param resp
* @throws ServletException
* @throws java.io.IOException
*/
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
// 定义图像buffer
BufferedImage buffImg = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D gd = buffImg.createGraphics();
// 创建一个随机数生成器类
Random random = new Random();
// 将图像填充为白色
gd.setColor(Color.WHITE);
gd.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定。
Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
// 设置字体。
gd.setFont(font);
// 画边框。
gd.setColor(Color.BLACK);
gd.drawRect(0, 0, width - 1, height - 1);
// 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
gd.setColor(Color.BLACK);
for (int i = 0; i <1; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
gd.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(36)]);
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
// 用随机产生的颜色将验证码绘制到图像中。
gd.setColor(new Color(red, green, blue));
gd.drawString(strRand, (i + 1) * xx, codeY);
// 将产生的四个随机数组合在一起。
randomCode.append(strRand);
}
// 将四位数字的验证码保存到Session中。
HttpSession session = req.getSession();
session.setAttribute("validateCode", 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();
}
@SuppressWarnings("unused")
private static Color getRandomColor() {
Random ran = new Random();
Color color = new Color(ran.nextInt(255),ran.nextInt(255),ran.nextInt(255));
return color;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Servlet和Struts2两种方法生成及校验验证吗
共46个文件
jar:8个
js:6个
class:5个
5星 · 超过95%的资源 需积分: 4 52 下载量 110 浏览量
2012-10-03
12:09:07
上传
评论
收藏 3.32MB ZIP 举报
温馨提示
Servlet和Struts2两种方法生成及校验验证吗,包含所有源码,下载就可以用。
资源推荐
资源详情
资源评论
收起资源包目录
验证码完整源码.zip (46个子文件)
struts2Code
.settings
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.jsdt.ui.superType.container 49B
.jsdtscope 500B
org.eclipse.jdt.core.prefs 629B
src
com
zhangjun
imageCode
ResultAction.java 779B
Struts2Utils.java 2KB
VerifyCodeAction.java 4KB
struts.xml 746B
.project 1KB
WebRoot
jquery-1.4.4.min.js 77KB
META-INF
MANIFEST.MF 36B
WEB-INF
web.xml 527B
classes
com
zhangjun
imageCode
VerifyCodeAction.class 5KB
ResultAction.class 1KB
Struts2Utils.class 2KB
struts.xml 746B
lib
freemarker-2.3.15.jar 859KB
commons-logging-1.0.4.jar 37KB
commons-io-2.0.1.jar 156KB
struts2-json-plugin-2.1.8.jar 50KB
ognl-2.7.3.jar 234KB
struts2-core-2.1.8.jar 738KB
xwork-core-2.1.6.jar 1.49MB
commons-fileupload-1.2.1.jar 56KB
changeImage.js 744B
code.jsp 1KB
login.js 319B
.mymetadata 306B
.classpath 991B
.myeclipse
veryCodeServlet
.settings
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.jsdt.ui.superType.container 49B
.jsdtscope 500B
org.eclipse.jdt.core.prefs 629B
src
com
zhangjun
imageCode
VerifyCodeServlet.java 5KB
ResultServlet.java 1KB
.project 1KB
WebRoot
jquery-1.4.4.min.js 77KB
META-INF
MANIFEST.MF 36B
WEB-INF
web.xml 871B
classes
com
zhangjun
imageCode
ResultServlet.class 2KB
VerifyCodeServlet.class 5KB
lib
changeImage.js 744B
code.jsp 1KB
login.js 836B
.mymetadata 311B
.classpath 493B
.myeclipse
共 46 条
- 1
资源评论
- 2hiwj2014-07-01这个资源是不错的,我觉得对我struts的学习有很多帮助!
- maliangyn2014-10-24非常不错,可以运行。是我想要的,学习了
- lixinguo77585212014-01-03非常不错,可以运行。是我想要的,学习了
- forGongyuan2014-11-24不错不错,很实用
阿军同學
- 粉丝: 34
- 资源: 51
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功