«1. Обзор

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

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

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

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

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

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

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

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

Этот запрос попадет в «сервлет -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

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

Аналогично, давайте посмотрим на вывод сервлета для getPathInfo:

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