1. 程式人生 > 實用技巧 >書籍管理系統登入註冊頁面

書籍管理系統登入註冊頁面

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;
}