JavaWeb验证码案例(Cookie & Session)

本文介绍了一个使用Cookie和Session实现的JavaWeb验证码登录案例。首先,通过CheckCodeServlet生成验证码并存储在Session中。用户输入账号、密码和验证码后,系统验证验证码是否正确,接着检查用户名和密码。正确时,通过JDBCUtils和Dao类连接数据库验证用户,最后根据结果进行相应页面的跳转。登录过程中,强调了验证码验证在前、数据库操作在后的逻辑,以及转发与重定向的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习资料黑马java。

Cookie,主要用于用户无登入情况下的身份识别。

package cn.web.Cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
在服务器中的Servlet判断是否有一个名为lastTime的cookie
1. 有:不是第一次访问
  1. 响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20
  2. 写回Cookie:lastTime=2018年6月10日11:50:01
2. 没有:是第一次访问
  1. 响应数据:您好,欢迎您首次访问
  2. 写回Cookie:lastTime=2018年6月10日11:50:01
*/

@WebServlet("/cookieTest")
public class CookieTest extends HttpServlet {
   
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        response.setContentType("test/html;charset=utf-8");

        //1.获取cookie
        Cookie[] cookies = request.getCookies();
        //2.遍历cookie数组
        if (cookies != null && cookies.length > 0)
        {
   
            //输入iter则弹出快捷键
            for (Cookie cookie : cookies) {
   
                //3.获取cookie名称
                String name = cookie.getName();
                if("lastname".equals(name)) //有该数据,不是第一次访问
                {
   
                    //获取当前时间,并更新cookie
                    Date date = new Date();
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
                    String format = simpleDateFormat.format(date);//把date按格式排好
                    cookie.setValue(format); //传入cookie中,覆盖掉原来的值
                    //设置cookie存活时间
                    cookie.setMaxAge(60*60*24*30);
                    response.addCookie(cookie);

                    //响应数据,获取数据value值
                    String value = cookie.getValue();
                    response.getWriter().write("欢迎回来,您上次访问的时间是:"+value);

                    break;
                }
            }
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
        this.doPost(request, response);
    }
}

案例:带验证码的登入界面

文件结构:
在这里插入图片描述
核心逻辑简述:
1.通过验证码生成Servlet生成一个验证码,并把正确的文本存在session中。
2.用户输入三个值,账号,密码,和验证码。
3.从request中get到这三个参数,并先用用户的验证码和session中存放的正确结果做对比。
3.1如果不对,则转发一个“验证码不对”的String到前端。
3.2如果正确,则开始判断用户名和密码。
4.把用户名和密码拿出来,通过连接池去数据库中查询。
5.如果找到了,则封装起来用户名和密码。如果没找到,则返回一个Null。
6.进行相应的跳转。

Login.jsp – 登入界面首页
有个小技巧 div中,如果想空的时候不显示,可以用三元运算符:

 <div> <%=request.getAttribute("cc_error") == null? "":request.getAttribute("cc_error")%></div>

此外,关于jsp中写java <%= xxxxx %>是不能有分号的,这就是一个单行的表达式。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login</title>
    <script>
        //当窗口加载完,触发事件。
        window.onload = function () {
    
            //当id为img(就是下方的绑定的image)被点击,触发事件
            document.getElementById("img").onclick = function () {
    

                var date = new Date(); //加入时间戳 这样每次点击就是一次新访问了checkcode
                this.src=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值