書籍管理系統登入註冊頁面
阿新 • • 發佈:2020-11-23
1.頁面展示
1.1 登入註冊頁面
1.2 書籍展示頁面
1.3 書籍編輯頁面
1.4 書籍新增頁面
1.5 書籍搜尋頁面
1.6 資料分析頁面
1.7 資料修改頁面
1.8 資料庫展示
1.8.1 book表
1.8.2 bookcase表
1.8.3 reader表
2.程式碼下載
3.程式碼分析
3.1 登入註冊頁面
3.1.1 登入
- 通過post請求將資料傳參到request域中獲取
<div class="container"> <div class="login-wrapper"> <div class="header">Login</div> <div class="form-wrapper"> <form action="/login?method=denglu" method="post" id="loginForm"> <input type="text" name="username" placeholder="username" class="input-item"> <input type="password" name="password" placeholder="password" class="input-item"> <input class="btn" type="submit" value="登入"/> </form> </div> <div class="msg"> Don't have account?<a href='zhece.jsp'>Sign up</a> </div> </div> </div>
- 通過getParameter("引數名")方法獲取引數值和方法值
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取瀏覽器引數 String username=req.getParameter("username"); String password=req.getParameter("password"); String tel=req.getParameter("tel"); //獲取當前login路由下的方法 String method = req.getParameter("method"); }
- 通過呼叫Service層方法login()來判斷使用者輸入的使用者密碼是否正確,如果正確,返回獲取的使用者物件用於判斷使用者級別,跳轉到指定頁面,否則返回空物件
//用向上轉型來儲存 Object object=loginService.login(username,password); if(object!=null) { //向下轉型儲存 Reader reader = (Reader) object; //System.out.println("LoginServlet的reader="+reader); //1.獲取session HttpSession session = req.getSession(); //儲存資料到伺服器 session.setAttribute("reader", reader); //這裡判斷使用者級別,來進入不同頁面 switch (reader.getGrade()) { case 1: resp.sendRedirect("/bookshow.jsp"); System.out.println("111111111111111111"); break; } }
- Service層呼叫Repository層方法獲取資料庫資料並返回
public ReaderRepository readerRepository=new ReaderRepositoryImpl();
@Override
public Object login(String username, String password) {
return readerRepository.login(username,password);
//返回物件
}
- Repository層呼叫資料庫,借用c3p0資料庫連線池來操作,這裡還使用了資料庫操作封裝程式碼JdbcTools類
Reader reader = null;
@Override
public Reader login(String username, String password) {
//之前定義的包裝類用於c3p0連線池的使用
Connection connection = JdbcTools.getConnection();
String sql = "select * from reader where username=? and password=?";
//執行sql語句
PreparedStatement statement = null;
ResultSet resultSet = null;
Reader reader = null;
try {
statement = connection.prepareStatement(sql);
//引數代替問號
statement.setString(1, username);
statement.setString(2, password);
resultSet = statement.executeQuery();
if (resultSet.next()) {
//單個數據的替代,
reader = new Reader(resultSet.getInt(1), resultSet.getString(2), resultSet.getString(3), resultSet.getString(4), resultSet.getString(5), resultSet.getString(6), resultSet.getString(7), resultSet.getInt(8),resultSet.getString(10));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcTools.release(connection, statement, resultSet);
}
return reader;
}
- JdbcTools類主要實現對報錯的處理以及選擇資料池配置
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcTools {
private static DataSource dataSource;//新建資料池
static {
dataSource=new ComboPooledDataSource("testc3p0");
//連線池c3p0資料連線池
}
public static Connection getConnection(){
Connection connection=null;
try {
connection=dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void release(Connection connection, Statement statement, ResultSet resultSet){
try {
if(connection!=null){
connection.close();
}
if(statement!=null){
statement.close();
}
if(resultSet!=null){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3.1.2 註冊
- 註冊與登入不同之處在於,註冊要去判斷資料庫中是否已經存在該使用者,同時操作資料庫的語句不同,相同點在於請求方式都為post請求
//判斷是否有此使用者名稱
int panduan=loginService.hasUsername(username);
if(panduan==1){
System.out.println("已有賬號");
}else{
//無使用者
//用向上轉型來儲存
int i=loginService.registered(username,password,tel);
if(i==1){
System.out.println("註冊賬號成功");
resp.sendRedirect("/login.jsp");
}else{
System.out.println("註冊賬號失敗");
}
}
- 判斷資料庫中是否存在該使用者
@Override
public int hasUsername(String username) {
//之前定義的包裝類用於c3p0連線池的使用
Connection connection = JdbcTools.getConnection();
String sql = "select * from reader where username=?";
//執行sql語句
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
statement = connection.prepareStatement(sql);
//引數代替問號
statement.setString(1, username);
resultSet = statement.executeQuery();
if (resultSet.next()) {
//單個數據的替代
return 1;
} else {
return 0;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcTools.release(connection, statement, resultSet);
}
return 0;
}