JSP + Servlet实现生成登录验证码示例

下面为你讲解如何使用JSP和Servlet实现生成登录验证码。

前置知识

在进行本文的代码实现前,你需要先了解以下技术:

  • Java 编程语言
  • Servlet 技术
  • JSP 技术
  • HTTP 协议

准备工作

在开始代码实现前,请确保你的开发环境中已经正确配置了JSP和Servlet开发环境。这里以Eclipse + Tomcat服务器为例,其他开发环境的配置方法可以自行搜索。

实现步骤

以下是实现JSP和Servlet生成登录验证码的步骤:

第一步:创建Servlet

首先在Eclipse中创建一个Servlet,使用doGet()方法生成验证码,并在session中存储验证码用于后续验证。

@WebServlet("/ImageServlet")
public class ImageServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置页面不缓存
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        // 定义验证码的宽度和高度
        int width = 60, height = 20;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        // 生成随机数
        char[] rands = generateCheckCode();
        // 画出验证码
        drawCheckCode(g, rands, width, height);
        // 结束绘制验证码
        g.dispose();
        // 将验证码存入session中
        HttpSession session = request.getSession();
        session.setAttribute("checkCode", new String(rands));
        // 输出验证码到客户端
        ImageIO.write(image, "JPEG", response.getOutputStream());
    }

    // 生成随机验证码
    private char[] generateCheckCode() {
        String chars = "0123456789abcdefghijklmnopqrstuvwxyz";
        char[] rands = new char[4];
        for (int i = 0; i < rands.length; i++) {
            int rand = (int) (Math.random() * chars.length());
            rands[i] = chars.charAt(rand);
        }
        return rands;
    }

    // 绘制验证码
    private void drawCheckCode(Graphics g, char[] rands, int width, int height) {
        for (int i = 0; i < rands.length; i++) {
            g.setColor(Color.BLACK);
            g.drawString(rands[i] + "", (i * 15) + 3, 18);
        }
    }
}

第二步:创建 JSP 页面

接下来创建登录页面,当用户访问登录页面时,生成验证码并将其显示在页面上。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Login Page</title>
    </head>
    <body>
        <form action="login" method="post">
            <label for="username">Username:</label>
            <input type="text" name="username" id="username" required /><br />
            <label for="password">Password:</label>
            <input type="password" name="password" id="password" required /><br />
            <label for="checkCode">Check Code:</label>
            <input type="text" name="checkCode" id="checkCode" required />
            <!-- 显示验证码 -->
            <img src="./ImageServlet" onclick="this.src='./ImageServlet?' + Math.random();" />
            <br />
            <input type="submit" value="Login" />
        </form>
    </body>
</html>

在上面的代码中,我们使用了<img>标签来显示验证码,并且使用onclick事件触发刷新验证码。

第三步:实现登录验证

最后,在Servlet中对用户输入的验证码进行校验,并返回验证结果。

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取用户输入的用户名、密码和验证码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String checkCode = request.getParameter("checkCode");
        // 获取session中存储的验证码
        HttpSession session = request.getSession();
        String sessionCheckCode = (String) session.getAttribute("checkCode");
        // 验证用户名、密码和验证码是否正确
        if ("admin".equals(username) && "123456".equals(password) && checkCode.equals(sessionCheckCode)) {
            response.sendRedirect("success.html"); // 登录成功,跳转到 success.html 页面
        } else {
            response.sendRedirect("failed.html"); // 登录失败,跳转到 failed.html 页面
        }
    }
}

示例说明1

在上面的JSP代码中,我们使用Math.random()方法来实现点击验证码之后的刷新效果。

<img src="./ImageServlet" onclick="this.src='./ImageServlet?' + Math.random();" />

当用户点击验证码时,页面中的<img>标签的src属性将被更新,从而触发重新加载验证码图片。

示例说明2

在上面的Servlet代码中,我们使用response.sendRedirect()方法来实现页面的跳转。

if ("admin".equals(username) && "123456".equals(password) && checkCode.equals(sessionCheckCode)) {
    response.sendRedirect("success.html"); // 登录成功,跳转到 success.html 页面
} else {
    response.sendRedirect("failed.html"); // 登录失败,跳转到 failed.html 页面
}

根据用户输入的用户名、密码和验证码验证结果,Servlet将跳转到不同的页面,即success.htmlfailed.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP + Servlet实现生成登录验证码示例 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • JDK15正式发布(新增功能预览)

    JDK15正式发布(新增功能预览)攻略 简介 JDK15是Java开发工具包的最新版本,在2020年9月15日正式发布。它引入了许多新的功能和改进,帮助Java开发人员更轻松、更高效地开发应用程序。本文将为您提供JDK15版本的新功能的详细说明和使用示例。 新增功能 1. 文本块 Java 15中引入了文本块,这允许您在代码中以更自然的方式编写多行字符串。文…

    Java 2023年5月19日
    00
  • 常见JavaWeb安全问题和解决方案

    常见JavaWeb安全问题和解决方案 引言 JavaWeb应用的普及使其突显出越来越多的安全威胁。在开发JavaWeb应用时,我们需要考虑如何确保安全才能更好地保护用户个人信息和应用程序数据。本攻略为您提供了一些常见的JavaWeb安全问题和解决方案,希望对您有所帮助。 常见JavaWeb安全问题 SQL注入 SQL注入是一种常见的安全威胁,攻击者可以利用这…

    Java 2023年5月27日
    00
  • 解析jdbc处理oracle的clob字段的详解

    解析jdbc处理oracle的clob字段的详解 在使用jdbc连接oracle数据库的过程中,遇到clob字段时可能会遇到一些问题。本文将介绍如何正确地使用jdbc处理oracle的clob字段。 问题描述 当使用jdbc连接oracle数据库并读取clob字段时,可能会遇到以下问题: 读取到的clob字段大小不对,可能是因为jdbc默认只读取clob字段…

    Java 2023年6月16日
    00
  • 在CentOS系统中检测Java安装及运行jar应用的方法

    在CentOS系统中检测Java安装及运行jar应用的方法: 1. 检测Java是否安装 可以通过以下命令检查Java是否安装在系统中: java -version 如果Java已经安装在系统中,会输出类似以下内容的信息: java version "1.8.0_191" Java(TM) SE Runtime Environment (…

    Java 2023年5月23日
    00
  • Java实现获取行政区划的示例代码

    下面我将为您详细讲解“Java实现获取行政区划的示例代码”的完整攻略,并给出两条示例。 前置知识 在学习实现获取行政区划的示例代码之前,您需要掌握以下知识点: Java基础语法 HTTP请求 JSON数据格式 具体步骤 1.获取接口API 首先,你需要在网上找到一个提供行政区划API的接口。这里我们以高德地图API的行政区划查询接口为例: https://r…

    Java 2023年5月20日
    00
  • Java 实现简单Socket 通信的示例

    Java 实现简单 Socket 通信的示例 简介 Socket 是实现网络编程的一种工具,它能够通过网络连接实现两台计算机之间的数据传输。在 Java 中,可以通过使用 Socket 类和 ServerSocket 类来简单地实现 Socket 通信。 示例 1:Socket 客户端 import java.io.IOException; import j…

    Java 2023年5月19日
    00
  • idea搭建可运行Servlet的Web项目

    讲解如下: 1. 前置条件 在开始搭建Web项目之前,你需要确认已完成以下的软件、环境和插件的安装和配置: Java JDK 1.8或以上 IntelliJ IDEA 2018或以上版本 TomcatServer插件 如果你的Intellij IDEA没有安装Tomcat Server插件,请按照以下步骤进行安装: 在IntelliJ IDEA中打开 Set…

    Java 2023年6月15日
    00
  • Jtable和JTree的写法示例代码

    我将为您提供关于JTable和JTree的写法示例代码的攻略。 JTable的写法示例代码 基本示例 下面是一个简单的JTable示例代码,它展示了如何创建一个带有表头和数据的JTable: // 创建表头和数据 String[] columnNames = {"Name", "Age", "Gender&q…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部