Разликата между getRequestURI и getPathInfo в HttpServletRequest

1. Общ преглед

В този бърз урок ще обсъдим разликата между getRequestURI () и getPathInfo () в класа HttpServletRequest .

2. Разлика между getRequestURI () и getPathInfo ()

Функцията getRequestURI () връща пълния заявен URI. Това включва папката за разполагане и низът за картографиране на сървлети. Той също така ще върне цялата допълнителна информация за пътя.

Функцията getPathInfo () връща само пътя, предаден на сървлета . Ако не е предадена допълнителна информация за пътя, тази функция ще върне null .

С други думи, ако разположим нашето приложение в корена на нашия уеб сървър и поискаме сървлета, съотнесен към „/“, както getRequestURI (), така и getPathInfo () ще върнат същия strin g. В противен случай ще получим различни стойности.

3. Примерна заявка

За да получим по-добро разбиране за методите HttpServletRequest , да кажем, че имаме сървлет, който може да бъде достъпен чрез този URL:

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

Тази заявка ще удари сървлета “servlet-mapping” в уеб приложение, разположено вътре в “deploy-folder”. Следователно, ако извикаме getRequestURI () и getPathInfo () за тази заявка, те ще върнат различни низове.

Нека създадем прост метод на сървлет 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(); }

Първо, нека да разгледаме изхода на сървлета за заявки getRequestURI , извлечени от команда curl:

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

По същия начин, нека да разгледаме изхода на сървлета за getPathInfo :

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

4. Заключение

В тази статия обяснихме разликата между getRequestURI () и getPathInfo () в HttpServletRequest . Също така го демонстрирахме с примерен сървлет и заявка.

Както винаги, сървлетът, изпълнен за тестване на всички тези функции, е достъпен в Github.