2011-09-21 86 views
0

對JSP編程來說我相當新,我正在製作這個Web應用程序,用戶需要登錄。我已經完成了用戶的註冊,但是當用戶登錄時我遇到了問題。如何保留登錄信息以供後續使用

我遇到的主要問題是,即使用戶能夠成功登錄,登錄表單中的信息也會丟失。我需要保留登錄信息,以便我可以在他/她的會話期間使用Web應用程序訪問用戶的信息。

這裏是我現在有代碼:

index.jsp的(這是其中示出登錄表單)

<form name="Login Form" action="login.jsp"><table> 
    <tbody> 
    <tr> 
     <td><input type="text" name="emaillogin" value="email"/></td> 
     <td><input type="text" name="passlogin" value="password"/></td> 
    </tr> 
    <tr> 
     <td colspan="2" align="RIGHT><input type="submit" value="login" name="Login"/></td> 
    </tr> 
    </tbody></table></form> 

的login.jsp(此執行檢查用戶是否是否有效,並重定向到用戶主頁,如果有效)

<%! 
     String email = ""; 
     String password = ""; 
    %> 
    <% 

     List users = new ArrayList(); 

     Class.forName("com.mysql.jdbc.Driver"); 
     Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db", "root", "pass"); 
     Statement stmt = con.createStatement(); 

     ResultSet result = stmt.executeQuery("SELECT email,password FROM users"); 

     while (result.next()) { 
      users.add(result.getString(1)); 
      users.add(result.getString(2)); 
     } 
     con.close(); 

     email = request.getParameter("emaillogin"); 
     password = request.getParameter("passlogin"); 

     int hasUser = 0; 
     Iterator<String> it = users.iterator(); 
     while (hasUser == 0 && it.hasNext()) { 
      if (email.equals(it.next()) && password.equals(it.next())) { 
       hasUser = 1; 
      } 
     } 

     if (hasUser == 1) { 
      response.sendRedirect("homepage.jsp"); 
     } else { 
      response.sendRedirect("index.jsp"); 
     } 

    %> 

homepage.jsp(這是用戶登錄,顯示他/她的電子郵件地址後重定向到)

. 
. 
<% out.println("Logged in as: " + request.getParameter("email")); %> 
. 
. 

目前的問題是,空值是什麼,我從homepage.jsp得到。我怎麼解決這個問題?

謝謝!

+0

您使用的是哪種Java框架?除非這是爲了學習而工作,否則看起來您正在重新創建功能。 – atrain

回答

1

首先我會說 - Avoid Java code in Jsp.請勿使用JSP and Scriptlets來執行數據庫操作。 總是使用Servlets

您可以使用Jsp隱式標籤(actions),ELJSTL標籤庫來格式化或顯示數據。

根據您的問題,您必須使用session對象將數據存儲在一個頁面中並在另一頁上使用它們。

0

我同意將這段代碼放到一個servlet中。一個快速簡單的方法來傳遞參數如下:

response.sendRedirect("homepage.jsp?email="+email); 
0

首先讓我給一個清晰的請求參數。通常,請求參數將在請求範圍內。所以當你在「Login.jsp」中提問時,它會給你電子郵件,密碼以及你從表單提供的字段。但是當你發送重定向到主頁時,這些參數將不會被攜帶。所以,當你發現用戶名和密碼是正確的/有效的時候,將它們放在會話中。這樣您就不必手動將參數傳遞給任何請求。相反,您可以直接從「會話」對象中獲取用戶名並顯示您想要的位置。會議期間會一直存在,直到會議結束。

int hasUser = 0; 
    Iterator<String> it = users.iterator(); 
    while (hasUser == 0 && it.hasNext()) { 
     if (email.equals(it.next()) && password.equals(it.next())) { 
      hasUser = 1; 
     } 
    } 

    if (hasUser == 1) { 

     session.setAttribute("email", email); 
     response.sendRedirect("homepage.jsp"); 
    } else { 
     response.sendRedirect("index.jsp"); 
    } 

通常這是實時的過程。當然不推薦Java代碼在這裏使用。改用JSTl,EL標籤。在homepage.jsp中,您可以通過從會話中獲取來顯示電子郵件。

當然,它太晚回覆。我想這可能會幫助有人面臨同樣的問題。

相關問題