2012-07-27 72 views
1

在我的項目中,用戶通過提供他/她的emailidpassword來登錄。如果兩者都匹配,則可以成功登錄。如果不是,他將被重定向到UserHome.jsp頁面。這裏是我的代碼:不正確的數據將用戶重定向到Servlet的空白頁面登錄頁面

import getset.Getset; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import accessdb.Dao; 

public class LoginAuthentication extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // Authentication and Logging in The Registered User 
     Getset g=new Getset(); 
     Dao dao=new Dao(); 
     String userid=""; 
     String fname=""; 
     // PrintWriter pw=response.getWriter(); 
     String loginemail=request.getParameter("loginemail"); 
     String loginpassword=request.getParameter("loginpassword"); 
     if (loginemail.equals("") || 
      loginemail.equals(" ") || 
      loginpassword.equals("") || 
      loginpassword.equals(" ")) 

      response.sendRedirect("WelcomePage.jsp"); 

     g.setloginemail(loginemail); 
     g.setloginpassword(loginpassword); 
     try { 
      ResultSet rs=dao.loginauthentication(g); 
      while(rs.next()) 
      { 
       String regemail=rs.getString("regemail"); 
       String regpassword=rs.getString("regpassword"); 
       if(loginemail.equals(regemail) && 
        (loginpassword.equals(regpassword))==true) 
       { 
        ResultSet rs1=dao.getnameid(g); 
        while(rs1.next()) 
        { 
         userid=rs1.getString("USERID"); 
         fname=rs1.getString("FNAME"); 
        } 
        HttpSession session = request.getSession(true); 
        session.setAttribute("USERID", userid); 
        session.setAttribute("FNAME", fname); 
        response.sendRedirect("UserHome.jsp"); 
        break; 
       } 
       else if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))==false) 
       { 
        response.sendRedirect("WelcomePage.jsp"); 
        return; 
       } 
      } 
     } 
     catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

我試圖涵蓋登錄過程中可能出現的所有情況。用戶不能訪問如果

  1. 這兩個字段保持空白。
  2. email已填充(正確或不正確的數據),但password未填充。
  3. password已填充(包含正確或不正確的數據),但未填寫emailid

我試圖覆蓋但未發生的區域是不允許用戶訪問任何字段是否填充了不正確的數據。對於這一部分,我已經寫在代碼:

if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))==true) 
    //user accesses 
else 
    if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))==false) 
     //user cannot access 

但我不知道爲什麼它沒有出現預期的行爲,並在兩個領域都充滿了不正確的數據,用戶重定向一個空白頁!

增加:我也試過

if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))) 
    //User accesses 
else if(!loginemail.equals(regemail) || (!loginpassword.equals(regpassword))) 
    //User cannot access 

但它也不能幫助!

+0

您提到:「如果兩個字段都填充了不正確的數據,請不要讓用戶訪問」。理想情況下,如果電子郵件或密碼不正確,你不應該允許登錄 – 2012-07-27 12:03:59

+0

@Hardik Mishra你是對的。我將相應地更改代碼。 – Mistu4u 2012-07-27 12:07:47

回答

-1

經過長期的嘗試,我終於得到了我的工作代碼。這裏是:

import getset.Getset; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import accessdb.Dao; 

public class LoginAuthentication extends HttpServlet { 
private static final long serialVersionUID = 1L; 


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // Authentication and Logging in The Registered User 
    Getset g=new Getset(); 
    Dao dao=new Dao(); 
    String userid=""; 
    String fname=""; 
// PrintWriter pw=response.getWriter(); 
    String loginemail=request.getParameter("loginemail"); 
    String loginpassword=request.getParameter("loginpassword"); 
    if(loginemail.equals("")||loginemail.equals(" ")||loginpassword.equals("")||loginpassword.equals(" ")) 
    { 
     response.sendRedirect("WelcomePage.jsp"); 
    } 
    else{ 
    g.setloginemail(loginemail); 
    g.setloginpassword(loginpassword); 
    try { 
     ResultSet rs=dao.loginauthentication(g); 
     while(rs.next()) //Fetching all emails and passwords from user table 
     { 
      String regemail=rs.getString("regemail"); 
      String regpassword=rs.getString("regpassword"); 
      System.out.println(""+regemail); 
      if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))) 
      { 
       System.out.println("55555"); 
       ResultSet rs1=dao.getnameid(g); 
       while(rs1.next()) //GET USERID and name FROM NEWUSER TO USE AS PRIMARY KEY 
       { 
        userid=rs1.getString("USERID"); 
        fname=rs1.getString("FNAME"); 
        System.out.println(""+userid); 

       } 

       HttpSession session = request.getSession(true); 
        session.setAttribute("USERID", userid); 
        session.setAttribute("FNAME", fname); 
       response.sendRedirect("UserHome.jsp"); 
       break; 
      } 

     } 

    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }  
} 
} 
} 

謝謝大家,誰試圖幫助我!

+0

你確定它對不正確的電子郵件和密碼有效嗎?如果它不喜歡我很驚訝 – 2012-07-27 13:57:58

+0

@HardikMishra是的。它充分運作。但你爲什麼感到驚訝?有什麼不對的嗎? – Mistu4u 2012-07-27 14:11:46

0

用一個簡單的

else 

代替

else if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))==false) 

另外,請檢查the Java operator precedence information

由於您有loginemail.equals(regemail) && (loginpassword.equals(regpassword))==false,它似乎被視爲:false && false == false - 將返回false。

+0

簡單'else'不工作! – Mistu4u 2012-07-27 12:14:19

0

您正在收到一個空白頁。這意味着代碼中的if條件中沒有任何條件正在執行以重定向到頁面。

我沒有得到你想要達到的目標。理想情況下,您應該只有兩個條件:

  1. 重定向到UsersHome的電子郵件和密碼都正確。

  2. 重定向到歡迎頁面,如果其中一個不正確。

代碼片段:

// Servlet instance variable 
String redirectPage = "WelcomePage.jsp"; 

變化

if(loginemail.equals("")||loginemail.equals(" ")||loginpassword.equals("")||loginpassword.equals(" ")) 
     response.sendRedirect("WelcomePage.jsp"); 

if(loginemail.equals("")||loginemail.equals(" ")||loginpassword.equals("")||loginpassword.equals(" ")) 
     redirectMyPage(response); 
    // There should be only one record. So, If should be used. 
    if(rs.next()) { 
     //In my opinion there is no need of this. But you haven't mentioned your DAO part. 
     // You should write DAO in such manner that if both email and password are correct, then 
     // only return a record from the database. 
     if(loginemail.equals(regemail) && (loginpassword.equals(regpassword))==true) 
     { 
      //Your other code ... 
      HttpSession session = request.getSession(true); 
      session.setAttribute("USERID", userid); 
      session.setAttribute("FNAME", fname); 
      redirectPage = UserHome.jsp"; 
     } 
     // No need of else 
    } 
    redirectMyPage(response); 
    //.. Other code 
} 

private void redirectMyPage(HttpResponse response){ 
    response.sendRedirect(redirectPage); 
    return; 
} 
+0

的確如此。我也想實現,如果任何字段爲空,用戶將被重定向到歡迎頁面。 – Mistu4u 2012-07-27 12:11:22

+0

@SubirAdhikari:查看編輯答案。不要複製粘貼全部。它的代碼片段,在您的代碼中進行調整。 – 2012-07-27 12:24:55

+0

好吧。給它一個try.Just想知道什麼是創建'redirectMyPage'額外的設施? – Mistu4u 2012-07-27 12:31:14

相關問題