2014-02-12 139 views
0

我建立一個Web應用程序我已經將被重定向到一個servlet登錄JSP表單...登錄重定向錯誤

我的servlet代碼:

Login login=new Login(); 
     login.setUserName(request.getParameter("txtUsername")); 
     login.setPassWord(request.getParameter("txtPassword")); 

     LoginService ls=new LoginService(); 
     ls.loginValidate(login); 
     RequestDispatcher rd=request.getRequestDispatcher("/Login.jsp"); 
     rd.forward(request, response); 
} 

,並從他們的服務類:

我的服務類代碼:

public class LoginService { 
    Login login=null; 

    public Login loginValidate(Login login) { 
     validateLogin(login); 
     return login; 
    } 

    private void validateLogin(Login login) { 
     this.login=login; 
     if(login!=null){ 
     LoginDAO ld=new LoginDAO(); 
     DataSource dataSource=new DataSource(); 
     ld.setDataSource(dataSource); 
     ld.validate(login); 

    } 
    } 
} 


    } 

,並從他們到DAO

我LoginDAO:

public class LoginDAO { 
    private DataSource dataSource; 
    public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
    } 

    public boolean validate(Login login){ 
     boolean status=true; 
     String sql="select * from Login where UserName=? and PassWord=?"; 

     Connection conn = null; 
     try{ 
     conn = dataSource.createConnection(); 
     PreparedStatement ps = conn.prepareStatement(sql); 
     ps.setString(1,login.getUserName()); 
     ps.setString(2,login.getPassWord()); 
     ResultSet rs=ps.executeQuery(); 
     status=rs.next(); 
     } 

     catch (SQLException e) { 
      throw new RuntimeException(e); 

     } finally { 
      if (conn != null) { 
       try { 
        conn.close(); 
       } catch (SQLException e) {} 
      } 
     } 
     return status; 
} 
} 

當我輸入正確的用戶名和密碼的重定向到成功頁面(Login.jsp頁面在這種情況下),甚至如果我錯型聯合國和PW其重定向我不明白爲什麼因爲在servlet中調用方法後,我已經將它發送到login.jsp,所以在任何情況下它都會將我重定向到成功頁面。如何解決此...需要幫助..在此先感謝...

+0

stackoverflow.com/questions/21720397/how-to-write-custom-exceptions-for-login-in-java/21720945這是你之前問同樣的quetion。 –

+0

是的,我沒有得到預期的答案,所以我提煉它排除自定義的異常,併發布了一個新的問題... – user3222718

+0

相同的建議正在像我以前的回答你。你有沒有明白我在那個答案中要說的話? –

回答

1

對於您在LoginDAO中的驗證方法,如果表中不存在用戶名和密碼,它將返回一個空的結果集。根據結果​​集是否爲空或將布爾值返回給Servlet。

public boolean validate(Login login) 
{ 
    boolean status=true; 
... 
... 
... 
ResultSet rs=ps.executeQuery(); 

if (!rs.next()){ 
status=false; 
} 

return status; 

} 

在servlet中,你可以得到一個參數返回的值,並根據其值重定向到相應的成功或錯誤頁面

Boolean check=ls.loginValidate(login); 

if(check==true) 
{ 
     RequestDispatcher rd=request.getRequestDispatcher("/Login.jsp"); 
     rd.forward(request, response); 
} 
else 
{ 
RequestDispatcher rd=request.getRequestDispatcher("/error.jsp"); 
     rd.forward(request, response); 
} 

的login服務類只能有1方法loginValidate其中應返回一個布爾

public boolean loginValidate(Login login) { 

Boolean check=false; 

     if(login!=null){ 
     LoginDAO ld=new LoginDAO(); 
     DataSource dataSource=new DataSource(); 
     ld.setDataSource(dataSource); 
     check=ld.validate(login); 
     } 
return check; 
    } 
+0

我試過這種方式在布爾檢查= ls.loginValidate(登錄);它顯示一個錯誤loginValidate應該改變爲布爾值,所以我改變了,並使其返回true;但仍然是相同的問題 – user3222718

+1

那是因爲LoginService中的loginValidate()方法返回一個登錄類型...更改該方法返回類型爲布爾值。我不明白爲什麼需要創建2個具有類似混淆名稱的方法。我認爲只有1個方法loginValidate()如所編輯的答案中所示應該足夠了。 – Crusaderpyro

+0

不,我改變了這種方法只布爾,並使其返回true;在它返回登錄對象之前,現在我將其更改爲布爾值,但同樣的事情發生在輸出中沒有變化......如果您仍然被重定向到登錄,則返回 – user3222718

0

您有一個驗證方法返回一個布爾值。當密碼不匹配時,使用此方法結果將用戶重定向回登錄頁面,並顯示一些錯誤消息。

Ps。這是不安全的登錄存儲在數據庫中的密碼。您必須將其加密存儲。大多數容器都有內置身份驗證的解決方案。