【问题标题】:jsp directly jumps to html rather than through servletjsp直接跳转到html而不是通过servlet
【发布时间】:2018-09-17 08:56:31
【问题描述】:

我制作了一个具有 loginlogout 功能的网络应用程序。

我第一次登录和注销似乎很正常。

但是当我换另一个账号,重复以上操作时,

注销操作直接跳转到index.html而不是通过

LogoutServlet.java。所以会话仍然有效。

你知道原因吗?

如果你能告诉我原因,我将不胜感激。

我的关键代码如下。

LoginServlet.java

HttpSession session = request.getSession(false);
        if(session!=null) 
            session.setAttribute("LoginUser", user);
        request.getRequestDispatcher("/WEB-INF/jsp/home.jsp")
                   .forward(request, response);

home.jsp

<a href="Logout.action">Logout</a>

LogoutServlet.java

@WebServlet("/Logout.action")
protected void doGet(...) {
    HttpSession session = request.getSession(false);
    if(session!=null) {
        session.removeAttribute("LoginUser");
        session.invalidate();
    }
    request.getRequestDispatcher("/index.html").forward(request, response);
}

你可以在我的网站上试试。 http://anwuli.cn/HelloWorld

提供了 2 个测试帐号。

格式:用户名和密码

第一:admin&123456

二:安鹏&123456

【问题讨论】:

    标签: java jsp session servlets httpsession


    【解决方案1】:

    正如前面的答案所提到的。当您检查是否存在以下会话时,如果一个新会话不存在,则您不是在创建一个新会话:

    request.getSession(false)
    

    因此,当已登录帐户尝试注销时,if 块不正确:

     if(session!=null) {
            session.removeAttribute("LoginUser");
            session.invalidate(); // this code never runs...
        }
    

    您需要使用:

    HttpSession session = (request.getSession());
    

    HttpSession session =  request.getSession(true)
    

    此外,只要有新用户连接到您的网站(即使他们尚未登录),就会创建一个会话。

    所以你需要像这样检查属性是否为空:

     if(null == session.getAttribute("LoginUser")){  
             //no logged in user
             RequestDispatcher rd=request.getRequestDispatcher("login.jsp"); //replace with your login page  
               rd.forward(request,response);    
               return;
        }else{
             //user attribute is not null so logout
            session.invalidate();
         }
    

    【讨论】:

      【解决方案2】:

      您正在使用HttpSession session = request.getSession(false);,因此您不会在LoginServlet.java 中创建任何会话。

      您在哪里创建第一个会话?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 2016-10-07
        • 1970-01-01
        • 2019-03-22
        相关资源
        最近更新 更多