我正在使用servlets和jsps开发一个Web应用程序.我有一个关于存储我需要在登录会话中跨多个servlet使用的数据的问题.例如,当用户登录时,我从db获取用户对象并希望将其存储在某处并让后续的servlet和jsps使用它而无需再次查询db.我知道我必须将对象存储在全局数组中,但我无法找到最佳方法.
我正在考虑在webapp加载时创建静态hashmap或其他一些数据结构,我可以使用它来存储用户对象,sessionID作为hashmap的关键字.
有没有更好的办法?任何帮助表示赞赏.
谢谢, - Vas
您不需要自己管理会话.servletcontainer将以透明的方式为您做到HttpSession.您通常用于HttpSession#setAttribute()在会话范围中存储对象并从会话范围HttpSession#getAttribute()中获取对象.你可以HttpServletRequest#getSession()用来获取对它的引用HttpSession.
例如在登录servlet中:
User user = userDAO.find(username, password);
if (user != null) {
request.getSession().setAttribute("user", user);
} else {
// Show error?
}
Run Code Online (Sandbox Code Playgroud)
您可以稍后在任何servlet中获取它或在同一会话中过滤
User user = (User) request.getSession().getAttribute("user");
if (user != null) {
// User is logged in.
} else {
// User is not logged in!
}
Run Code Online (Sandbox Code Playgroud)
你甚至可以在JSP中通过EL访问它:
<p>Welcome, ${user.username}!
Run Code Online (Sandbox Code Playgroud)
(假设有一个Javabean getUsername()方法)
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |