1. 程式人生 > >Spring 筆記 -06- 從 MySQL 建庫到 登入驗證資料庫資訊(maven)

Spring 筆記 -06- 從 MySQL 建庫到 登入驗證資料庫資訊(maven)

Spring 筆記 -06- 從 MySQL 建庫到 登入驗證資料庫資訊(maven)

本篇和 Spring 沒有什麼關係,只是學習 Spring,必備一些知識,所以放在這裡了。

本篇內容:

(1)MySQL 命令列,建立使用者資訊資料庫,密碼用 md5 加密
(2)jdbc 連結 MySQL 8.0
(3)Maven 管理 servlet,jsp 依賴
(4)單元測試
(5)難點在 DBUtils.java 檔案!

動態截圖:

在這裡插入圖片描述

一、建立使用者資訊 MySQL 資料庫

(建議名稱一致)

(1)安裝 MySQL 請百度或參考:MySQL 安裝 + 入門大全 + 常用命令合集

(2)開啟 cmd ,登入 mysql 的 root 使用者,建立 studb 資料庫,建立表 tb_user :

(3)顯示錶結構,插入 3 條使用者資料:

(4)資料庫 studb,表 tb_user 建立好了。

二、建立 Maven Web 專案,配置

(1)建立專案和修改目錄結構,因為常用,所以寫在了單獨的一篇文章,請檢視:Spring 筆記 -05- 建立 Maven Web 專案 + Tomcat 及目錄結構配置

(2)上面一篇文章,全部需要!

(3)配置 Maven 的配置檔案 pom.xml 檔案,位置在下面有提示:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.13</version>
    </dependency>


  </dependencies>

在這裡插入圖片描述

(4)點選自動匯入:

(5)建立如下目錄及檔案:

(6)下面需要先做一件事,就是在 js 目錄中,引入 Bootstrap3,
注意:只能是 Bootstrap3 版本:

配置步驟:

  • 安裝 Node.js ,因為要使用 npm
  • 在專案中 js 目錄,右鍵 Open in Explorer 可以開啟該目錄,並複製
  • 在 cmd 進入專案的 js 目錄
  • 使用命令:
npm install bootstrap3

三、具體檔案編碼:

(1)index.jsp 檔案,用於登入成功時跳轉:


<%--
    輸出 Hello World,當前時間,列表
    列表內容為 com.list.StuList 中的內容
--%>

<%@ page import="java.util.Date" pageEncoding="UTF-8" %>

<html>
<body>

<h2>登陸成功!</h2>
當前時間為:<%=new Date().toLocaleString()%>
<hr>

</body>
</html>

(2)failed.jsp 檔案,用於登入失敗時跳轉:

<%--
    登入失敗!
--%>

<%@ page import="java.util.Date" pageEncoding="UTF-8" %>

<html>
<body>

<h2>登陸失敗!</h2>
當前時間為:<%=new Date().toLocaleString()%>
<hr>

<br>
<a href="login.html" class="btn btn-default">返回登入</a>

</body>
</html>

(3)login.html 檔案,登入的前端介面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用者登入</title>
    <link rel="stylesheet" href="js/node_modules/bootstrap3/dist/css/bootstrap.min.css">
    <link rel="stylesheet" href="js/node_modules/bootstrap3/dist/css/bootstrap-theme.css">
</head>
<body>
<br><br>
<br><br>

<form name="loginForm" action="Servlet" method="post">
    <div class="center-block" style="width: 45%;height: 350px">
        <div class="panel panel-primary">
            <div class="panel-heading">
                <span class="glyphicon glyphicon-apple"></span>使用者登入

            </div>
            <div class="panel-body">
                <div class="text-success" align="center">
                    <h3>歡迎使用資源統一管理系統</h3>
                </div>
                <div class="input-group">
                    <label class="input-group-addon">使用者名稱</label>
                    <input class="form-control" type="text" name="uname" placeholder="請輸入使用者名稱">
                    <label class="input-group-addon text-warning">*</label>
                </div>
                <br>
                <div class="input-group">
                    <label class="input-group-addon">密&nbsp;&nbsp;&nbsp;碼</label>
                    <input class="form-control" type="password" name="upwd" placeholder="請輸入密碼">
                    <label class="input-group-addon text-warning">*</label>
                </div>
                <br>
                <div class="input-group">
                    <label class="input-group-addon">權&nbsp;&nbsp;&nbsp;限</label>
                    <select name="role" class="form-control ">
                        <option value="admin">管理員</option>
                        <option value="teacher">經理</option>
                        <option value="student">使用者</option>
                    </select>
                </div>
            </div>
            <div align="center">


                <a href="javascript:loginForm.submit()" class="btn btn-danger"><span
                        class="glyphicon glyphicon-log-in"></span> 登入</a>&nbsp;&nbsp;
                <a href="javascript:loginForm.reset()" class="btn btn-primary"><span
                        class="glyphicon glyphicon-remove"></span> 重置</a>
            </div>
            <br>
            <div class="panel-footer">
                <div align="center">
                    &copy;2018-2019 肖朋偉的 CSDN 部落格 Copy Right

               </div>
            </div>
        </div>
    </div>
</form>
</body>
</html>

如果成功引入 Bootstrap3 ,開啟伺服器,開啟本頁面,會有下面介面:

在這裡插入圖片描述

(4)User.java 檔案:

package com.pojo;

//用來存放使用者登入時,輸入輸出的資訊
public class User {
    private String uname;
    private String upwd;
    private String role;

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpwd() {
        return upwd;
    }

    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }
}

(5)UserDAO.java 檔案:

package com.dao;

import com.dbutil.DBUtils;
import com.pojo.User;

public class UserDAO {

    //返回 0 或 1
    public int login(User user){
        DBUtils dbUtils = new DBUtils();

        //與資料庫是否匹配,匹配為 1
        int temp = dbUtils.login(user);
        return temp;
    }
}

(6)DBUtils.java 檔案:
!!! 成敗在與這個檔案

  • 自行更改資料庫名
  • 自行更改表名(兩個)
  • 自行更改 root 的密碼
  • 檢查服務是否啟動
package com.dbutil;

import com.pojo.User;

import java.sql.*;

public class DBUtils {
    Connection conn;
    //預處理
    PreparedStatement pstmt;
    //結果集
    ResultSet rs;

    public DBUtils(){
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/資料庫名?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC","root","密碼");

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

    public int login(User user){
        try{
            pstmt=conn.prepareStatement("select * from 表名 where uname = ? and upwd = md5(?)");
            pstmt.setString(1, user.getUname());
            pstmt.setString(2, user.getUpwd());
            rs = pstmt.executeQuery();
            if (rs.next())
                return 1;
            else
                return 0;
        }catch (Exception e){
            e.printStackTrace();
        }

        return 0;
    }
}

(7)Servlet.java 檔案:


package com.loginServlet;

import com.pojo.User;
import com.service.UserService;

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(name = "Servlet",urlPatterns = "/Servlet")
public class Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doPost");
        request.setCharacterEncoding("utf-8");
        //獲取 post 請求中的兩個引數
        String uname = request.getParameter("uname");
        String upwd = request.getParameter("upwd");
        String role = request.getParameter("role");


        /*硬編碼, 不從資料庫獲取資訊,直接驗證
        if (uname.equals("admin") && upwd.equals("123456")) {
            response.sendRedirect("index.jsp");
        }else{
            response.sendRedirect("loginServlet.html");
        }*/

        //從服務獲取值
        UserService userService = new UserService();

        User user = new User();
        user.setUname(uname);
        user.setUpwd(upwd);
        user.setRole(role);

        if (userService.login(user)) {
            response.sendRedirect("index.jsp");
        }else{
            response.sendRedirect("failed.jsp");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet");
    }
}

(8)UserService.java 檔案:


package com.service;

//服務層,給控制層提供服務

import com.dao.UserDAO;
import com.pojo.User;

public class UserService {

    UserDAO dao = new UserDAO();

    //引數,處理 User 物件,返回 True 或 False
    public boolean login(User user){
        int temp = dao.login(user);
        if (temp == 0)
            return false;
        else
            return true;
    }
}

四、執行除錯

在這裡插入圖片描述

五、常見錯誤

(1)MySQL 8.0 版本的 jdbc 個數據版本不匹配

(2)資料庫服務沒有執行

(3)配置檔案資料庫資訊沒有自行更改

(4)檔名自定義時,依賴失敗

更多文章連結:

支援博主

我正在參加 CSDN 2018 年部落格之星評選,希望大家能支援我,
我是【No. 001】號 肖朋偉 ,感謝大家寶貴的一票 ^_^/
投票地址:https://bss.csdn.net/m/topic/blog_star2018/index