会话对象返回null
答
几个原因:
- 你把它放在会话中的错误的方式(应
session.setAttribute(key, value)
完成)。 - 另一页是在一个不同的域/上下文(并因此不使用相同的会话)。
- 东西已经失效会话(例如
session.invalidate()
)。 - 客户端不支持cookies,但您尚未添加URL重写支持。
- 你访问它在会话中的错误的方式(应
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>
..with映射/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
对象仍然不存在,那么问题就在于别的地方。