簡單的使用者登入頁面與後臺資料庫的互動

我是小怪獸-發表於2017-05-03

思路為:當使用者登入時,如果使用者名稱和密碼都正確的時候會進入成功頁面。在validate.jsp裡會先獲得使用者名稱,然後再資料裡查詢此使用者名稱是否已經存在,若存在則再與所對應的密碼進行對比,若都相同則返回flag為2,成功登入,若使用者名稱存在而密碼不正確,則返回flag為1,提示密碼錯誤;若在資料庫裡找不到對應的使用者名稱,則返回flag為0,提示使用者名稱錯誤。
程式碼實現部分:
login.jsp

<body>
    <form action="validate.jsp" method="post">
    <table>
        <tr>
            <td>使用者名稱:</td>
            <td><input type="text" name="loginName"></td>
            <td><font color="red"><%=request.getAttribute("loginNameError")==null ? "":request.getAttribute("loginNameError") %></font></td>
        </tr>
        <tr>
            <td> 密碼:</td>
            <td><input type="password" name="loginPass"></td>
            <td><font color="red"><%=request.getAttribute("loginPassError")==null?"":request.getAttribute("loginPassError") %></font></td>
        </tr>
        <tr>
            <td><input type="submit" value="提交"></td>
            <td><input type="reset" value="重置"></td>
        </tr>
     </table>
    </form>
</body>

validate.jsp

<body>
   <%
    String loginName=request.getParameter("loginName");
    String loginPass=request.getParameter("loginPass");

    User user=new User();
    user.setUsername(loginName);
    user.setPassword(loginPass);

    LoginDao loginDao=new LoginDaoImpl();
    int flag=loginDao.login(user);
    if(flag==2){
        session.setAttribute("loginName", loginName);
        response.sendRedirect(request.getContextPath()+"/index.jsp");
    }else {
        if(flag==1){
            request.setAttribute("loginPassError", "loginPass is error");
        }else if(flag==0){
            request.setAttribute("loginNameError", "loginName is error");
        }
        request.getRequestDispatcher("/login.jsp").forward(request, response);
    }
    %>
  </body>

//編寫一個介面,只定義方法,具體實現讓實現它的介面去完成。
LoginDao.java

package com.dao.dao;

import com.jdbc.jdbc.User;

public interface LoginDao {
    int login(User user);
}

//實現介面的類,實現了具體的操作
LoginDaoImpl.java

package com.impls.impls;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.jdbc.common.ConnectionUtils;
import com.dao.dao.LoginDao;
import com.jdbc.jdbc.User;

public class LoginDaoImpl implements LoginDao{
    Connection con=null;
    PreparedStatement pstm=null;
    ResultSet rs=null;

    public int login(User user) {
        //連線資料庫
        con=ConnectionUtils.getConnection();
        int flag=0;
        try {
            //傳送sql文
            String sql="select t_name,t_pass from t_user where t_name=?";
            pstm=con.prepareStatement(sql);
            pstm.setString(1, user.getUsername());
            rs=pstm.executeQuery();
            //處理結果集
            while(rs.next()){
                String temp=rs.getString("t_pass");
                if(temp.equals(user.getPassword())){
                    flag=2; //使用者名稱和密碼都正確
                }else{
                    flag=1;//密碼錯誤
                }

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            //資源釋放(逆序釋放)
            ConnectionUtils.close(rs, pstm, con);   
        }   
        return flag;
    }
}

具體的公共類ConnectionUtils.java可以參考JDBC連線資料庫及具體程式碼實現

相關文章