«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. Заключение