java随机生成验证码

util类:

package util;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

public class ImageCreater {
    //画内容
    public static void drow(Graphics graphics,String code){
        Random random = new Random();
        int width =150, height =40;
        //把验证码中可以出现的内容定义为一个字符串
        //定义一个字符串接收随机生成的验证码
        //随机生成验证码
        graphics.setColor(Color.blue);
        //通过画笔画线条
        for (int j = 0; j < 155; j++) {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            int xl = random.nextInt(12);
            int yl = random.nextInt(12);
            graphics.drawLine(x, y, x + xl, y + yl);
        }
        //设置画笔颜色
        graphics.setColor(Color.red);
        //设置画在画布的哪一个位置
        graphics.drawString(code,40,30);
    }

    public static BufferedImage createImage(String code){
        BufferedImage image = new BufferedImage(150,40,BufferedImage.TYPE_INT_RGB);
        //获取一个画笔
        Graphics graphics = image.getGraphics();
        //设置画笔颜色
        graphics.setColor(Color.lightGray);
        graphics.fillRect(0,0,150,40);
        //设置字体大小,风格,样式
        graphics.setFont(new Font("TimesRoman", Font.PLAIN, 30));
        //调用上面的方法
        drow(graphics,code);
        return image;
    }
}

生成验证码的servlet

package userservlet;

import util.ImageCreater;

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

@WebServlet(name = "CreatImageServlet11-6",urlPatterns = {"/img"})
public class CreatImageServlet116 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //指定数据传输类型
        response.setContentType("image/jpeg");
        //调用静态方法绘图
        String code="";
        String content="0123456789abcdefg";
        for(int i=0;i<4;i++){
            code+=content.charAt((int)(Math.random()*17));
        }
        BufferedImage image=ImageCreater.createImage(code);
        //获取上下文对象并设置属性值,键值对方式
        this.getServletContext().setAttribute("code",code);

        //通过字节流形式传递图像
        ImageIO.write(image,"jpeg",response.getOutputStream());
    }

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

//验证   验证码是否正确的servlet

package userservlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "SurecodeServlet",urlPatterns = {"/suredcode"})
public class SurecodeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
           String takecode=request.getParameter("surecode");
           System.out.println(takecode);
           //通过getattribute方式()参数是键,获取值,特别注意的是:上下文对象的作用于不仅仅是在自己的servlet中
        String code = this.getServletContext().getAttribute("code").toString();
        System.out.println(code);
        if(!takecode.equals(code)){
            response.getWriter().write("<script>alert('验证码错误');</script>");
        }else{
            response.sendRedirect("./html/index.html");
        }
        //request.getRequestDispatcher("/img").forward(request,response);

    }

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

    }
}

//通过html页面刷新验证码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<link href="../bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
<script src="http://code.jquery.com/jquery.js"></script>
<script src="../bootstrap/js/bootstrap.min.js"></script>
<body>
<form action="/suredcode" method="post">
    <div class="control-group">
        <label class="control-label" for="inputEmail">用户名</label>
        <div class="controls">
            <input type="text" id="inputEmail" name="username" placeholder="username">
        </div>
    </div>
    <div class="control-group">
        <label class="control-label" for="inputPassword">密码</label>
        <div class="controls">
            <input type="pwd" id="inputPassword" name="pwd" placeholder="pwd">
        </div>
    </div>
<!--验证码-->
    <div class="control-group">
        <label class="control-label" for="inputPassword">验证码</label>
        <input type="text" id="inputcode" name="surecode" placeholder="验证码">
        <div class="controls">
            <img src="/img">
        </div>
    </div>
    <div class="control-group">
        <div class="controls">
            <input type="submit" class="btn" value="登录">
        </div>
    </div>
</form>
<button id="change">看不清,换一张</button>
<script>
    $(function () {
        var i=0;
        $("#change").on("click",function () {
            i++;
            $("img").attr('src',"../img?"+i);
        })
    })
</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/W_violet/article/details/83792431