Saltar al contenido

Pasar parámetros ocultos usando response.sendRedirect ()

Solución:

La respuesta de TheNewIdiot explica con éxito el problema y la razón por la que no puede enviar atributos en una solicitud a través de una redirección. Soluciones posibles:

  1. Usando el reenvío. Esto permitirá que los atributos de solicitud se pasen a la vista y pueda usarlos en forma de ServletRequest#getAttribute o utilizando Expression Language y JSTL. Ejemplo corto (reutilizando el código de respuesta de TheNewIdiot).

    Controlador (su servlet)

    request.setAttribute("message", "Hello world");
    RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
    dispatcher.forward(request, response);
    

    Ver (su JSP)

    Usando scriptlets:

    <%
        out.println(request.getAttribute("message"));
    %>
    

    Esto es solo para fines informativos. Uso de scriptlets debe ser evitado: ¿Cómo evitar el código Java en archivos JSP ?. A continuación se muestra el ejemplo que utiliza EL y JSTL.

    <c:out value="${message}" />
    
  2. Si no puede usar el reenvío (porque no le gusta o no lo siente de esa manera o porque debe usar un redireccionamiento), una opción sería guardar un mensaje como atributo de sesión y luego redirigirlo a su vista. , recupere el atributo de sesión en su vista y quitarlo de la sesión. Recuerde tener siempre su sesión de usuario con solo datos relevantes. Ejemplo de código

    Controlador

    //if request is not from HttpServletRequest, you should do a typecast before
    HttpSession session = request.getSession(false);
    //save message in session
    session.setAttribute("helloWorld", "Hello world");
    response.sendRedirect("/content/test.jsp");
    

    Vista

    Nuevamente, mostrando esto usando scriptlets y luego EL + JSTL:

    <%
        out.println(session.getAttribute("message"));
        session.removeAttribute("message");
    %>
    
    <c:out value="${sessionScope.message}" />
    <c:remove var="message" scope="session" />
    

Generalmente, no puede enviar una solicitud POST utilizando el método sendRedirect (). Puede usar RequestDispatcher para reenviar () solicitudes con parámetros dentro de la misma aplicación web, mismo contexto.

RequestDispatcher dispatcher = servletContext().getRequestDispatcher("test.jsp");
dispatcher.forward(request, response);

La especificación HTTP establece que todas las redirecciones deben tener la forma de GET (o HEAD). Puede considerar cifrar los parámetros de la cadena de consulta si la seguridad es un problema. Otra forma es POST en el destino teniendo un formulario oculto con el método POST y enviándolo con javascript cuando se carga la página.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *