如何保留登录信息以供后续使用

时间:2011-09-21 10:25:55

标签: html jsp redirect parameters

我在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")); %>
.
.

目前的问题是,null值是我从homepage.jsp获得的。我该如何解决这个问题?

谢谢!

3 个答案:

答案 0 :(得分:1)

首先我会说 - Avoid Java code in Jsp.不要使用JSP and Scriptlets来执行数据库操作。 始终使用Servlets

您可以使用Jsp隐式标记(actions),ELJSTL标记lib来格式化或显示数据。

根据您的问题,您必须使用session对象将数据存储在一个页面中,并在另一个页面上使用它们。

答案 1 :(得分:0)

我同意将此代码放入servlet中。传递参数的快速简单方法如下:

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

答案 2 :(得分:0)

首先让我澄清一下Request参数。通常,请求参数将在请求范围内。因此,当您在“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中,您可以通过会话来显示电子邮件。

当然回复太迟了。我想这可能有助于有人面对同样的问题。