【问题标题】:Checking for sessions in servlet or jsp检查 servlet 或 jsp 中的会话
【发布时间】:2015-07-18 14:34:28
【问题描述】:

假设我有一个处理登录的 servlet。登录成功后,用户将为该用户创建一个会话。然后重定向到主页。

假设主页有一个“查看全部”链接。此链接调用 servlet viewall.html 来处理数据库中的所有数据,然后重定向到将显示来自 servlet 的数据的 jsp 页面 (viewall.jsp)。

从 servlet viewall.html 到 jsp viewall.jsp,我希望有如下代码:

if (session attribute user is null) {
    // redirect to the login page
} else {
    // if in the servlet, retrieve the data from the database
    // if in the jsp, display the data
}

在 servlet 或 jsp 上检查是否存在会话的更好方法是什么?注意我知道过滤器,假设项目不能使用过滤器。

【问题讨论】:

    标签: java jsp session servlets


    【解决方案1】:

    使用过滤器的 servlet 也是如此。一般的方式是:

    • 在处理登录您的 servlet 中

      • 创建一个新会话

        Session old = request.getSession(false); // first invalidate old if it exists
        if (old != null) {
            session.invalidate();
        }
        Session session = request.getSession(true); // next create one
        
      • 将用户ID作为会话的属性

        session.setAttribute("USERID", userId);
        
    • 然后在你想知道你是否有注册用户的元素(servlet的过滤器)中:

      Session = request.getSession(false);
      if ((session == null) or (session.getAttribute("USERID") == null)) {
          response.sendRedirect(homeUrl);
          return; // no need to process further (if in a filter no need to go down the chain)
      }
      
    • 在servlet中控制你有登录用户后,转发到jsp

      request.getRequestDispacher("/path/to/displayer.jsp").forward(request, response);

    就是这样……

    【讨论】:

      【解决方案2】:

      如果您想在创建之前检查这一点,请这样做:

      HttpSession session = request.getSession(false);
       if (session == null) {
        // Not created .
        session = request.getSession();
        } else {
      // Already created.
        }
      

      如果你不关心创建后检查这个,那么你也可以这样做:

      HttpSession session = request.getSession();
       if (session.isNew()) {
        // newly  created.
       } else {
      // Already created.
        }
      

      【讨论】:

      • 但是我应该在哪里检查呢?在 servlet 上,在 jsp 上,还是两者都可以?
      • 是的,您可以在 Servlet 和 JSP 上使用。在 JSP 页面中,您也可以使用 servlet 代码 insde 标记。
      • 所以你的意思是如果在 servlet 或 jsp 上检查会话只是个人喜好?
      • 是的,如果您想了解更多信息,请前往:stackoverflow.com/questions/5649722/…
      【解决方案3】:
      <% if(session.getAttribute("sessionname")==null)
      
      {
      response.sendRedirect("index.jsp");
      else
      {
      String activeUser=session.getAttribute("sessionname").toString();
      }
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2011-02-27
        • 2012-11-18
        • 2013-04-12
        • 2012-12-07
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        • 2013-03-27
        • 2013-07-16
        相关资源
        最近更新 更多