Explicación detallada del reenvío de solicitudes y la redirección de solicitudes en javaweb (hay casos y problemas de ruta)

Tabla de contenido

solicitud de reenvío

solicitar redirección

Solicitud de reenvío y solicitud de problemas de ruta de redirección


  • solicitud de reenvío

Reenvío de solicitudes : el cliente envía una solicitud y, después de ser procesada por el servidor, reenvía una página web frontal u otro Servlet, que es esencialmente la misma solicitud y compartirá los datos en el dominio de la solicitud.

Características:

  1. La barra de direcciones del navegador no cambia.
  2. No importa cuántas veces se haya reenviado, es la misma solicitud
  3. Comparten datos en el dominio de solicitud
  4. Se puede reenviar al directorio WEB-INF
  5. Sin acceso directo a archivos externos

La dirección predeterminada en el Servlet del servidor Tomcat: http://ip:8080/nombre del proyecto     

La ruta comienza con una barra inclinada para representar una ruta absoluta; de lo contrario, es una ruta relativa

La primera barra en la ruta representa: http://ip:8080/nombre del proyecto

   

caso:

html:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Título</title> 
</head> 
<body> 
<form action="/web02/servlet1 " method="get">
    账号: <input type="text" name="username"><br>
    密码: <input type="password" name="password"><br>
    兴趣爱好<input type=" radio" name="hobby" value="美女">美女<input type="radio" name="hobby" value="帅哥">帅哥<br> <input type="enviar"> 
    </formulario> 
< 
/ cuerpo> 
</html>

servlet:

public class servlet1 extends HttpServlet { 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
         //Obtener el parámetro solicitado 
        String nombre de usuario = req.getParameter("username"); 
        String contraseña = req.get Parámetro(" contraseña "); 
        System.out.println(nombre de usuario+"\t"+contraseña); 

        //Solicitud de sello 1 (establecer variables globales) 
        req.setAttribute("clave","completar"); 

        //Reenvío de solicitud: no se puede completar Salto externo, puede acceder a recursos internos, 
        //req.getRequestDispatcher("/servlet2").forward(req,resp); 
       req.getRequestDispatcher("http://www.baidu.com").forward(req,resp) ); 
        // Solicitar redirección. Se pueden implementar saltos externos.
       //resp.sendRedirect("http://www.baidu.com");  


    } 
}

Error de reenvío de solicitud para acceder a recursos externos:

Estado HTTP 404 - /web02/http://www.baidu.com

tipo  Informe de estado

mensaje  /web02/http://www.baidu.com

descripción  El recurso solicitado no está disponible.


Apache Tomcat/8.0.50

  • solicitar redirección

Solicitar redirección: el cliente envía una solicitud al servidor y luego el servidor devuelve una nueva dirección al cliente para solicitar la nueva dirección. Esencialmente dos solicitudes diferentes.

Características:

  1. La barra de direcciones del navegador cambiará
  2. Esencialmente dos solicitudes diferentes
  3. No comparta datos en los campos de solicitud
  4. No se puede acceder a los recursos en WEB-INF
  5. Puede acceder a recursos fuera del proyecto

caso:

El código de front-end es el mismo que el anterior.

clase pública servlet1 extiende HttpServlet { 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
        req.setCharacterEncoding("utf-8"); 
        resp.setCharacterEncoding("utf-8"); 8"); 
         / /Obtenga la 
        cadena de parámetros solicitada username = req.getParameter("username"); 
        String password = req.getParameter("password"); 
        System.out.println(username+"\t"+password); 
        //Sello de solicitud 1 ( establecer variable global) 
        req.setAttribute("key","complete"); 

        //saltar a servlet2 
// req.getRequestDispatcher("WEB-INF/form.jsp").forward(req,resp);
// req.getRequestDispatcher("http://www.baidu.com").forward(req,resp); 
 // resp.sendRedirect("WEB-INF/table.jsp"); 
          resp.sendRedirect("http://www.baidu.com"); 


    } 
}

El acceso a WEB-INF informa de un error y el acceso al sitio web de Baidu puede ser exitoso.

  • Solicitud de reenvío y solicitud de problemas de ruta de redirección

  • Ruta absoluta: comienza con /

El / de redirección de solicitud significa: http://ip del servidor: puerto/
respuesta.sendRedirect("/servlet2");
la dirección es: http://localhost:8080/servlet2


El / para el reenvío de solicitudes significa: http://ip del servidor:puerto/nombre del proyecto
request.getRequestDispatcher("/servlet2").forward(solicitud, respuesta);
la dirección es: http://localhost:8080/nombre del proyecto/ servlet2

camino relativo:

Solicitud de redirección: respuesta.sendRedirect("servlet2")

Genere una ruta relativa: http://localhost:8080/nombre del proyecto/servlet2

Reenvío de solicitudes: generar una URL completa en el caso de una ruta relativa es lo mismo que redirigir

Supongo que te gusta

Origin blog.csdn.net/weixin_45533131/article/details/126827632
Recomendado
Clasificación