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 .