Servlet Java, sesión: se crea una sesión nula, no se puede invalidar

Tengo un formulario que toma un nombre de usuario y se lo pasa a LoginServlet.javasu vez:

  1. Si no hay sesión: crea una sesión para ese nombre de usuario y reenvía la solicitud a la LoginResultView.jspque aparece un mensaje de "Inicio de sesión exitoso,% username%"
  2. Si ya hay una sesión, imprime "wow ..." e invalida la sesión anterior:

forma :

<form method="POST" action="LoginResult.do">
  <div>
     <label id="username-label" for="usr">username:</label><br/><br/>
     <input type="text"
            value="Enter a username"
            class="form-control form-input-field form- username-input-field default"
            id = "form-username-input-field" name="login-username"
     >                        
  </div>

  <button class="btn btn-success" type="submit">Sign up</button>
</form>

servlet:

public class LoginServlet extends HttpServlet {
     public void doPost(HttpServletRequest request, HttpServletResponse response) throws
                                                                        IOException, ServletException {
        String username = request.getParameter("login-username");

        response.setContentType("text/html");
        HttpSession session = request.getSession(false);  

        if (session==null)  {
                session = request.getSession(true);  
                session.setAttribute("loginUsername", username);
                RequestDispatcher view= request.getRequestDispatcher("view/LoginResultView.jsp");
                view.forward(request, response);
        }
        else  {
                response.getWriter().println(
                        "wow, how are you here, " + 
                        session.getAttribute("loginUsername"));
                response.getWriter().println(
                        session.getMaxInactiveInterval());
                session.invalidate();
        }

    }
}

También tengo una barra de navegación que, si no hay sesión, muestra dos botones: Iniciar sesión y Registrarse y, si hay una sesión, muestra un loginUsernameatributo asociado con esa sesión:

<% HttpSession session2 = request.getSession(false);
     if (session.getAttribute("loginUsername") != null) {
%>
          <div class="dropdown navbar-link">
              <button class="btn btn-secondary dropdown-toggle"
                     type="button" id="dropdownMenuButton"
                     data-toggle="dropdown"
                     aria-haspopup="true" aria-expanded="false">
                 <a target='_blank' href="${pageContext.request.contextPath}/Login.jsp">                              
                   <%out.println(session2.getAttribute("loginUsername"));%>
                 </a>
              </button>

              <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                 <a class="dropdown-item"
                                     target='_blank' href="${pageContext.request.contextPath}">Profile</a>
                 <a class="dropdown-item"
                     target='_blank' href="#">Link2</a>
                 <a class="dropdown-item"
                  target='_blank' href="${pageContext.request.contextPath}/LogoutResult.do">                                
                      Log out
                  </a>
              </div>
     </div>

        <%
             }
             else  {
         %>
             <a target='_blank' href="${pageContext.request.contextPath}/Login.jsp"
                class="btn btn-info" role="button">Log in
             </a>

             <a target='_blank' href="${pageContext.request.contextPath}/Login.jsp"
                               class="btn btn-info" role="button">Sign up
             </a>


        <%
             }
        %>

El problema es este: incluso si aparentemente no hay sesión (son los dos botones Iniciar sesión y Registrarse allí arriba) cuando lleno el formulario y lo envío, LoginServletsigo recibiendo un mensaje wow, how are you here, null 120(120 es un session-timeout, especificado en el archivo web.xml ) Luego, solo puedo enviar los datos del formulario enviando los mismos datos POST nuevamente (hago clic en el botón redondo Renovar y hago clic en Aceptar para guardar los datos anteriores). Solo después de eso obtengo la LogoutResultView.jsppágina.

¿Por qué pasó esto? ¿De dónde nullviene esta sesión? ¿Cómo lo soluciono?

Respuesta 1

¿Se requiere la regla de potencia de 2 en Andengine GLES2, o fue solo para GLES1? Sé que se recomienda crear su BitmapTextureAtlas con valores de ancho y alto como potencia de 2, 512x512 para ...

Estoy interesado en conocer el funcionamiento de ResultSet en profundidad. Tengo muchas dudas sobre ResultSet. como el rendimiento en cuanto a cuál es mejor. while (rs.next ()) {// itera tan bien como ...

Revisé la siguiente publicación. ¿Cuáles son los valores predeterminados utilizados en la clase StandardPBEStringEncryptor, es decir, qué algoritmo, generador de sal, no de hashing, etc.? Cualquier enlace que proporcione todos esos valores. [[1]: ...

Estoy tratando de crear múltiples Arraylist <Integer> a partir de un rango de int, pero cuando trato de omitir algunos elementos, todo está en mal estado. Dividí los números en 5 ArrayList diferentes <> y en ...