jsp生成验证码的代码

news2025/4/7 15:51:30

效果图:

loginProcess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <% String captcha=request.getParameter("captcha");%>
    <% String captcha_session=(String)session.getAttribute("captchaCode");%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
     if (captcha.equals(captcha_session))
    	 out.print("验证码正确~!");
     else
    	 out.print("验证码不正确~!");
%>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录页面之验证码原理</title>
    <script>
        // JavaScript code to refresh captcha every 30 seconds
        function refreshCaptcha() {
            var img = document.getElementById("captchaImg");
            img.src = "./abc?" + new Date().getTime(); // add timestamp to force reload
        }
        setInterval(refreshCaptcha, 30000); // refresh captcha every 30 seconds
    </script>
</head>
<body>
    <h1>登录页面之验证码原理</h1>
    <form action="loginProcess.jsp" method="post">
        <div>
            <label for="username">姓名:</label>
            <input type="text" id="username" name="username">
        </div>
        <div>
            <label for="password">密码:</label>
            <input type="password" id="password" name="password">
        </div>
        <div>
            <label for="captcha">验证码:</label>
            <input type="text" id="captcha" name="captcha">
            <img id="captchaImg" width=100 src="./abc" alt="Captcha Image" onclick="refreshCaptcha()">
            <button type="button" onclick="refreshCaptcha()">刷新验证码</button>
        </div>
        <div>
            <button type="submit">登录</button>
        </div>
    </form>
</body>
</html>
package src;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Base64;
import java.util.Random;
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;
@WebServlet("/abc")
public class GenerateCaptchaServlet extends HttpServlet {
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Set content type of the response
        response.setContentType("image/jpeg");

        // Create a random captcha code
        String captchaCode = generateRandomCode(6); // Generate 6-character random code
        // Store the captcha code in session for validation
        request.getSession().setAttribute("captchaCode", captchaCode);

        // Create a BufferedImage for captcha image
        int width = 200;
        int height = 50;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = image.createGraphics();

        // Draw the captcha code on the image
        g2d.setFont(new Font("Arial", Font.BOLD, 24));
        g2d.setColor(Color.RED);
        g2d.drawString(captchaCode, 50, 30);

        // Dispose the graphics
        g2d.dispose();

        // Output the image as JPEG to the client
        OutputStream out = response.getOutputStream();
        ImageIO.write(image, "jpeg", out);
        out.close();
    }

    private String generateRandomCode(int length) {
        String charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        Random random = new Random();
        StringBuilder sb = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(charset.length());
            sb.append(charset.charAt(index));
        }
        return sb.toString();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1255543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次Kotlin Visibility Modifiers引发的问题

概述 测试环境爆出ERROR告警日志java.lang.IllegalStateException: Didnt find report for specified language&#xff0c;登录测试环境ELK查到如下具体的报错堆栈日志&#xff1a; java.lang.IllegalStateException: Didnt find report for specified language at com.aba.…

基于51单片机红外遥控定时开关智能家电插座设计

**单片机设计介绍&#xff0c; 基于51单片机超声波测距汽车避障系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 设计一个基于51单片机红外遥控定时开关智能家电插座是一个涉及多个方面的复杂项目。以下是对该设计的基本介绍&…

Stm32CubeMx生成代码提示缺少“core_cm3.h“

Stm32CubeMx生成代码提示缺少"core_cm3.h" 1.原因分析 1.1问题根源 在我们使用本地解压的方法去安装固件包,但是找错了要下载的固件包&#x1f60a;.在你点击进入下载页面之后,能看到一共有两个下载链接,其中上面的是补丁包,而第二个才是我们应该要下载的固件包 当…

Portraiture2024最新Photoshop磨皮插件更新啦

Portraiture是一款由Imagenomic公司研发的Photoshop磨皮插件。该插件以其优秀的磨皮效果&#xff0c;成为了众多摄影师和化妆师使用的首选插件。Portraiture主要用于影楼、婚纱、时尚摄影等各个领域。其主要特点是能够轻松地模拟人眼的视觉感受&#xff0c;自然地修饰人像照片。…

论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools

论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools 1. 文章简介2. 文章概括3 文章重点技术3.1 Toolformer3.2 APIs 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Toolformer: Language Models Can Teach Themselves to Use Tools作者&#…

POC编写练习2

上一篇了解poc整体架构 但是上一篇的poc不具备随机性&#xff0c;如果网页回显中刚好有特定搜索的字符串或者无回显情况搜索不了 接下来处理两种情况 有回显的情况 如果没有授权的情况下&#xff0c;直接发送恶意关键字试探是不合适的做法 可以参考以下方式&#xff0c;采…

抽象工厂模式-C语言实现

说明&#xff1a; 均由 chatgpt生成&#xff0c;实例可以看出无法运行&#xff0c;仅供参考~ 抽象工厂模式&#xff1a; 代码实现&#xff1a; #include <stdio.h>// 定义抽象产品接口 typedef struct {void (*operation)(); } AbstractProductA;typedef struct {voi…

最新世界银行WDI面板数据(1960-2022年)

The World Development Indicators 是由世界银行编制和发布的全面数据集&#xff0c;旨在提供全球发展的详尽统计信息。这份数据集收录了1960-2022年间&#xff0c;世界266个国家共计1477个指标&#xff0c;涵盖经济、社会、环境、教育、公共卫生等20个领域 一、数据介绍 数据…

什么样的人不适合当老师

虽然教师职业具有诸多优点&#xff0c;如较高的社会地位、稳定的收入和良好的职业前景等&#xff0c;但是并不是所有人都适合成为一名教师。 缺乏耐心和细心的人&#xff1a;作为一名教师&#xff0c;需要具备足够的耐心和细心&#xff0c;能够应对各种学生问题。如果你很容易失…

Slf4j使用Logback时,Logback如何初始化

前言 Slf4j SLF4J&#xff0c;全称 Simple Logging Facade for Java&#xff0c;是一个用于Java编程语言的日志系统抽象层。它为多种现有日志框架&#xff08;例如Log4j、java.util.logging等&#xff09;提供了统一的接口, 但自身并不实现日志功能。 SLF4J 允许用户在部署时…

6.2 Windows驱动开发:内核枚举SSSDT表基址

在Windows内核中&#xff0c;SSSDT&#xff08;System Service Shadow Descriptor Table&#xff09;是SSDT&#xff08;System Service Descriptor Table&#xff09;的一种变种&#xff0c;其主要用途是提供Windows系统对系统服务调用的阴影拷贝。SSSDT表存储了系统调用的函数…

Namecheap怎么样,Namecheap优惠码以及注册手把手教程

Namecheap 是一家成熟的服务器域名托管公司&#xff0c;可以为合适的客户提供良好的解决方案。这些优点和缺点应该让您清楚地了解您的期望&#xff0c;以便您知道这是否是您网站的正确选择。 Namecheap怎么样&#xff1f; 已成立的公司&#xff1a; Namecheap 已经营 20 多年…

HDFS JAVA API的应用

首先把hadoop服务起来 1. (简答题) 使用HDFS 的JAVA API 进行编程&#xff1a; &#xff08;1&#xff09;获取自己HDFS集群下的所有文件和目录&#xff1b; //获取自己HDFS集群下的所有文件和目录&#xff1b;import org.apache.hadoop.conf.Configuration; import org.apa…

LeetCode Hot100 437.路径总和III

题目&#xff1a; 给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff08;只能从…

pandas 如何获取dataframe的行的数量

pandas的dataframe提供了多种方法获取其中数据的行的数量&#xff0c;本偏文章就是介绍几种获取dataframe行和列出量的方法。 为了能够详细说明如何通过代码获取dataframe的行数和列数&#xff0c;需要先创建一个dataframe如下&#xff1a; import pandas as pdtechnologies …

微机11111

一、填空题&#xff08;共15分&#xff0c;每空1分&#xff09; 1、十六进制数30A.5转换为二进制是__________&#xff0c;转换为十进制是_________ 001100001010.0101B 778.3125 十六进制转换二进制 将一位十六进制分解成四位二进制 十六进制转换十进制 3X1620X16110X1605X1…

重生之我是一名程序员 42——字符分类函数

哈喽啊大家晚上好&#xff01;今天呢给大家带来一些超简单的知识&#xff0c;大家是需要浅浅理解就行了。所以今天给大家带来的知识是——字符分类函数。 首先呢还是给大家介绍一下它们&#xff0c;字符分类函数是一种函数&#xff0c;它根据一定的规则将字符分组或分类。在编…

大模型三阶段训练

为了训练专有领域模型&#xff0c;选择LLaMA2-7B作为基座模型&#xff0c;由于LLaMA模型中文词表有限&#xff0c;因此首先进行中文词表的扩展&#xff0c;然后进行三阶段训练&#xff08;增量预训练&#xff0c;有监督微调&#xff0c;强化学习&#xff09;。 代码将全部上传…

IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)

文章目录 前言分析解决方案一&#xff1a;替换创建项目的源方案二&#xff1a;升级JDK版本 参考文献 前言 起因 想创建一个springboot的项目&#xff0c;本地安装的是1.8&#xff0c;但是在使用Spring Initializr创建项目时&#xff0c;发现版本只有17和21。 在JDK为1.8的情况下…