Servlet(七)生成验证码

1、ImageCode.java

package com.hunhun.utils;

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

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ImageCode
 */
@WebServlet("/ImageCode")
public class ImageCode extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ImageCode() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//禁止浏览器缓存随机图片
		response.setDateHeader("Expires", -1);
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Pragma", "no-cache");
		//通知浏览器以图片方式显示数据
		response.setHeader("Content-Type", "image/png");
		//在内存中创建图片
		BufferedImage image = new BufferedImage(75,20,BufferedImage.TYPE_INT_RGB);
		//获取图片上下文
		Graphics g = image.getGraphics();
		//设置背景色
		  g.setColor(Color.black);
		  g.fillRect(0, 0, 75, 20);
		  //生成随机类
		  Random r = new Random();
		  //生成4位验证码
		  String srcChars ="abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		  String number = "";
		  for(int i=0;i<4;i++){
		   number +=srcChars.charAt(r.nextInt(srcChars.length()));
		  }
		  //设置字体、颜色
		  g.setFont(new Font("Arial",Font.BOLD|Font.ITALIC,16));//new Font(name, style, size)
		  g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
		// 随机产生15条干扰线,使图象中的认证码不易被其它程序探测到
	        for (int i = 0; i < 15; i++) {
	            int x = r.nextInt(75);
	            int y = r.nextInt(20);
	            int xl = r.nextInt(12);
	            int yl = r.nextInt(12);
	            g.drawLine(x, y, x + xl, y + yl);
	        }
	        g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
		  g.drawString(number,10,15);
		  //保存session
		  request.getSession().setAttribute("code",number);
		  OutputStream os = response.getOutputStream();
		  ImageIO.write(image, "png", os);

		//  JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
		//  encoder.encode(image);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.doGet(request, response);
	}

}

2.login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="/LittleMall/LoginCServlet" method="post">
<input type="text" name="code" value=""><img alt="code" src="/LittleMall/ImageCode"><br/>
<input type="submit" value="登录">
</form>
</body>
</html>

图片样式:

时间: 2025-01-02 17:51:18

Servlet(七)生成验证码的相关文章

servlet中生成验证码

在servlet中生成验证码 package login; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.util.Random; import javax.servlet.Ser

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 import java.awt.Graphics2D; 6 import java.awt.image.Buff

转: 通过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

JSP+servlet生成验证码并验证

生成验证码的基本过程是: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="java.awt.*,java.awt.image.BufferedImage,javax.imageio.ImageIO" %> <% response.setHeader("Cache-C

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 import java.awt.Graphics2D;  6 import java.awt.imag

通过Servlet生成验证码图片

首先声明:本文转载自:@孤傲苍狼 https://home.cnblogs.com/u/xdp-gacl/ 一.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 im

通过Servlet生成验证码图片(转)

原文地址:http://www.cnblogs.com/xdp-gacl/p/3798190.html 一.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 impo

javaWeb学习总结(3)- 通过Servlet生成验证码图片(2)

一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 package gacl.response.study; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; i

第二百七十节,Tornado框架-生成验证码图片,以及验证码结合Session验证

Tornado框架-生成验证码图片,以及验证码结合Session验证 第一.生成验证码图片  生成验证码图片需要两个必须模块 1.python自带的random(随机模块) 2.Pillow()图像处理模块里的PIL(图像库),为第三方模块,需要安装 封装验证码图片生成插件py 在封装文件里先导入random(随机模块),和Pillow()图像处理模块里的所需py文件 封装验证码图片生成插件功能,调用后返回验证码图片,和字符串类型验证码,两个返回值 注意:验证码需要一个字体文件,这个字体文件必须