Ausführliche Erläuterung der Anfrageweiterleitung und Anfrageumleitung in Javaweb (es gibt Fälle und Pfadprobleme)

Inhaltsverzeichnis

Weiterleitung anfordern

Umleitung anfordern

Probleme mit der Anforderungsweiterleitung und dem Anforderungsumleitungspfad


  • Weiterleitung anfordern

Anfrageweiterleitung : Der Client sendet eine Anfrage und leitet nach der Verarbeitung durch den Server eine Front-End-Webseite oder ein anderes Servlet weiter, das im Wesentlichen dieselbe Anfrage ist und die Daten in der Anfragedomäne teilt.

Merkmale:

  1. Die Adressleiste des Browsers ändert sich nicht
  2. Egal wie oft sie weitergeleitet wurde, es ist die gleiche Anfrage
  3. Sie teilen Daten in der Anforderungsdomäne
  4. Kann an das WEB-INF-Verzeichnis weitergeleitet werden
  5. Kein direkter Zugriff auf externe Dateien

Die Standardadresse im Servlet des Tomcat-Servers: http://ip:8080/Projektname     

Der Pfad beginnt mit einem Schrägstrich, um einen absoluten Pfad darzustellen, andernfalls handelt es sich um einen relativen Pfad

Der erste Schrägstrich im Pfad steht für: http://ip:8080/Projektname

   

Fall:

html:

<!DOCTYPE html> 
<html lang="de"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Titel</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="submit"> 
    </form> 
< 
/ Körper> 
</html>

Servlet:

public class servlet1 erweitert HttpServlet { 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
         //Angeforderten Parameter abrufen 
        String username = req.getParameter("username"); 
        String password = req.get Parameter(" Kennwort "); 
        System.out.println(Benutzername+"\t"+Kennwort); 

        //Stempelanforderung 1 (globale Variablen setzen) 
        req.setAttribute("key","complete"); 

        //Anforderungsweiterleitung: kann nicht abgeschlossen werden Externer Sprung, Sie können auf interne Ressourcen zugreifen, 
        //req.getRequestDispatcher("/servlet2").forward(req,resp); 
       req.getRequestDispatcher("http://www.baidu.com").forward(req,resp );  
        // Umleitung anfordern. Externe Sprünge können implementiert werden.
       //bzw. sendRedirect("http://www.  baidu.com"); 


    } 
}

Fehler bei der Anfrageweiterleitung zum Zugriff auf externe Ressourcen:

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

Geben Sie  Statusbericht ein

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

Beschreibung  Die angeforderte Ressource ist nicht verfügbar.


Apache Tomcat/8.0.50

  • Umleitung anfordern

Anforderungsumleitung: Der Client sendet eine Anforderung an den Server, und der Server gibt dann eine neue Adresse an den Client zurück, um die neue Adresse anzufordern. Im Wesentlichen zwei verschiedene Anfragen.

Merkmale:

  1. Die Adressleiste des Browsers ändert sich
  2. Im Wesentlichen zwei verschiedene Anfragen
  3. Teilen Sie keine Daten in Anfragefeldern
  4. Zugriff auf Ressourcen unter WEB-INF nicht möglich
  5. Kann auf Ressourcen außerhalb des Projekts zugreifen

Fall:

Der Front-End-Code ist derselbe wie der vorherige

öffentliche Klasse servlet1 erweitert HttpServlet { 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
        req.setCharacterEncoding("utf-8"); 
        resp.setCharacterEncoding("utf-8"); 8"); 
         / /Angeforderten Parameter abrufen 
        String username = req.getParameter("username"); 
        String password = req.getParameter("password"); 
        System.out.println(username+"\t"+password); 
        //Stempelanforderung 1 ( globale Variable setzen) 
        req.setAttribute("key","complete"); 

        //springe zu 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"); 


    } 
}

Der Zugriff auf WEB-INF meldet einen Fehler und der Zugriff auf die Baidu-Website kann erfolgreich sein.

  • Probleme mit der Anforderungsweiterleitung und dem Anforderungsumleitungspfad

  • Absoluter Pfad: Beginnen Sie mit /

Das / der Anforderungsumleitung bedeutet: http://server ip:port/
response.sendRedirect("/servlet2");
die Adresse lautet: http://localhost:8080/servlet2


Das / für die Anfrageweiterleitung bedeutet: http://server ip:port/project name
request.getRequestDispatcher("/servlet2").forward(request, response);
die Adresse lautet: http://localhost:8080/project name/ Dienst2

relativer Pfad:

Anfrageumleitung: response.sendRedirect("servlet2")

Generieren Sie einen relativen Pfad: http://localhost:8080/Projektname/servlet2

Weiterleitung anfordern: Die Generierung einer vollständigen URL bei einem relativen Pfad entspricht einer Weiterleitung

Ich denke du magst

Origin blog.csdn.net/weixin_45533131/article/details/126827632
Empfohlen
Rangfolge