java web验证码

java
package com;

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.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ValidateCode extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static final int I_WIDTH = 60; // 图片宽度
    private static final int I_HEIGHT = 18; // 图片高度
    private static Font VALIDATECODE_FONT = new Font("Times New Roman", 0, 18); // 字体
    private static String codeName = null; // 保存到session里面的名字

    public ValidateCode() {
        super();
    }

    public void destroy() {
        super.destroy();
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setHeader("Pragma", "No-cache"); // 设置不缓存
        response.setHeader("Cache-Control", "no-cache"); // 设置缓存控制器,不缓存
        response.setDateHeader("Expires", 0L); // 设置不过期。
        BufferedImage bImage = new BufferedImage(I_WIDTH, I_HEIGHT, 1);// 生成一张“画布”
        Graphics g = bImage.getGraphics(); // 获取一支“画笔”
        g.setColor(Color.WHITE); // 白色
        g.fillRect(0, 0, I_WIDTH, I_HEIGHT); // 画一个矩形,fillRect填充整个矩形
        g.setColor(Color.BLUE); // 蓝色
        g.drawRect(0, 0, I_WIDTH - 1, I_HEIGHT - 1);// 画边框,drawRect画一个空心矩形
        g.setColor(Color.BLACK);// 黑色
        g.setFont(VALIDATECODE_FONT); // 设置字体
        String codeNumber = new String(""
                + (10000 + new Random().nextInt(89999))); // 生成随机验证码
        request.getSession().setAttribute(codeName, codeNumber); // 将验证码保存到session里面
        g.drawString(codeNumber, 7, 15); // 将验证码画到图片上
        for (int i = 0; i < 20; i++) { // 给图片加上20个躁点
            int x = new Random().nextInt(I_WIDTH);
            int y = new Random().nextInt(I_HEIGHT);
            g.drawLine(x, y, x, y);
        }
        g.dispose(); // 画好了将笔收起来
        ImageIO.write(bImage, "JPEG", response.getOutputStream());

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        codeName = config.getInitParameter("code"); // 获取web.xml里code的值
    }

}
web.xml
<servlet>
    <servlet-name>ValidateCode</servlet-name>
    <servlet-class>com.ValidateCode</servlet-class>
    <init-param>
        <param-name>code</param-name>
        <param-value>code</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>ValidateCode</servlet-name>
    <url-pattern>/code</url-pattern>
  </servlet-mapping>
html
<img src="code"/>

转载于:https://www.cnblogs.com/-gap/archive/2012/06/11/2544942.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值