La differenza tra getRequestURI e getPathInfo in HttpServletRequest

1. Panoramica

In questo breve tutorial, discuteremo la differenza tra getRequestURI () e getPathInfo () nella classe HttpServletRequest .

2. Differenza tra getRequestURI () e getPathInfo ()

La funzione getRequestURI () restituisce l'URI richiesto completo. Ciò include la cartella di distribuzione e la stringa di mappatura servlet. Restituirà anche tutte le informazioni aggiuntive sul percorso.

La funzione getPathInfo () restituisce solo il percorso passato al servlet . Se non vengono trasmesse ulteriori informazioni sul percorso, questa funzione restituirà null .

In altre parole, se distribuiamo la nostra applicazione nella radice del nostro server web e richiediamo il servlet mappato su "/", sia getRequestURI () che getPathInfo () restituiranno la stessa stringa . Altrimenti, otterremo valori diversi.

3. Richiesta di esempio

Per comprendere meglio i metodi HttpServletRequest , supponiamo di avere un servlet a cui è possibile accedere tramite questo URL:

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

Questa richiesta colpirà il servlet "servlet-mapping" in un'applicazione web distribuita all'interno di "deploy-folder". Pertanto, se chiamiamo getRequestURI () e getPathInfo () per questa richiesta, restituiranno stringhe diverse.

Creiamo un semplice metodo servlet doGet () :

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(); }

In primo luogo, diamo un'occhiata all'output del servlet per le richieste getRequestURI recuperate dal comando curl:

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

Allo stesso modo, diamo un'occhiata all'output del servlet per getPathInfo :

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

4. Conclusione

In questo articolo, abbiamo spiegato la differenza tra getRequestURI () e getPathInfo () in HttpServletRequest . Lo abbiamo anche dimostrato con un servlet e una richiesta di esempio.

Come sempre, il servlet implementato per testare tutte queste funzioni è disponibile su Github.