使用IDEA实现数据库连接的验证码登录功能

本文使用IDEA实现数据库连接的验证码登录功能

1.Project截图

在这里插入图片描述

2.代码

login.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <script type="text/javascript" src="jquery-3.3.1.js">
    </script>
    <script type="text/javascript" >
        function reloadCheckImg(){
            $("img").attr("src","img.jsp?t="+(new Date().getTime()));
        }
    </script>
    <title>登录</title>
</head>
<body>
        <form action="LoginServlet" method="post">
        用户名:<input type="text" placeholder="亲,请输入用户名" name="username">
        密码:<input type="text" placeholder="亲,请输入密码" name="password">
        验证码:<input type="text" name="checkcode" id="checkcodeId" size="4" />
        <a href="javascript:reloadCheckImg();"><img src="img.jsp"   /></a>
        <input type="submit" value="登录">
        <span id="tip"></span>
        </form>
</body>
</html>

UserDaoImpl.java

package org.app.dao.impl;

import org.app.dao.IUserDao;
import org.app.entity.User;

import java.sql.*;


public class UserDaoImpl implements IUserDao {
    private static final String url = "jdbc:mysql://localhost:3306/travel?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false";
    private static final String USERNAME = "root";
    private static final String PWD = "123456";
    User user = null;
    PreparedStatement pstmt = null;
    Connection connection = null;
    ResultSet rs = null;

    @Override
    public User getUser(String user_name) {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection(url, USERNAME, PWD);
            String sql = "select * from users where user_name = ?";
            pstmt = connection.prepareStatement(sql);
            pstmt.setString(1, user_name);
            rs = pstmt.executeQuery();
            if (rs.next()) {
                String password = rs.getString("user_password");
                user = new User(user_name, password);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) rs.close();
                if (pstmt != null) pstmt.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return user;
    }
}

IUserDao.java

package org.app.dao;

import org.app.entity.User;

public interface IUserDao {
    User getUser(String user_name) throws Exception;//根据user_name查询并返回User实体供登录使用
}


User.java

package org.app.entity;

public class User {
    private String user_name;
    private String user_password;

    public User(String user_name, String user_password) {
        this.user_name = user_name;
        this.user_password = user_password;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getUser_password() {
        return user_password;
    }

    public void setUser_password(String user_password) {
        this.user_password = user_password;
    }
}

LoginServlet.java

package org.app.servlet;

import org.app.dao.impl.UserDaoImpl;
import org.app.entity.User;

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 java.io.IOException;

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

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码方式
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        //从login.jsp中取出username、password
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //根据所输入的username参数查询数据库后返回user的值
        UserDaoImpl userDaoImpl = new UserDaoImpl();
        User myuser = userDaoImpl.getUser(username);
        String myusername = myuser.getUser_name();
        String mypassword = myuser.getUser_password();

        //说明:Client是用户输入的验证码,而Server是产生的真实的验证码
        String checkcodeClient = request.getParameter("checkcode");
        String checkcodeServer = (String)request.getSession().getAttribute("CHECKCODE");

        //实现登录操作
        if(myusername.equals(username) && mypassword.equals(password) && checkcodeClient.equals(checkcodeServer)){
            response.getWriter().println(" <script>\n" + "alert(\"登录成功!!!!\")\n" + "</script>");
        }else if(myusername == "" || mypassword == "" || checkcodeClient == ""){
            response.getWriter().println(" <script>\n" + "alert(\"输入不能为空!!!!\")\n" + "</script>");
        }else{
            response.getWriter().println(" <script>\n" + "alert(\"登录失败!!!!\")\n" + "</script>");
        }
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
</web-app>

img.jsp

<%@ page import="java.awt.*" %>
<%@ page import="java.util.Random" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="javax.imageio.ImageIO" %>
<%@ page contentType="image/jpeg;charset=UTF-8" language="java" %>

<%!
    //随机产生颜色值
    public Color getColor(){
        Random ran = new Random();
        int r = ran.nextInt(256);
        int g = ran.nextInt(256);
        int b = ran.nextInt(256);
        return new Color(r,g,b);//red green blue 0-255
    }

    //产生验证码值
    public String getNum(){
        int ran = (int)(Math.random()*9000)+1000;
        return String.valueOf(ran);
    }

%>

<%
    //禁止缓存,防止验证码过期
    response.setHeader("Pragma","no-cache");
    response.setHeader("Cache-Control","no-cache");
    response.setHeader("Expires","0");

    //绘制验证码
    BufferedImage image = new BufferedImage(80,30, BufferedImage.TYPE_INT_RGB);
    //画笔
    Graphics graphics = image.getGraphics();
    graphics.fillRect(0,0,80,30);
    //绘制干扰线条
    for(int i = 0; i < 60 ; i++){
        Random ran = new Random();
        int xBegin = ran.nextInt(80);
        int yBegin = ran.nextInt(30);


        int xEnd = ran.nextInt(xBegin + 10);
        int yEnd = ran.nextInt(yBegin + 10);
        graphics.setColor(getColor());
        //绘制线条
        graphics.drawLine(xBegin,yBegin,xEnd,yEnd);
    }

    graphics.setFont(new Font("seif",Font.BOLD,20));
    //绘制验证码
    graphics.setColor(Color.BLACK);
    String checkCode = getNum();
    StringBuffer sb = new StringBuffer();
    for(int i = 0;i < checkCode.length();i++){
        sb.append(checkCode.charAt(i) + " ");//验证码的每一位数字
    }

    graphics.drawString(sb.toString(),15,20);//绘制验证码

    //将验证码真实值 保存在session中,供使用时比较真实性
    session.setAttribute("CHECKCODE",checkCode);

    //真实的产生图片
    ImageIO.write(image,"jpeg",response.getOutputStream());

    //关闭
    out.clear();
    out = pageContext.pushBody();
%>

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <script type="text/javascript" src="jquery-3.3.1.js">
    </script>
    <script type="text/javascript" >
        function reloadCheckImg(){
            $("img").attr("src","img.jsp?t="+(new Date().getTime()));
        }
    </script>
    <title>登录</title>
</head>
<body>
        <form action="LoginServlet" method="post">
        用户名:<input type="text" placeholder="亲,请输入用户名" name="username">
        密码:<input type="text" placeholder="亲,请输入密码" name="password">
        验证码:<input type="text" name="checkcode" id="checkcodeId" size="4" />
        <a href="javascript:reloadCheckImg();"><img src="img.jsp"   /></a>
        <input type="submit" value="登录">
        <span id="tip"></span>
        </form>
</body>
</html>

3.效果

首先先看数据库中所拥有的用户名和密码:
在这里插入图片描述
在浏览器中输入数据库中的随机一个人的用户名和密码:
在这里插入图片描述
点击登录后,页面跳出“登录成功!!”字样,即登陆功能实现成功。
在这里插入图片描述

4.相关的资源

1)jquery-3.3.1.js

2)连接数据库时所用的Jar包:

mysql-connector-java-8.0.15.jar(可以直接复制加 maven在百度上搜索就有)

3)相关类(在IDEA 提示是按Alt+Enter就能够导入)

  • 11
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值