随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

简介:

用户输入用户名、密码和验证码,识别成功则登入,失败则返回登录页面并提示错误信息。

登录案例的代码请参考:https://www.cnblogs.com/0099-ymsml/p/16175101.html

生成随机验证码的类请参考:https://www.cnblogs.com/0099-ymsml/p/16179879.html

CodeServlet: 获取验证码的文本信息

package demoServlet;

import java.awt.image.BufferedImage;
import java.io.IOException;
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 demoClass.Verify;

@WebServlet("/CodeServlet")
public class CodeServlet extends HttpServlet {
    private Verify vc = new Verify();
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 生成图片
         * 保存图片上的文本到session中
         * 把图片响应给客户端
         */
        BufferedImage image = vc.getImage();    // 获取一张图片的流
        
        // 将图片的文本保存到session中
        String text = vc.getText();
        HttpSession session = request.getSession();
        session.setAttribute("text", text);    
        
        // 输出流输出图片
        Verify.output(image, response.getOutputStream()); 
    }
}

LoginServlet:登录信息验证

package demoServlet;

import java.io.IOException;

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 javax.servlet.http.HttpSession;


@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 获取用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        // 获取验证码
        String code = request.getParameter("code");
        // 获取session
        HttpSession session = request.getSession();
        // 获取图片文本
        String text = (String) session.getAttribute("text");
        // 校验用户名和密码
        if ("cdml".equals(username)) { // 判断用户名
            if ("qwe".equals(password)) { // 判断密码
                if (!text.equalsIgnoreCase(code)) { // 验证码不正确
                    request.setAttribute("msg", "验证码错误"); // 记录错误的验证码
                    request.getRequestDispatcher("/jsp/login.jsp").forward(request, response); // 返回登录页面
                } else { // 当验证码正确
                    // 用户名、密码和验证码都正确,设置用户名、密码和验证码
                    session.setAttribute("username", username);
                    session.setAttribute("password", password);
                    session.setAttribute("code", code);
                    // 设置Cookie
                    Cookie cookie = new Cookie("username", username);
                    cookie.setMaxAge(60 * 60 * 24); // cookie有效时间为一天
                    response.addCookie(cookie); // 添加cookie
                    response.sendRedirect("/day0422/jsp/source1.jsp"); // 重定向到source1.jsp
                }
            } else {
                // 设置错误密码
                request.setAttribute("msg", "密码错误");
                // 转发
                request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);
            }
        } else {
            // 设置错误用户名
            request.setAttribute("msg", "用户名错误");
            // 转发
            request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);
        }
    }
}

login.jsp:登录页面

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>

<script>
    function change(){
        var img = document.getElementById("img");
        img.src = "/day0422/CodeServlet?date=" + new Date().getTime();
    }
</script>
</head>
<body>
<%    
    String err = "";
    String msg = (String)request.getAttribute("msg");
    if (msg!=null){
        err = msg;
    }
    String username = (String)session.getAttribute("username");
    String password = (String)session.getAttribute("password");
%>
<div align="center">
<font color="red"><b><%=err %></b></font>
    <form action="/day0422/LoginServlet" method="post">
    用户名:<input type="text" name="username" value=<%if(username!=null) {out.print(username);} %>><br/>
    密码  :<input type="text" name="password" value=<%if(password!=null) {out.print(password);} %>><br/>
    请输入:<input type="text" name="code" size="3">
    <img id="img" src="/day0422/CodeServlet"><a href="javascript:change()">换一张</a>
    <br/>
    <input type="submit" value="登录">
    </form>
</div>
</body>
</html>

 

source1.jsp:登录成功页面

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>title</title>
</head>
<body>
<h1>验证成功!</h1>
<b>用户:<%=request.getSession().getAttribute("username") %></b>
<b>您的密码为:<%=request.getSession().getAttribute("password") %></b>
<b>您的验证码为:<%=request.getSession().getAttribute("code") %></b>
</body>
</html>

访问login.jsp页面

 

 

 访问成功并跳转到source1.jsp

 

 如果验证码不匹配(上面验证码识别不区分大小写):

改了一下,可以实现换一张验证码的功能:

 

posted on 2022-04-22 20:12  时间完全不够用啊  阅读(415)  评论(0编辑  收藏  举报