<%-- 
    Document   : login
    Created on : 2020-4-12, 16:50:16
    Author     : Administrator
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title> 用户登录 </title>
    </head>
    <body>
        <!-- 输出出错提示 -->
        <span style="color:red;font-weight:bold">
            <%
                if (request.getAttribute("err") != null) {
                    out.println(request.getAttribute("err") + "<br/>");
                }
            %>
        </span>
        请输入用户名和密码:
        <!-- 登录表单,该表单提交到一个Servlet -->
        <form id="login" method="post" action="login">
            用户名:<input type="text" name="username"/><br/>&nbsp;&nbsp码:<input type="password" name="pass"/><br/>
            <input type="submit" value="登录"/><br/>
        </form>
    </body>
</html>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class DbDao {

    private Connection conn;
    private String driver;
    private String url;
    private String username;
    private String pass;

    public DbDao() {
    }

    public DbDao(String driver, String url, String username, String pass) {
        this.driver = driver;
        this.url = url;
        this.username = username;
        this.pass = pass;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public void setUrl(String url) {
        this.url = url;
    }

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

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getDriver() {
        return this.driver;
    }

    public String getUrl() {
        return this.url;
    }

    public String getUsername() {
        return this.username;
    }

    public String getPass() {
        return this.pass;
    }

    //连接数据库
    public Connection getConnection() throws Exception {
        if (this.conn == null) {
            Class.forName(this.driver);
            this.conn = DriverManager.getConnection(this.url, this.username, this.pass);
        }
        return this.conn;
    }

    // 插入记录
    public boolean insert(String sql, Object... args) throws Exception {
        PreparedStatement pstmt = getConnection().prepareStatement(sql);
        for (int i = 0; i < args.length; i++) {
            pstmt.setObject(i + 1, args[i]);
        }
        if (pstmt.executeUpdate() != 1) {
            return false;
        }
        pstmt.close();
        return true;
    }

    // 执行查询
    public ResultSet query(String sql, Object... args) throws Exception {
        PreparedStatement pstmt = getConnection().prepareStatement(sql);
        for (int i = 0; i < args.length; i++) {
            pstmt.setObject(i + 1, args[i]);
        }
        return pstmt.executeQuery();
    }

    // 执行修改
    public void modify(String sql, Object... args) throws Exception {
        PreparedStatement pstmt = getConnection().prepareStatement(sql);
        for (int i = 0; i < args.length; i++) {
            pstmt.setObject(i + 1, args[i]);
        }
        pstmt.executeUpdate();
        pstmt.close();
    }

    // 关闭数据库连接的方法
    public void closeConn() throws Exception {
        if (conn != null && !conn.isClosed()) {
            conn.close();
        }
    }
}
drop database if exists liuyan;
create database liuyan;

use liuyan;

create table user_inf
(
    id int auto_increment primary key,
    name varchar(255),
    pass varchar(255)
);

insert into user_inf
values(null,'crazyit','123');
insert into user_inf
values(null,'tiger','123');

 

 

<%-- 
    Document   : welcome
    Created on : 2020-4-12, 17:30:59
    Author     : Administrator
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title> 欢迎页面 </title>
    </head>
    <body>
        <h3>欢迎登录</h3>
        <%=session.getAttribute("name")%>,欢迎登录!
    </body>
</html>
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

import java.io.PrintWriter;
import java.io.IOException;

import java.sql.*;

/**
 *
 * @author Administrator
 */
@WebServlet(name = "login", urlPatterns = {"/login"})
public class LoginServlet extends HttpServlet {

    // 响应客户端请求的方法
    public void service(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, java.io.IOException {
        String errMsg = "";
        // Servlet本身并不输出响应到客户端,因此必须将请求转发到视图页面
        RequestDispatcher rd;
        // 获取请求参数
        String username = request.getParameter("username");
        String pass = request.getParameter("pass");
        try {
            // Servlet本身并不执行任何的业务逻辑处理,它调用JavaBean处理用户请求
            DbDao dd = new DbDao("com.mysql.jdbc.Driver",
                    "jdbc:mysql://localhost:3306/liuyan", "root", "admin");
            // 查询结果集
            ResultSet rs = dd.query("select pass from user_inf"
                    + " where name = ?", username);
            if (rs.next()) {
                // 用户名和密码匹配
                if (rs.getString("pass").equals(pass)) {
                    // 获取session对象
                    HttpSession session = request.getSession(true);
                    // 设置session属性,跟踪用户会话状态
                    session.setAttribute("name", username);
                    // 获取转发对象
                    rd = request.getRequestDispatcher("/welcome.jsp");
                    // 转发请求
                    rd.forward(request, response);
                } else {
                    // 用户名和密码不匹配时
                    errMsg += "您的用户名密码不符合,请重新输入";
                }
            } else {
                // 用户名不存在时
                errMsg += "您的用户名不存在,请先注册";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 如果出错,转发到重新登录
        if (errMsg != null && !errMsg.equals("")) {
            rd = request.getRequestDispatcher("/login.jsp");
            request.setAttribute("err", errMsg);
            rd.forward(request, response);
        }
    }
}

<servlet>
        <!-- 指定Servlet的名字,
        相当于指定@WebServlet的name属性 -->
        <servlet-name>login</servlet-name>
        <!-- 指定Servlet的实现类 -->
        <servlet-class>LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!-- 指定Servlet的名字 -->
        <servlet-name>login</servlet-name>
        <!-- 指定Servlet映射的URL地址,
        相当于指定@WebServlet的urlPatterns属性-->
        <url-pattern>/login</url-pattern>
    </servlet-mapping>