我在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获得的。我该如何解决这个问题?
谢谢!
答案 0 :(得分:1)
首先我会说 - Avoid Java code in Jsp.不要使用JSP and Scriptlets
来执行数据库操作。 始终使用Servlets
。
您可以使用Jsp隐式标记(actions
),EL
和JSTL
标记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中,您可以通过会话来显示电子邮件。
当然回复太迟了。我想这可能有助于有人面对同样的问题。