La différence entre getRequestURI et getPathInfo dans HttpServletRequest

1. Vue d'ensemble

Dans ce rapide tutoriel, nous discuterons de la différence entre getRequestURI () et getPathInfo () dans la classe HttpServletRequest .

2. Différence entre getRequestURI () et getPathInfo ()

La fonction getRequestURI () renvoie l'URI complet demandé. Cela inclut le dossier de déploiement et la chaîne de mappage de servlet. Il renverra également toutes les informations de chemin supplémentaires.

La fonction getPathInfo () renvoie uniquement le chemin passé au servlet . Si aucune information de chemin supplémentaire n'est transmise, cette fonction retournera null .

En d'autres termes, si nous déployons notre application à la racine de notre serveur Web et que nous demandons le servlet mappé sur «/», getRequestURI () et getPathInfo () renverront la même chaîne . Sinon, nous obtiendrons des valeurs différentes.

3. Exemple de demande

Afin d'avoir une meilleure compréhension des méthodes HttpServletRequest , disons que nous avons une servlet accessible via cette URL:

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

Cette requête atteindra le servlet «servlet-mapping» dans une application Web déployée dans «deploy-folder». Par conséquent, si nous appelons getRequestURI () et getPathInfo () pour cette requête, ils renverront des chaînes différentes.

Créons une méthode simple de 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(); }

Tout d'abord, examinons la sortie du servlet pour les requêtes getRequestURI récupérées par la commande curl:

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

De même, jetons un coup d'œil à la sortie du servlet pour getPathInfo :

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

4. Conclusion

Dans cet article, nous avons expliqué la différence entre getRequestURI () et getPathInfo () dans HttpServletRequest . Nous l'avons également démontré avec un exemple de servlet et de requête.

Comme toujours, le servlet implémenté pour tester toutes ces fonctions est disponible sur Github.