package com.tnt.web.servlet;
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.*;
import java.io.*;
import javax.servlet.http.*;
@SuppressWarnings("serial")
public class RandomPicServlet extends HttpServlet {
// 验证码图片的宽度。
private int width = 60;
// 验证码图片的高度。
private int height = 20;
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
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("Times New Roman", Font.PLAIN, 18);
// 设置字体。
g.setFont(font);
// 画边框。
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
// 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
g.setColor(Color.pink);
for (int i = 0; i < 160; 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;
// 随机产生4位数字的验证码。
for (int i = 0; i < 4; i++) {
// 得到随机产生的验证码数字。
// String strRand=String.valueOf(random.nextInt(10));
// 随机字母
String strRand = String.valueOf((char) (random.nextInt(26) + 65));
// 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
red = random.nextInt(110);
green = random.nextInt(50);
blue = random.nextInt(50);
// 用随机产生的颜色将验证码绘制到图像中。
g.setColor(new Color(red, green, blue));
g.drawString(strRand, 13 * i + 6, 16);
// 将产生的四个随机数组合在一起。
randomCode.append(strRand);
}
// 将四位数字的验证码保存到Session中。
HttpSession session = req.getSession();
session.setAttribute("randomCode", randomCode.toString());
// 禁止图像缓存。
res.setHeader("Pragma", "no-cache");
res.setHeader("Cache-Control", "no-cache");
res.setDateHeader("Expires", 0);
res.setContentType("image/jpeg");
// 将图像输出到Servlet输出流中。
ServletOutputStream sos = res.getOutputStream();
ImageIO.write(buffImg, "jpeg", sos);
sos.close();
}
}
分享到:
相关推荐
servlet生成验证码图片
使用Servlet生成验证码图片。 一个生成验证码图片的工具类。
Servlet下实现的中英文验证码图片,供大家学习交流之用,附带一张JSP测试页面.
通过Servlet生成图片验证码,提供给jsp页面展示,并验证。
jsp servlet 验证码 jsp servlet 验证码 jsp servlet 验证码
使用servlet实现图片验证码,当然,你也可以根据需要放在你的框架下
登陆验证+servlet动态生成图片验证码
java web笔记之servlet生成验证码java web笔记之servlet生成验证码
在servlet中动态生成验证码图片,可被JSP或servlet引用,每次刷新都会改变验证码
图形验证码(servlet实现)
java 实现验证码(servlet+jsp),详情请看:
JSP验证码登录程序 Servlet生成验证码 登录验证验证码
使用jsp/java-ee编程,页面提交后处理的servlet产生页面验证码。表单页面产生验证码。只有servlet文件。
简单的验证码程序,基于javaee的两个程序
java Servlet实现验证码 Servlet实现验证码 Servlet实现验证码
Java servlet 自动生成 图片验证码 生成 Java源码
生成验证码,本验证码为Servlet形式,可以凭开发经验,例如在Struts中,将其写在Action的方法中(void类型)从而转为Struts形式,调用时只需使img标签的src属性= 1.(servletname) 2.(methodname_actionname.action)
JSP下MVC架构的验证码登陆,验证码单独封装形成,存于session中实现验证
Java产生简单算术验证码图片,此为Servlet需要配置web.xml,配置方法如下: <servlet> <servlet-name>authimg</servlet-name> <servlet-class>img.AuthImg</servlet-class> </servlet> <servlet-mapping> ...