Jsp生成页面验证码的方法[附代码]

让我来详细讲解一下“Jsp生成页面验证码的方法”。

让我来详细讲解一下“Jsp生成页面验证码的方法[附代码]”。

1. 简介

验证码(Captcha)是一种常见的图形验证码,用于防止恶意攻击和自动化机器人下载。在 JSP 网站设计的过程中,JavaWeb 的技术基本上都使用了验证码,验证方式很多,确保了 JSP 网站的安全性和性能。

2. 生成验证码示例

下面是一个简单的 JSP 页面,展示了如何使用 Java 代码生成验证码:

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*,java.awt.*, java.awt.image.*, javax.imageio.*, java.io.*" %>
 <%
    int width = 60;// 定义图片的宽度
    int height = 40;// 定义图片的高度
    BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 创建BufferedImage对象
    Graphics g = image.getGraphics();// 获取BufferedImage的Graphics
    g.setColor(getRandColor(200, 250));// 设定图像背景色(因为是做背景,所以背景色设定了)
    g.fillRect(0, 0, width, height);// 填充背景色
    g.setFont(new Font("Times New Roman", Font.PLAIN, 28));// 设置字体(字体大小应根据图片的高度来定)
    g.setColor(getRandColor(100, 160));// 设定字体颜色
    Random random = new Random();// 生成随机类
    String sRand = "";// 存放结果
    for (int i = 0; i < 4; i++) {
        String rand = String.valueOf(random.nextInt(10));// rand是0-9的随机数
        sRand += rand;// 将随机数拼接成一定长度的字符串
        g.drawString(rand, 13 * i + 6, 28);// 将随机数字画在图片上(i*13,因为字体大小是13)
    }
    session.setAttribute("sRand", sRand);// 将结果存入会话 Session
    g.dispose();// 释放图形资源
    ImageIO.write(image, "JPEG", response.getOutputStream());// 输出图像到页面
%>
<%!
   public Color getRandColor(int fc, int bc) {//给定范围获得随机颜色
        Random random = new Random();
        if (fc > 255)
            fc = 255;
        if (bc > 255)
            bc = 255;
        int r = fc + random.nextInt(bc - fc);//随机生成颜色分量值
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);
        return new Color(r, g, b); //返回具有指定红色、绿色和蓝色值的不透明的 sRGB 颜色
    }
%>

该示例生成了一个长宽均为 60 像素的验证码图片,并将验证码字符串结果储存在 Session 中。图片中的四个数字是使用 Java 的 Random 类生成的,通过 String 的拼接将它们连接成一个长度为4的字符串。

3. 页面展示示例

下面是一个 HTML 表单,展示了如何在 JSP 页面中显示验证码图片,并允许用户输入验证码:

<form action="login.jsp" method="post">
    <label for="code">请输入验证码:</label>
    <input type="text" id="code" name="code" required="required" />
    <img src="code.jsp" id="codeImg" /><!-- 生成验证码图片的Servlet -->
    <a href="javascript:reloadCode();">看不清,换一张</a>
    <input type="submit" value="提交" />
</form>
<script>
function reloadCode() {
    document.getElementById("codeImg").src = "code.jsp?" + Date.now();
}
</script>

在该示例中,我们使用了一个 JavaScript 函数 reloadCode(),用于动态刷新验证码图片。当用户点击 “看不清,换一张”链接时,就会调用该函数,它会刷新页面中的验证码。

4. 总结

这篇文章教你如何在 JSP 页面中使用 Java 代码生成和展示验证码。我们使用了 BufferedImage 类来创建图像,在创建图像之前,我们使用了 Random 类生成了一个四位数的随机验证码,最后将其储存在 Session 中。我们还展示了如何在 HTML 中展示验证码图片,以及在用户提交表单时验证用户输入的验证码。

本文标题为:Jsp生成页面验证码的方法[附代码]

基础教程推荐