JavaWeb学习——Servlet&JSP用户注册及验证码实现案例(23)

接上篇

注册功能

展示验证码,点击能切换;校验验证码,填写不正确,则注册失败
当用户填写了注册的用户名与密码时,在数据库调用select方法查询是否存在该用户,若不存在,则调用add方法添加该用户信息

service:
在这里插入图片描述
jsp:拥有账号密码已经验证码填写三大块

在这里插入图片描述
registerServlet:
在这里插入图片描述
由于我们要发送动态请求,因此我们需要在jsp页面将值输出
在这里插入图片描述

这时我们用已注册的账号注册,会发现页面确实响应了
在这里插入图片描述而新注册一个用户发现成功
在这里插入图片描述然后用刚刚的账号登陆成功
在这里插入图片描述

验证码功能

然后做验证码
由于验证码工具类文件实在太长,所以我们直接略过此处工具类编写[在最底下有完整的]
但是,由于此util工具类是利用输出流将图片输出到本地的一个固定路径的图片上,因此,在调用时我们只需要调用此图片路径(即在图片的src里写入虚拟路径以及验证码调用的servlet即可)以及验证码数据即可

我们写一个调用验证码的checkCodeServlet
在这里插入图片描述

将图片路径改为动态的servlet
在这里插入图片描述
然后启动项目就能发现验证码进行了动态切换
在这里插入图片描述
每刷新一次,验证码都不同
在这里插入图片描述
接下来将旁边的按钮优化:点击按钮时,重新请求此方法一次即可
在这里插入图片描述
但是这样,我们却发现点击按钮时验证码图没变化!因为图片已被缓存
这时我们可以在这后面加上永远不一样的参数:时间
在这里插入图片描述
现在我们就可以随时切换验证码了
在这里插入图片描述

校验验证码

现在便是校验验证码

在这里插入图片描述首先我们将验证码存入session
在这里插入图片描述

在servlet里面获取用户输入的验证码
在这里插入图片描述
然后获取程序生成的验证码进行比对

在这里插入图片描述在这里插入图片描述
这样我们的验证码功能便完善了

同时,为了解决中文异常,我们依旧规定字符集,下面的语句放在每个需要调用中文的servlet的doget方法开头即可

//处理post请求乱码问题
request.setCharacterEncoding("utf-8");

验证码工具类原码

package com.example.util;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Random;

//生成验证码工具类
public class CheckCodeUtil {
   

    public static final String VERIFY_CODES = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static Random random = new Random();

//输出随机验证码图片流,并返回验证码值(一般传入输出流,响应response页面端,Web项目用的较多)

    public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException {
   
        String verifyCode = generateVerifyCode(verifySize);
        outputImage(w, h, os, verifyCode);
        return verifyCode;
    }

    //使用系统默认字符源生成验证码
    //@param verifySize 验证码长度
    public static String generateVerifyCode(int verifySize) {
   
        return generateVerifyCode(verifySize, VERIFY_CODES);
    }
    //使用指定源生成验证码

    //@param verifySize 验证码长度
    //@param sources    验证码字符源
    public static String generateVerifyCode(int verifySize, String sources) {
   
        // 未设定展示源的字码,赋默认值大写字母+数字
        if (sources == null || sources.length() == 0) {
   
            sources = VERIFY_CODES;
        }
        int codesLen = sources.length();
        Random rand = new Random(System.currentTimeMilli
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值