Servlet实现生成验证码图片

话不多说,直接开始

(我用的是原始的创建Servlet去做一下这个小功能)
首先当然是在web.xml中注册一个Servlet
在这里插入图片描述
因为下面要创建随机几个数字,所以写了个静态方法生成,后面直接插入图片就行

package com.sc.dao;

import java.util.Random;

public class Yzmdao {
    //随机产生数字的方法
    public static String RanNum(){
        Random random = new Random();
        int n = random.nextInt(99999);
        //把数字转换为字符串
        String num = "";
        try{
            num = String.valueOf(n);
        }catch (NumberFormatException e){
            e.printStackTrace();
        }
        //判断一下有多少位数,不满足就追加
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < 5-num.length(); i++) {
            stringBuffer.append("1");
        }
        return stringBuffer.append(num).toString();
    }
}

然后创建个Servlet:
代码如下,步骤见代码:

import com.sc.dao.Yzm;

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

@WebServlet(name = "yzm",urlPatterns = "/yzm.dd")
public class YzmServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //先在内存中生成一张图片,使用BufferedImage
        BufferedImage bufferedImage = new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB);
        //获取这张图片,创建好
        Graphics graphics = bufferedImage.getGraphics();
        //设置图片背景颜色
        graphics.fillRect(0,0,80,30);
        //设置图片的颜色
        graphics.setColor(Color.orange);

        graphics.setFont(new Font(null,Font.BOLD,20));

        //在图片上写几个数字(使用了dao层写的一个静态方法),并设置坐标
        graphics.drawString(Yzmdao.RanNum(),10,25);

        //图片画好,现在传到浏览器
        resp.setHeader("ContentType","jpeg");

        //使用java给我们提供的图片流,传图片
        ImageIO.write(bufferedImage,"jpg",resp.getOutputStream());

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
}

注意:使用@WebServlet(name = “yzm”,urlPatterns = “/yzm.dd”)注解需要导入两个servlet依赖或jar包

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    <!--引入Servlet结束-->
    <!--引入jsp相关开始-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>

然后我为了直观,创建了个html页面:
在这里插入图片描述
启动tomcat,点击查看按钮,就可以出来生成好的图片
在这里插入图片描述
总结:
一、我们经常用到注册登录有提示要输入验证码,而在Servlet中可以通过HttpServletResponse去写到浏览器。
二、生成图片,就要用到Java的 BufferedImage的类,再用Graphics 去生成背景图片并画出想要的风格(Graphics 有很多画图方法,具体百度)
三、最后通过Java的ImageIO这个图片流,将生成好的图片传入浏览器。

四、最后可以根据你生成的已经数字的字符串与用户写入的对比,相等就返回true,否则,返回false。如果要生成中文的字符,就找中文映射表即可!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值