登录案例

2021年4月15日 15:45

案例需求:
	1. 访问带有验证码的登录页面login.jsp
	2. 用户输入用户名,密码以及验证码。
		* 如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误
		* 如果验证码输入有误,跳转登录页面,提示:验证码错误
		* 如果全部输入正确,则跳转到主页success.jsp,显示:用户名,欢迎您

总共有7部分组成

​ 用到的技术:HTML+JSP+Servlet+Mysql+Java

需要进行导入jar包和创建数据库

image-20210415154333280

导入jar

在WEB-INF中创建libs目录

然后把所需要jar赋值进行然后选择libs-Add as library-Module library-OK

image-20210415154156745

创建数据库
CREATE DATABASE day09;
USE day09;
CREATE TABLE USER(
	id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
	username VARCHAR(32) UNIQUE NOT NULL,
	PASSWORD VARCHAR(32)
);
第一部分:LoginServlet.java
package com.levizhao.servlet;

import com.levizhao.dao.UserDao;
import com.levizhao.domain.User;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       // 设置请求默认编码
        request.setCharacterEncoding("utf-8");

        // 获取参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String checkCode = request.getParameter("checkCode");

        //获取session中的验证码
        HttpSession session = request.getSession();
        String checkCode_session = (String)session.getAttribute("checkCode_session");
        // 获取到session的值之后,使用一次就失效
        session.removeAttribute("checkCode_session");
        // 判断验证码验证是否正确
        if (checkCode_session != null && checkCode_session.equalsIgnoreCase(checkCode)){
            // 验证码正确
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            UserDao dao = new UserDao();
            User login_user = dao.login(user);

            if (login_user == null){
                // 账户或者密码错误
                request.setAttribute("login_error","The Username or Password is incorrect");
                request.getRequestDispatcher("/login.jsp").forward(request,response);
            }

            /*if ("levi".equals(username) && "123".equals(password)){
               // 账户和密码正确
                session.setAttribute("user",username);
                response.sendRedirect(request.getContextPath()+"/success.jsp");
            }*/
            else {
                // 账户和密码正确
                session.setAttribute("user",username);
                response.sendRedirect(request.getContextPath()+"/success.jsp");
            }

        }
        else{
            // 验证码不正确
            request.setAttribute("cc_error","The Check Code is incorrect");
            request.getRequestDispatcher("/login.jsp").forward(request,response);

        }


    }
}

第二部分:CheckCodeServlet.java
package com.levizhao.servlet;

import com.levizhao.dao.UserDao;
import com.levizhao.domain.User;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       // 设置请求默认编码
        request.setCharacterEncoding("utf-8");

        // 获取参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String checkCode = request.getParameter("checkCode");

        //获取session中的验证码
        HttpSession session = request.getSession();
        String checkCode_session = (String)session.getAttribute("checkCode_session");
        // 获取到session的值之后 使用一次就失效
        session.removeAttribute("checkCode_session");
        // 判断验证码验证是否正确
        if (checkCode_session != null && checkCode_session.equalsIgnoreCase(checkCode)){
            // 验证码正确
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            UserDao dao = new UserDao();
            User login_user = dao.login(user);

            if (login_user == null){
                // 账户或者密码错误
                request.setAttribute("login_error","The Username or Password is incorrect");
                request.getRequestDispatcher("/login.jsp").forward(request,response);
            }

            /*if ("levi".equals(username) && "123".equals(password)){
               // 账户和密码正确
                session.setAttribute("user",username);
                response.sendRedirect(request.getContextPath()+"/success.jsp");
            }*/
            else {
                // 账户和密码正确
                session.setAttribute("user",username);
                response.sendRedirect(request.getContextPath()+"/success.jsp");
            }

        }
        else{
            // 验证码不正确
            request.setAttribute("cc_error","The Check Code is incorrect");
            request.getRequestDispatcher("/login.jsp").forward(request,response);

        }


    }
}

第三部分:User.java
package com.levizhao.domain;

public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

第四部分:UserDao.java
package com.levizhao.dao;
import com.levizhao.domain.User;
import com.levizhao.utils.JDBCUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * 操作数据库中User表的类
 */
public class UserDao {

    //声明JDBCTemplate对象共用
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    /**
     * 登录方法
     * @param loginUser 只有用户名和密码
     * @return user包含用户全部数据,没有查询到,返回null
     */
    public User login(User loginUser){
        try {
            //1.编写sql
            String sql = "select * from user where username = ? and password = ?";
            //2.调用query方法
            User user = template.queryForObject(sql,
                    new BeanPropertyRowMapper<User>(User.class),
                    loginUser.getUsername(), loginUser.getPassword());


            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();//记录日志
            return null;
        }
    }
}

第五部分:JDBCUtils
package com.levizhao.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {

    private static DataSource ds ;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}

第六部分:login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Login Page</title>
<%--    设置能动态刷新验证码--%>
    <script>
        window.onload = function (){
            document.getElementById("img").onclick =function (){
                this.src = "/day08/checkCodeServlet?time="+new Date().getTime();
            }
        }
    </script>
<%--    设置div的显示颜色 为红色--%>
    <style>
        div{
            color: red;
        }
    </style>
</head>
<body>
<form action="/day08/LoginServlet" method="post">
    <table>
        <tr>
            <td>用户名</td>
            <td><input type="text" name="username"></td>
        </tr>
        <tr>
            <td>密码</td>
            <td><input type="password" name="password"></td>
        </tr>
        <tr>
            <td>验证码</td>
            <td><input type="text" name="checkCode"></td>
        </tr>
        <tr>
            <td colspan="2"><img src="/day08/checkCodeServlet"  id="img"></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="login"></td>
        </tr>
    </table>
</form>
<%--当收到验证码错误时,提示验证码错误信息--%>
<div><%=request.getAttribute("cc_error") == null ?"":request.getAttribute("cc_error")%></div>
<%--当收到用户名或错误时,提示账户或者密码错误信息--%>
<div><%=request.getAttribute("login_error") == null ? "":request.getAttribute("login_error")%></div>
</body>
</html>

第七部分:success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>login Successful</title>
</head>
<body>
    <%- 获取登录的用户名-%>
<h1>Welcome to <%=request.getSession().getAttribute("user")%> login successful.</h1>
</body>
</html>

posted @ 2021-04-15 15:46  withLevi  阅读(90)  评论(1编辑  收藏  举报