package cn.z.servlet;
import java.awt.Color;import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
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 java.awt.Font;
public class GenerateCheckCodeServlet extends HttpServlet {
// 生成的验证码的宽与高
int WIDTH = 80, HEIGHT = 30;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setDateHeader("Expires", 0);
response.setHeader("Cache-control", "no-cache");
response.setHeader("Pragma", "no-cache");
ServletOutputStream out = response.getOutputStream();
// 得到随机的验证码
char[] rands = generateCheckCode();
BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
// 先画背景
drawBackground(g);
// 再画验证码
drawCheckCode(g, rands);
g.dispose();
// 设置响应头为image/jpeg
response.setContentType("image/jpeg");
// 把验证码也放到session里,以便和用户手工输入的进行对比
request.getSession().setAttribute("check-code", new String(rands));
System.out.println(new String(rands));
// 输出图片
ImageIO.write(image, "JPEG", out);
//一定要的
out.clear();
out = pageContext.pushBody();
out.flush();
out.close();
}
// 生成4位随机验证码的函数
private char[] generateCheckCode() {
// 这个是用ASCII的方法,
char[] rands = new char[4];
int rand = -1;
for (int i = 0; i < rands.length; i++) {
while (rand < 48 || (rand > 57 && rand < 65)
|| (rand > 90 && rand < 97) || rand > 122) {
rand = (int) (Math.random() * 127);
// System.out.print(rand + "/t");
}
rands[i] = (char) rand;
}
return rands;
}
// 第二种生成验证码的方法
private char[] generateCheckCode2() {
// 这个是随机取出字符串中的字符.
String chars = "abcdefghijklmnopqrstuvwxyz123456789";
char[] rands = new char[4];
int rand = -1;
for (int i = 0; i < rands.length; i++) {
rand = (int) (Math.random() * chars.length());
rands[i] = chars.charAt(rand);
}
return rands;
}
private void drawCheckCode(Graphics g, char[] rands) {
// 在不同的高度画验证码的每一个字符
g.setColor(Color.BLACK);
g.setFont(new Font(null, Font.ITALIC | Font.BOLD, 18));
g.drawString("" + rands[0], 11, 25);
g.drawString("" + rands[1], 26, 15);
g.drawString("" + rands[2], 41, 23);
g.drawString("" + rands[3], 56, 18);
}
private void drawBackground(Graphics g) {
// 画背景
g.setColor(new Color(0xdcdcdc));
g.fillRect(0, 0, WIDTH, HEIGHT);
for (int i = 0; i < 500; i++) {
// 随机生成500个位置随机,颜色随机的干扰点,并画在背景上
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, 2, 0);
}
}
}
分享到:
相关推荐
在本主题“利用jsp生成图片验证码”中,我们将探讨如何在JavaServer Pages (JSP)上下文中创建一个简单的图片验证码,而无需使用Servlet。首先,我们要明白JSP是Java Web开发中的视图层技术,它允许我们在HTML页面中...
JSP生成图片验证码.txtJSP生成图片验证码.txtJSP生成图片验证码.txtJSP生成图片验证码.txtJSP生成图片验证码.txt
总结来说,使用JSP生成图片验证码涉及到以下几个关键点:生成随机字符串、存储验证码、绘制并输出图片以及设置HTTP响应类型。这种方法简单易用,但要注意,对于高级的自动化攻击,可能需要更复杂的验证码解决方案,...
JSP生成图片验证码步骤 #### 步骤1:生成随机字符串 首先,我们需要创建一个随机字符串。这通常通过Java的`Random`类和`StringBuilder`类实现,设定一个字符串长度,然后从预定义的字符集中随机选择字符。 ```...
JSP 生成随机验证码图片(经典老代码)
### JSP页面验证码生成图片详解 #### 一、概述 在网站登录或注册过程中,为了防止恶意登录或机器人操作,通常会使用验证码机制。本文档详细介绍了一种利用JSP技术生成验证码图片的方法。该方法通过Java后端动态...
在本主题中,我们将详细探讨如何使用Java Servlet(jsp)来生成图片验证码。 首先,我们需要理解验证码的基本原理。验证码通常包含一串随机生成的字母和数字,显示在一张图片上,用户需要输入看到的文字以证明他们...
在这个场景中,我们使用Servlet来生成图片验证码,这是一种防止恶意自动化程序(如机器人)进行非法操作的安全机制。验证码通常是一串随机生成的字符,以图像形式显示,用户需要在输入框中正确输入才能完成验证。 ...
在Web开发中,使用JSP(JavaServer Pages)来生成验证码图片是一种常见的方法。下面我们将详细讨论如何在JSP中实现验证码的生成。 首先,我们需要理解验证码的基本原理。验证码通常包含一串随机的字母和数字,有时...
JSP中彩色验证码 注册验证码 中文验证码 图片验证码的生成
本主题聚焦于"jsp四位验证码图片生成",这是一个利用JSP(JavaServer Pages)技术来创建动态生成的4位数字验证码图片的过程。我们将探讨JSP验证码的原理、实现方式以及与JavaScript验证码的对比。 验证码的核心在于...
4. **保存图像到HTTP响应**:将生成的验证码图像写入到HTTP响应的输出流中,以图片格式(如JPEG或PNG)提供给客户端浏览器。 5. **存储验证码值**:同时,需要将生成的验证码字符串存储在服务器的会话(session)中...
JSP页面可以将生成的验证码图片发送到客户端,并存储验证码值在服务器端的session中,以便后续验证。 - **使用`<jsp:include>`标签**:将生成验证码的Java代码包含到JSP页面中。 - **`<img>`标签**:生成的验证码...
首先,生成图片验证码的核心是创建并绘制一个包含随机文本的图片。`HelloImage.java`展示了这个过程的基本步骤: 1. **创建BufferedImage对象**:使用`BufferedImage`类的构造函数创建一个新的图片对象,指定图片的...
### JSP中利用Servlet生成验证码图片 在Web应用开发中,验证码被广泛应用于用户登录、表单提交等场景,以防止自动化的恶意攻击。本文将详细介绍如何在Java Server Pages (JSP) 和 Servlet 技术的基础上,实现一个...
总的来说,JSP生成的数字验证码结合了Java的强大功能和网页的交互性,提供了一种简单而有效的用户验证方法。在开发过程中,确保验证码的安全性和用户体验是至关重要的。通过对验证码的不断刷新和复杂化设计,我们...
在"使用Servlet生成图片验证码"这个主题中,我们首先会创建一个Servlet来生成随机的字母和数字组合,通常包含4到6位。这可以通过Java的Random类和Character类来实现。验证码生成后,将其保存在服务器的内存中,以便...
生成四种样式的图片验证码 部署在web容器内,将web.xml,及index.jsp放入指定位置,启动后,即可看到效果。
本教程将深入讲解如何使用JSP来生成彩色的验证码程序。 一、验证码的基本原理 验证码的主要目的是通过要求用户输入图片上显示的一串随机字符,来验证用户是人而非机器。这些字符通常是扭曲的,以便增加机器识别的...