【后端】验证码登录练习

验证码登录练习

需求:1.创建一个登录页面,要求客户输入账户,密码和验证码,点击注册后都正确则跳转到成功登录页面,页面输出“欢迎XXX重新访问网站”,验证码错误则在登录页面输出“验证码错误!”,账户或密码错误则输出“登录失败,用户名或密码错误!”
第一步:创建用户类,工具类以及查询数据库类,还有验证码的动态Servlet,在我的上一篇文章有相关记录请查询。
第二步:登录的主页login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
    <script>

        window.onload = function () {

            document.getElementById("ckcode").onclick = function () {
                var date = new Date();
                var time = date.getTime();


                this.src = "/Servlet111?" + time;
            }


        }

    </script>
</head>
<style>

    div {
        color: red;
    }
</style>
<body>

<form action="/login" method="post">

    <table>

        <tr>
            <td>用户名</td>
            <td><input type="text" placeholder="请输入用户名" name="username"></td>
        </tr>
        <tr>
            <td>密码</td>
            <td><input type="text" placeholder="请输入密码" name="password"></td>
        </tr>
        <tr>
            <td>验证码</td>
            <td><input type="text" placeholder="请输入验证码" name="checkcode"></td>
        </tr>
        <tr>
            <td colspan="2">
                <img src="/Servlet111" id="ckcode">
            </td>

        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="注册">
            </td>
        </tr>


    </table>

</form>
<div>
   <%=request.getAttribute("cc_erro")==null?"":request.getAttribute("cc_erro")%>
</div>
<div>
   <%=request.getAttribute("user_erro")==null?"":request.getAttribute("user_erro")%>
</div>

</body>
</html>

第二步:登录的Servlet创建

import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet("/login")
public class login extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //设置request编码
        request.setCharacterEncoding("utf-8");
        //获取请求参数Map集合
        Map<String, String[]> parameterMap = request.getParameterMap();
        System.out.println(parameterMap);
        //可以利用BeanUtils来简化操作
        user user = new user();
        try {
            BeanUtils.populate(user, parameterMap);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        String checkcode = request.getParameter("checkcode");
        //判断验证码是否正确?
        HttpSession session = request.getSession();
        String check_code = (String) session.getAttribute("check_code");//强制转型为String才能使用
        //删除验证码
//        session.removeAttribute("check_code");
        if (check_code.equalsIgnoreCase(checkcode)) {
            //如果验证码正确 则利用userdao查询数据库验证用户名和密码是否正确

            userdao userdao = new userdao();
            cn.web.user loginuser = userdao.login(user);
            if (loginuser == null) {
                //用户名或者密码错误 转发
                request.setAttribute("user_erro", "用户名或密码错误!请重新输入");
                request.getRequestDispatcher("/login.jsp").forward(request, response);
            } else {
                //用户名密码正确 则存储信息到session并重定向(因为两次请求必须用session)
                session.setAttribute("username", user.getUsername());
                //重定向
                response.sendRedirect(request.getContextPath() + "/success.jsp");


            }


        } else {
            //如果验证码错误,转发
            request.setAttribute("cc_erro", "验证码错误!请重新输入!");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }


    }

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

第三步:登录成功后的页面success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>欢迎<%=request.getSession().getAttribute("username")%>重新访问网站!</h1>
</body>
</html>

备注:
在验证码的代码里,将验证码随机数利用StringBuilder存储到session中,然后在login的servlet里将验证码随机数再取出来与用户输入的验证码对比匹配得到结果。
注意,如果验证码无需大小写,则使用equalsIgnoreCase.()忽略大小写匹配方法。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值