Java Web 网页验证码生成

1.在java文件夹中创建一个CaptcheController的java类。
在这里插入图片描述
2.在CaptcheController中重写service方法,再创建generatePic的BufferedImage类。在这里插入图片描述
在这里插入图片描述
3.代码部分。

@WebServlet("/captche")
public class CaptcheControlle extends HttpServlet{
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletOutputStream sos= resp.getOutputStream();
        ImageIO.write(generatePic(200,200),"JPEG",sos);
        sos.flush();;
        sos.close();
    }
    private BufferedImage generatePic(int width,int height){
        BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics g=image.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0,130,width,height);
        g.setColor(Color.BLACK);
        g.setFont(new Font("宋体",Font.BOLD,25));
        Random rnd =new Random();
        //验证码字符
        String nr = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@!#$%&";
       // g.drawString("1234",10,20);
        int x=50,y=50;
        //随机生成五位验证码
        for (int i=0;i<5;i++){
            int b = rnd.nextInt(nr.length());
            char ch = nr.charAt(b);
            Color color = new Color(rnd.nextInt(255), rnd.nextInt(255), rnd.nextInt(255));
            g.setColor(color);
            g.drawString(""+ch,x,y);
            int xz= rnd.nextInt(20);
            x+=xz+8;
            int yz= rnd.nextInt(10);
            y+=yz+8;
        }
        //加入干扰线
        int a1,a2,a3,a4;
        for(int i = 0;i<4;i++){
             Color color1 = new Color(rnd.nextInt(255), rnd.nextInt(255), rnd.nextInt(255));
             g.setColor(color1);
             a1 = rnd.nextInt(x);
             a2 = rnd.nextInt(x);
             a3 = rnd.nextInt(y);
             a4 = rnd.nextInt(y);
             g.drawLine(a1,a2,a3,a4);
        }
        //加入白色噪点
        for(int i=0,n=rnd.nextInt(100);i<n;i++) {
            g.setColor(Color.white);
            g.fillRect(rnd.nextInt(x), rnd.nextInt(100), 2, 2);
        }
        g.dispose();
       // Random rnd=new Random();
        rnd.nextInt(100);
        return  image;
    }
}

4.头文件部分

package cn.edu.mju.project13zjl.controller;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

5.完成代码后,我访问http://localhost:2900/Project13/captche测试(2900端口,Project13是自定义的Context path,而captche是自定义映射)。完成。在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值