我正在使用 servlet 和 jsp 开发一个 Web 应用程序。我有一个关于存储登录会话中多个 servlet 需要使用的数据的问题。例如,当用户登录时,我从数据库获取用户对象,并希望将其存储在某个地方,并让后续的 servlet 和 jsps 使用它,而不必再次查询数据库。我知道我必须将对象存储在全局数组中,但无法找出执行此操作的最佳方法。
我正在考虑在 web 应用程序加载时创建一个静态哈希图或其他一些数据结构,我可以使用它来存储用户对象,并将 sessionID 作为哈希图的键。
有没有更好的办法?任何帮助表示赞赏。
谢谢,
- 瓦斯
您不需要自己管理会话。 servletcontainer 会以透明的方式为你完成这件事HttpSession http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html。你通常使用HttpSession#setAttribute() http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html#setAttribute%28java.lang.String,%20java.lang.Object%29在会话范围内存储对象并HttpSession#getAttribute() http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html#getAttribute%28java.lang.String%29从会话范围中获取对象。您可以使用HttpServletRequest#getSession() http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletRequest.html#getSession%28%29获取对HttpSession
.
例如。在登录 servlet 中:
User user = userDAO.find(username, password);
if (user != null) {
request.getSession().setAttribute("user", user);
} else {
// Show error?
}
您可以稍后在同一会话中的任何 servlet 或过滤器中取回它
User user = (User) request.getSession().getAttribute("user");
if (user != null) {
// User is logged in.
} else {
// User is not logged in!
}
您甚至可以在 JSP 中通过 EL 访问它:
<p>Welcome, ${user.username}!
(假设有一个JavabeangetUsername()
method)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)