Der Unterschied zwischen getRequestURI und getPathInfo in HttpServletRequest

1. Übersicht

In diesem kurzen Tutorial werden wir den Unterschied zwischen getRequestURI () und getPathInfo () in der HttpServletRequest- Klasse diskutieren .

2. Unterschied zwischen getRequestURI () und getPathInfo ()

Die Funktion getRequestURI () gibt den vollständig angeforderten URI zurück. Dies umfasst den Bereitstellungsordner und die Servlet-Zuordnungszeichenfolge. Außerdem werden alle zusätzlichen Pfadinformationen zurückgegeben.

Die Funktion getPathInfo () gibt nur den Pfad zurück, der an das Servlet übergeben wurde . Wenn keine zusätzlichen Pfadinformationen übergeben werden, gibt diese Funktion null zurück .

Mit anderen Worten, wenn wir unsere Anwendung im Stammverzeichnis unseres Webservers bereitstellen und das Servlet anfordern, das „/“ zugeordnet ist, geben sowohl getRequestURI () als auch getPathInfo () dieselbe Zeichenfolge zurück . Andernfalls erhalten wir unterschiedliche Werte.

3. Beispielanforderung

Nehmen wir an, wir haben ein Servlet, auf das über diese URL zugegriffen werden kann , um ein besseres Verständnis der HttpServletRequest- Methoden zu erhalten :

//localhost:8080/deploy-folder/servlet-mapping

Diese Anforderung trifft das Servlet "Servlet-Mapping" in einer Webanwendung, die im "Bereitstellungsordner" bereitgestellt wird. Wenn wir für diese Anforderung getRequestURI () und getPathInfo () aufrufen , geben sie daher unterschiedliche Zeichenfolgen zurück.

Erstellen wir eine einfache doGet () - Servlet-Methode:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { PrintWriter writer = response.getWriter(); if ("getPathInfo".equals(request.getParameter("function")) { writer.println(request.getPathInfo()); } else if ("getRequestURI".equals(request.getParameter("function")) { writer.println(request.getRequestURI()); } writer.flush(); }

Schauen wir uns zunächst die Ausgabe des Servlets für getRequestURI- Anforderungen an, die mit dem Befehl curl abgerufen werden:

curl //localhost:8080/deploy-folder/servlet-mapping/request-path?function=getRequestURI
/deploy-folder/servlet-mapping/request-path 

Schauen wir uns auch die Ausgabe des Servlets für getPathInfo an :

curl //localhost:8080/deploy-folder/servlet-mapping/request-path?function=getPathInfo
/request-path

4. Fazit

In diesem Artikel haben wir den Unterschied zwischen getRequestURI () und getPathInfo () in HttpServletRequest erläutert . Wir haben es auch mit einem Beispielservlet und einer Anfrage demonstriert.

Wie immer ist das zum Testen all dieser Funktionen implementierte Servlet auf Github verfügbar.