jsp验证码的生成

ValidateCodeServlet.java

package com.hpe.servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
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;

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

    public ValidateCodeServlet() {
        super();

    }

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

        doPost(request, response);
    }

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

        // 响应头信息
        response.setHeader("Pragma", "No-Cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expries", 0);

        // 随机数生成类
        Random random = new Random();

        // 定义验证码的位数
        int size = 5;

        // 定义变量保存生成的验证码
        String vCode = "";
        char c;
        // 产生验证码
        for (int i = 0; i < size; i++) {
            // 产生一个26以内的随机整数
            int number = random.nextInt(26);
            // 如果生成的是偶数,则随机生成一个数字
            if (number % 2 == 0) {
                c = (char) (‘0‘ + (char) ((int) (Math.random() * 10)));
                // 如果生成的是奇数,则随机生成一个字母
            } else {
                c = (char) ((char) ((int) (Math.random() * 26)) + ‘A‘);
            }
            vCode = vCode + c;
        }

        // 保存生成的5位验证码
        request.getSession().setAttribute("vCode", vCode);

        // 验证码图片的生成
        // 定义图片的宽度和高度
        int width = (int) Math.ceil(size * 20);
        int height = 50;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        // 获取图片的上下文
        Graphics gr = image.getGraphics();
        // 设定图片背景颜色
        gr.setColor(Color.WHITE);
        gr.fillRect(0, 0, width, height);
        // 设定图片边框
        gr.setColor(Color.GRAY);
        gr.drawRect(0, 0, width - 1, height - 1);
        // 画十条干扰线
        for (int i = 0; i < 5; i++) {
            int x1 = random.nextInt(width);
            int y1 = random.nextInt(height);
            int x2 = random.nextInt(width);
            int y2 = random.nextInt(height);
            gr.setColor(randomColor());
            gr.drawLine(x1, y1, x2, y2);
        }
        // 设置字体,画验证码
        gr.setColor(randomColor());
        gr.setFont(randomFont());
        gr.drawString(vCode, 10, 22);
        // 图像生效
        gr.dispose();
        // 输出到页面
        ImageIO.write(image, "JPEG", response.getOutputStream());

    }

    // 生成随机的颜色
    private Color randomColor() {
        int red = r.nextInt(150);
        int green = r.nextInt(150);
        int blue = r.nextInt(150);
        return new Color(red, green, blue);
    }

    private String[] fontNames = { "宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312" };
    private Random r = new Random();

    // 生成随机的字体
    private Font randomFont() {
        int index = r.nextInt(fontNames.length);
        String fontName = fontNames[index];// 生成随机的字体名称
        int style = r.nextInt(4);
        int size = r.nextInt(3) + 24; // 生成随机字号, 24 ~ 28
        return new Font(fontName, style, size);
    }
}

直接运行Java生成的结果:

在网页上显示的效果:

时间: 2024-12-22 13:20:28

jsp验证码的生成的相关文章

在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码

只需几步就可以生成动态随机的验证码,最终效果如下图: 一 前台显示页面login.jsp 其中验证码显示的是一张图片,链接指向的是生成验证码的servlet,同时点击图片后触发changeImg()这个js函数,使其动态生成一个新的验证码,这个函数中的参数t=Math.random()并不会参与验证码的生成,它的作用仅仅只是表示每次提交的并不是同一个请求,需要单独处理,完整的login.jsp代码如下: <%@ page language="java" contentType=&

轻松学会网页中验证码的生成(JAVA)

验证码生成的基本流程 1.验证码的生成,我们能够看到是用Graphics对象画出来的.对象我们必须要获得Graphics对象 1-1,Graphics对象的获取,要通过BufferedImage获得 <span style="font-size:18px;">int width=100;//确定框框的大小 int height=40; BufferedImage bfi =new BufferedImage(width, height, BufferedImage.TYPE

struts2中验证码的生成和使用

第一步生产字符串: package com.yancode.demo; import java.util.Arrays; /* * 一步一步来,要生成验证码图片,首先要有验证码,然后才能在画在图片上.为了能够灵活控制验证码, * 特别编写了SecurityCode类,它向外提供随机字符串.并且可以控制字符串的长度和难度. * SecurityCode类中提供的验证码分三个难度,易(全数字).中(数字+小写英文).难(数字+大小写英文). * 难度使用枚举SecurityCodeLevle表示,避

JSP验证码页面-Serverlet

使用 Get方法,通过设置session和request设置页面状态 <body> <div> <form method=get> <tr> <td align=left>请输入认证码:<input type=text name=rand maxlength=4 value=""></td> <td><img border=0 src="checkcode" onc

JSP验证码简单例子

原文:JSP验证码简单例子 源代码下载地址:http://www.zuidaima.com/share/1550463705320448.htm 几年前用servlet写的一个简单验证码功能.还有许多要完善的,但是验证码已经完善了. 包含登陆界面,可以自己修改下验证码代码把验证码的代码写进后台,生成图片后再输出到页面.也可以把验证码生成更复杂些. 登陆成功  验证失败

汉字验证码的生成与使用

首先新建一个生成随机汉字验证码的servet DrawImage.class package xwcms.net.service; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Ran

JSP验证码

在JSP页面上写随机的4位数验证码 实例化BufferedImage类 得到Graphics画笔给图片填充背景色 然后写上随机数和100个干扰点 用scropt实现刷新验证码 疑问:视频和书上的DrawString 方法不能用 也不知道怎么回事 把String转成了char调用了另外一个drawChars的方法才对 <%@ page language="java" contentType="text/html; charset=GB2312" import =

ImageUtil(验证码数据生成工具类)

登录界面时,常常会使用到验证码图片生成,程序如下: package util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.

Android开发中验证码的生成

近期在做电商金融类的项目,验证码的生成方法不可缺少.先学习了一种.经过測试好用.从别处学习的代码,稍修改了一下可选择是否支持识别大写和小写.直接上代码. import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.wid