Перейти к основному содержимому

Разница между getRequestURI и getPathInfo в HttpServletRequest

· 2 мин. чтения

Задача: Сумма двух

Дано массив целых чисел и целая сумма. Нужно найти индексы двух чисел, сумма которых равна заданной ...

ANDROMEDA

1. Обзор

В этом кратком руководстве мы обсудим разницу между getRequestURI() и getPathInfo() в классе HttpServletRequest .

2. Разница между getRequestURI() и getPathInfo()

Функция getRequestURI() возвращает полный запрошенный URI. Это включает в себя папку развертывания и строку отображения сервлета. Он также вернет всю дополнительную информацию о пути.

Функция getPathInfo() возвращает только путь, переданный сервлету . Если дополнительная информация о пути не передается, эта функция вернет null .

Другими словами, если мы развернем наше приложение в корне нашего веб-сервера и запросим сервлет, сопоставленный с «/», обе функции getRequestURI() и getPathInfo() вернут одну и ту же строку g. В противном случае мы получим разные значения.

3. Пример запроса

Чтобы лучше понять методы HttpServletRequest , предположим, что у нас есть сервлет , к которому можно получить доступ через этот URL:

http://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 http://localhost:8080/deploy-folder/servlet-mapping/request-path?function=getRequestURI
/deploy-folder/servlet-mapping/request-path

Точно так же давайте посмотрим на вывод сервлета для getPathInfo :

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

4. Вывод

В этой статье мы объяснили разницу между getRequestURI() и getPathInfo() в HttpServletRequest . Мы также продемонстрировали это на примере сервлета и запроса.

Как всегда, сервлет, реализованный для тестирования всех этих функций, доступен на Github .