JAVA Servlet实现验证码

package com.tenlee.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * Servlet implementation class IdentityServlet
 */
public class IdentityServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public static final char[] CHARS = {‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘,
		‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘, ‘H‘, ‘k‘, ‘J‘, ‘L‘, ‘M‘, ‘N‘};
	public static Random random = new Random();

	public static String getRandomString() {
		StringBuffer buffer = new StringBuffer();
		for (int i = 0; i < 6; i++) {
			buffer.append(CHARS[random.nextInt(CHARS.length)]);
		}
		return buffer.toString();
	}

	public static Color getRandomColor() { //获取随机颜色
		return new Color(random.nextInt(255), random.nextInt(255),
				random.nextInt(255));
	}

	public static Color getReverseColor(Color c) { //返回某颜色反色
		return new Color(255- c.getRed(), 255 - c.getGreen(),
				255 - c.getBlue());
	}

    public IdentityServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("image/jpeg"); //设置输出类型

		String randomString = getRandomString();//随机字符串
		request.getSession(true).setAttribute("randomString", randomString);

		int width = 100;
		int height = 30; //图片宽度和高度

		Color color = getRandomColor(); //获取随机颜色,用于背景色
		Color reverse = getReverseColor(color);// 反色,用于钱前景色

		BufferedImage bi = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB); //常见一个彩色图片
		Graphics2D g = bi.createGraphics(); //获取绘制对象
		g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16)); //设置字体
		g.setColor(color);//设置字体颜色
		g.fillRect(0, 0, width, height);//绘制背景
		g.setColor(reverse);//设置颜色
		g.drawString(randomString, 18, 20);
		for(int i = 0, n = random.nextInt(100); i < n; i++) {//画最多100个噪点
			g.drawRect(random.nextInt(width), random.nextInt(height),
					1, 1);//随机噪音点
		}
		ServletOutputStream out = response.getOutputStream(); //转换成jpeg格式
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);//编码器
		encoder.encode(bi); //对图片进行编码
		out.flush();//清除缓存,即输出到客户端

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

}

  

时间: 2024-12-26 19:33:07

JAVA Servlet实现验证码的相关文章

java linux ImageIO 验证码在一段时间以后出不来 问题总结

最近在测试上布署的项目经常性的出现验证码过了一段时间以后出不来的情况,耐心找了一下,最后在上级的指导下发现了报错,其实说真的,我自己也找到了这个报错,只是没有当一回事.因为这个验证码的东西不是我写的,我也不知道这个报错是不是和它有关系. 错误如下: 2014-05-21 10:46:17,826 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Could not complete request org.springfram

转: 通过Servlet生成验证码图片

孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(九)—— 通过Servlet生成验证码图片 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.response.study; 2 import java.awt.Color; 3 import java.awt.Font; 4 import java.awt.Graphics; 5

servlet生成验证码验证的实现

servlet中的方法实现代码: import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.servlet.ServletException; imp

Java Servlet API中文说明文档

Java Servlet API中文说明文档译者前言:       近来在整理有关Servlet资料时发现,在网上竟然找不到一份中文的Java Servlet API的说明文档,而在有一本有关JSP的书后面附的Java Servlet API说明竟然不全,而这份文档的2.1a版在1998年的11月份就已定稿.所以我决定翻译一份中文的文档(其中一些与技术关系不大的部分已被略去),有兴趣的读者可以从http: //java.sun.com/products/servlet/2.1/servletsp

Java中使用验证码和二维码

资源 需要:   jelly-core-1.7.0.GA.jar 网站:   http://lychie.github.io/products.html 将下载下来的 jelly-core-1.7.0.GA.jar 丢到项目里,不需要编写任何 java 代码,只需要在项目的 web.xml 文件中配置相关信息即可. 验证码 基于 Servlet 实现,在 web.xml 中配置即可使用.并支持自定义样式,常用的配置项见下表: 属性名称 属性描述 默认值 可选值 border 边框 no no,y

java自动生成验证码

代码结构: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="

Servlet编程-验证码示例

Servlet编程基本思想我上一篇文章已经说过,这里就不多说了,给大家分享一个用Servlet实现验证码验证的示例. 首先我们需要一个Servlet类:ImageServlet.java来产生验证码并将验证码存放到Session中 接下来,我们需要配置web.xml文件添加Servlet 好,现在我们写一个登录页面,就可以实现验证码的显示了login.jsp 最后,我们只需要验证Session中的验证码和用户提交的验证码是否一致,再建一个login_check.jsp来验证验证码. 现在,一个完

Servlet返回验证码

Web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="htt

JSP+Servlet实现验证码生成

主要利用JSP+Servlet实现验证码生成 利用JQuery的ajax技术实现异步更换图片地址 BufferedImage实现验证码图片的生成 Servlet代码: package Register; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOEx