Java:如何处理servlet中的多个会话

时间:2012-07-10 14:10:08

标签: java session java-ee servlets session-cookies

我是Java EE的新手。我有一个网站,要求用户登录,并在用户登录后,我希望用户看到他/她自己的项目(例如:购物车)。

这意味着我必须使用会话来完成它。但是我该如何处理多个会话?

例如,多个用户是否登录到系统以及同一个servlet?但是,我可以在一个servlet中保留多个会话吗?我是否记录下每一个?它是如何工作的?

有人可以举个例子吗?

3 个答案:

答案 0 :(得分:9)

在servlet中,您可以访问HttpServletRequest,为您提供getSession()方法。此方法返回会话对象(主要是键值映射),每个用户都不同。

如果您在该地图中添加了某些内容(例如购物车),您可以稍后检索它 - 但仅当同一用户再次访问该应用程序时(不一定是相同的servlet)。

public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException {

    HttpSession session = request.getSession();
    session.getAttribute("cart");
    //...
    session.setAttribute("cart", whateverYouWant);

会话在servlet容器中维护,并按会话ID(通常是cookie)进行查找。你不必自己实现任何东西。

答案 1 :(得分:2)

是的,你可以。 servlet容器将为您跟踪它们,因此您不必自己进行该簿记。可以从servlet代码中的Session获取HttpServletRequest对象。由于您的代码一次只需要关注一个请求,因此处理多个会话通常不会太痛苦。

答案 2 :(得分:0)

要处理在Servlet中登录的多个用户,请为每次登录创建一个会话

HttpSession session = request.getSession();

public HttpSession getSession()   返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个会话。

每个会话都会识别用户唯一

现在,如果用户想要更改数据库中的某些数据,那么在创建会话之后,将该会话的属性设置为可以唯一地标识数据库中用户的信息,例如, email_id as:

session.setAttribute("id",email_id of user);

稍后可以在另一个Servlet / JSP中检索此属性:

String email_id = session.getAttribute("id");

此属性有助于识别向服务器发送请求以更新数据库中的数据或执行其他操作的用户。 有关会话的更多方法,请参阅以下链接: http://www.javatpoint.com/http-session-in-session-tracking