0.環境准備
項目創建:
IDEA 創建 Servlet 項目詳細步驟:https://www.jianshu.com/p/386a79d16e05
導入 MySQL 驅動包:
Java MySQL 連接:https://eslsuwen.github.io/2019/06/02/Java-MySQL/
1.創建測試數據
接下來我們在 MySQL 中創建 usersdb 數據庫,並創建 user 數據表,表結構如下:
CREATE TABLE `user` (
`name` char(20) NOT NULL DEFAULT '' COMMENT 'name',
`password` char(10) NOT NULL DEFAULT '' COMMENT 'password'
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
插入一些數據:
INSERT INTO `user`
VALUES
( 'admin', 'admin' ),
( ' guest ', ' 123456 ' ),
( ' guest1 ', ' 123 ' );
2.創建登錄 jsp 文件
在 web 目錄下創建 login.jsp :
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>登錄</title>
</head>
<body>
<div class="login" style="text-align:center;">
<fieldset>
<legend>用戶登錄</legend>
<br/>
<form action="login" method="post" name="login">
用戶名:<input type="text" name="username"/> <br/> <br/> 密 碼:<input
type="password" name="password"/> <br/> <br/> <input
type="submit" value="登錄"/>
</form>
</fieldset>
</div>
</body>
</html>
3.創建登錄 servlet 處理登錄請求
- 登錄成功跳轉預設 jsp 文件
- 所使用 JDBC 操作類參考下文
Java MySQL 連接:https://eslsuwen.github.io/2019/06/02/Java-MySQL/
- 登錄失敗則跳回 login.jsp
package login;
import database.JdbcOp;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 一般都會在doGet()方法中調用doPost()方法,或者在doPost()方法中調用doGet()方法
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 設置編碼格式,可以防止亂碼出現
response.setContentType("text/html; charset=utf-8");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
// 獲取用戶提交過來的用戶名和密碼,是通過表單中input的name屬性獲取的
String username = request.getParameter("username");
String password = request.getParameter("password");
String isSignUp = request.getParameter("isSignUp");
PrintWriter out = response.getWriter();
System.out.println(username + ": " + password + " isSignUp: " + isSignUp);
// 獲取輸出流,用戶顯示信息,也可以用轉發或者重定向
PrintWriter pw = response.getWriter();
try {
JdbcOp jdbc = new JdbcOp();
jdbc.open("usersdb");
ResultSet rs = jdbc.executeQuery("select * from users");
while (rs.next()) {
String nm = rs.getString("name");
String pd = rs.getString("password");
System.out.println("username: " + nm + " password: " + pd);
if (nm.equals(username) && pd.equals(password)) {
HttpSession session = request.getSession();
//將數據存儲到session中
session.setAttribute("isLogin", "true");
session.setAttribute("username", username);
out.print("<script language='javascript'>alert('You login successful ! 你已成功登錄!out.print');window.location.href='test.jsp';</script>");
out.flush();
out.close();
}
}
jdbc.close();
} catch (Exception e) {
e.printStackTrace();
}
pw.write("login fail");
out.print("<script language='javascript'>alert('please login first 登陸信息輸入有誤!');window.location.href='login.jsp';</script>");
out.flush();
out.close();
}
}
4.運行項目
輸入正確的賬號密碼:
賬號密碼驗證失敗: