[JavaWeb] Reenvío y redireccionamiento de solicitudes

        En los últimos dos días, he abordado los dos conceptos de reenvío de solicitudes y redirección. Hoy resumiré con un ejemplo.

Reenvío de solicitudes: (el navegador puede considerarse como el destino y el servidor puede considerarse como el tren en camino al destino )

       Por ejemplo, quería ir a la estación Langfang, así que busqué boletos en línea y descubrí que podía tomar un tren en la estación Binhai y bajarme en la estación Tianjin, luego retroceder en Tianjin y luego ir a Langfang.

Solicitar funciones de reenvío:

     1) El navegador envió una solicitud ( salga directamente de Binhai )

     2) Servlet puede compartir solicitud ( Binhai -> Tianjin, Tianjin -> Langfang )

     3) La barra de direcciones no cambia ( personas en Binhai, autos hechos en Binhai )

     4) La barra de direcciones del navegador muestra la dirección de la primera visita ( dirección de origen )

     5) Puede saltar a los recursos internos del proyecto (transferir dentro de la estación)

     6) La segunda solicitud es para la ruta interna ( transferencia dentro de la estación)

     7) El servidor envía la segunda solicitud (transferencia dentro de la estación)

Solicitar código de reenvío:

Archivo web.xml: (dos servlets, la prueba usa desarrollo xml, el resultado usa desarrollo de anotaciones)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.itheima.Test.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
</web-app>

testServlet:

package com.itheima.Test;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class TestServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // System.out.println("我在滨海站出发");
        //请求转发
        /*
        * 1.获得请求调度器
        * */
        request.setAttribute("first","我在滨海站出发");
        RequestDispatcher rd = request.getRequestDispatcher("result");
        /*
        * 2.调用另一个资源
        * */
        rd.forward(request,response);
    }
}

resultServlet:

package com.itheima.Test;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "ResultServlet",urlPatterns="/result")
public class ResultServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取test穿过来的信息
        System.out.println(request.getAttribute("first"));
        System.out.println("到达天津换乘");
        System.out.println("到达廊坊车站");
    }
}

Mostrar resultado:

La barra de dirección de prueba no ha cambiado.

Redirigir:

        El editor también llevó el automóvil a la estación Langfang, pero yo no quería retroceder. Era perezoso y tenía miedo de perderme. Cuando fui a la estación Binhai, descubrí que no había tren directo a Langfang, así que dejé de comprar boletos en Binhai. El conductor dijo que Tanggu tenía un tren directo a Langfang, así que renuncié a Binhai. Tome el automóvil y luego vaya a la estación Tanggu para tomar el automóvil a Langfang.

Funciones de redirección:

     1) El navegador ha enviado más de dos solicitudes (las personas están en Binhai, pero primero van a Binhai sin automóvil y luego envían una solicitud para ir a Tanggu a dar un paseo )

     2) El servlet no puede compartir la solicitud ( quería estar en Binhai -> Langfang, y luego no hay automóvil, así que no puedo llevar esta solicitud de Binhai -> Langfang, ir a Tanggu en automóvil, ir a Tanggu, tienes que traer Tanggu -> Solicitud de Langfang)

     3) La barra de direcciones cambia ( última salida en la estación Tanggu )

     4) La barra de direcciones del navegador muestra la dirección de la segunda visita (la dirección de origen original es Binhai, pero la dirección de origen final ha cambiado)

     5) Puede saltar a cualquier recurso del proyecto (el Binhai no tiene acceso directo, puede ir a Tanggu una vez o ir a Tianjin una vez)

     6) La segunda solicitud es la ruta absoluta (el lugar de embarque final)

     7) El navegador envió la segunda solicitud (el editor cambió la última dirección de bus)

Código de redirección:

¡La configuración del archivo xml permanece sin cambios!

código testServlet:

package com.itheima.Test;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class TestServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("first","计划滨海出发");
        response.setStatus(302);
        request.setAttribute("second","滨海没有直达,去塘沽坐车");
        response.setHeader("location","http://localhost:8080/day09/result");
    }
}

resultServlet código:

package com.itheima.Test;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "ResultServlet",urlPatterns="/result")
public class ResultServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(request.getAttribute("second"));
        System.out.println("我再塘沽出发");
        System.out.println("到达廊坊车站");
    }
}

La barra de direcciones cambia probando:

                             Si hay alguna deficiencia, espero que pueda corregirme.

Supongo que te gusta

Origin blog.csdn.net/weixin_43267344/article/details/108465552
Recomendado
Clasificación