package imagecounter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;
public class CheckNumberServlet extends HttpServlet {
// private static final String CONTENT_TYPE = "text/html; charset=GBK";
private static int WIDTH = 93;
private static int HEIGHT = 25;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//response.setContentType(CONTENT_TYPE);
response.setContentType("image/jpeg");
//设置浏览器不要缓存此图片
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "on-cache");
response.setDateHeader("Expires", 0);
//获取流对象向客户端写入图片
ServletOutputStream sos = response.getOutputStream();
//在内存中创建一副图片,宽60像素,高20像素,图片背景色为黑色
BufferedImage bufferedImage = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);
//从图片中取得图形上下文,g相当于是一只画笔
Graphics g = bufferedImage.getGraphics();
g.setFont(new Font(null, Font.ITALIC, 18));
String value = this.getCheckCode().toUpperCase();
//将验证码放入session
request.getSession().setAttribute("checkNumber", value);
//绘制背景,加上干扰点
this.drawBackgound(g);
//绘制验证码
this.drawRands(g, value);
//结束图像绘制过程,完成图像
g.dispose();
//将内存中的图像编码成jpeg格式的图片写入到流对象中
javax.imageio.ImageIO.write(bufferedImage, "JPEG", sos);
sos.close();
}
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}
/**
* 取得验证码
* @return String
*/
private String getCheckCode() {
//定义验证码的字符表
String chars = "0123456789abcdefghijklmnopqrstuvwxyz";
StringBuffer sb = new StringBuffer();
Random r = new Random();
for (int i = 0; i < 6; i++) {
int rand = r.nextInt(36);
sb.append(chars.charAt(rand));
}
return sb.toString();
}
/**
* 将产生的验证码绘制到图片上
* @param g Graphics
* @param value String
*/
private void drawRands(Graphics g, String value) {
//画笔为黑色
g.setColor(Color.BLACK);
//字体加粗斜体
g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18));
//在不同的高度上输出验证码的每个字符
Random r = new Random();
g.drawString("" + value.charAt(0), 1, 17);
g.drawString("" + value.charAt(1), 16, 15);
g.drawString("" + value.charAt(2), 31, 18);
g.drawString("" + value.charAt(3), 46, 16);
g.drawString("" + value.charAt(4), 61, 15);
g.drawString("" + value.charAt(5), 76, 18);
}
private void drawBackgound(Graphics g) {
//画背景,0x(数字零)表示16进制,DCDCDC表示颜色
g.setColor(new Color(0xDCDCDC));
//给图片填充颜色
g.fillRect(0, 0, WIDTH, HEIGHT);
//随机产生120个干扰点
for (int i = 0; i < 120; i++) {
int x = (int) (Math.random() * WIDTH);
int y = (int) (Math.random() * HEIGHT);
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
g.setColor(new Color(red, green, blue));
//绘制干扰点
g.drawOval(x, y, 1, 0);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
随机验证码源代码详解
共62个文件
class:6个
java:5个
dep2:2个
需积分: 11 13 下载量 10 浏览量
2009-01-05
13:54:13
上传
评论
收藏 67KB RAR 举报
温馨提示
随机获取验证码 public class CheckNumberServlet extends HttpServlet { // private static final String CONTENT_TYPE = "text/html; charset=GBK"; private static int WIDTH = 93; private static int HEIGHT = 25; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //response.setContentType(CONTENT_TYPE); response.setContentType("image/jpeg"); //设置浏览器不要缓存此图片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "on-cache"); response.setDateHeader("Expires", 0); //获取流对象向客户端写入图片 ServletOutputStream sos = response.getOutputStream();…………………………………………………………………………………………
资源推荐
资源详情
资源评论
收起资源包目录
.rar (62个子文件)
随机验证码
checknumber
Tomcat
work
webroot
org
apache
jsp
jsp1_jsp.java 3KB
checkLogin_jsp.class 3KB
jsp1_jsp.class 4KB
checkLogin_jsp.java 2KB
tldCache.ser 44B
webapps
imageCounter.jpx.local~ 2KB
Servlet.library 219B
imageCounter.jpx.local 2KB
bak
imagecounter
CheckNumberServlet.java~3~ 4KB
CountServlet.java~83~ 4KB
CountServlet.java~86~ 4KB
CountServlet.java~82~ 4KB
CountServlet.java~85~ 4KB
CountServlet.java~88~ 4KB
CountServlet.java~89~ 4KB
CountServlet.java~84~ 4KB
CountServlet.java~90~ 4KB
CountServlet.java~81~ 4KB
CheckNumberServlet.java~2~ 4KB
CheckNumberServlet.java~1~ 4KB
CountServlet.java~87~ 4KB
webroot
jsp1.jsp~16~ 574B
checkLogin.jsp~2~ 209B
WEB-INF
web.xml~21~ 1KB
web.xml~19~ 586B
web.xml~20~ 601B
web.xml~16~ 1KB
web.xml~18~ 1KB
web.xml~24~ 603B
web.xml~25~ 1KB
web.xml~17~ 586B
web.xml~22~ 603B
web.xml~23~ 1KB
checkLogin.jsp~1~ 340B
jsp1.jsp~14~ 535B
checkLogin.jsp~8~ 528B
checkLogin.jsp~7~ 524B
jsp1.jsp~13~ 519B
checkLogin.jsp~6~ 462B
jsp1.jsp~22~ 878B
jsp1.jsp~21~ 872B
checkLogin.jsp~3~ 260B
checkLogin.jsp~5~ 461B
checkLogin.jsp~4~ 398B
jsp1.jsp~18~ 638B
jsp1.jsp~17~ 589B
jsp1.jsp~19~ 671B
jsp1.jsp~15~ 573B
jsp1.jsp~20~ 872B
src
imagecounter
CheckNumberServlet.java 4KB
imageCounter.jpx 8KB
webroot
checkLogin.jsp 544B
WEB-INF
web.xml 603B
classes
imagecounter
CheckNumberServlet.class 4KB
jsp1.jsp 894B
classes
Generated Source
.jsp
webroot
org
apache
jsp
jsp1_jsp.java 3KB
checkLogin_jsp.java 2KB
jsp cache
webroot
org
apache
jsp
checkLogin_jsp.class 3KB
jsp1_jsp.class 3KB
package cache
org.apache.jsp.dep2 5KB
imagecounter
CheckNumberServlet.class 4KB
package cache
imagecounter.dep2 3KB
共 62 条
- 1
资源评论
jiangzhengquan
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功