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">密 碼</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">權 限</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>
<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">
©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