我为我的项目“学生信息系统”创建了一个登录页面,其中包含用户名,用户ID和密码的文本字段。我试图在会话对象中存储用户名和用户ID的值,并在另一个页面中使用它但是它正在返回空值。
答案 0 :(得分:0)
有几个原因:
session.setAttribute(key, value)
完成)。session.invalidate()
)。session.getAttribute(key)
或${key}
完成。以下login.jsp
示例..
<form action="login" method="post">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="login">
<span class="error">${error}</span>
</form>
<p>Debug info: your current session ID is ${pageContext.session.id}</p>
..使用映射在/login
上的servlet,doPost()
中基本上有以下内容。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userDAO.find(username, password);
if (user != null) {
request.getSession().setAttribute("user", user);
response.sendRedirect(response.encodeRedirectURL("home.jsp"));
} else {
request.setAttribute("error", "Unknown login, try again");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
..和home.jsp
看起来像这样..
<p>Welcome, ${user.name}!</p>
<p>Debug info: your current session ID is ${pageContext.session.id}</p>
..应该正常工作。
确保两个页面中的会话ID都是相同。出于调试目的,您可以按${pageContext.session.id}
查看它,如上面的JSP代码片段所示。如果它是相同的并且User
对象仍然不存在,则问题出在其他地方。