Получение части запроса url внутри сервлета

У меня есть сервлет EmailVerification, сопоставленный с /ev/* url-образцом.

http://example.com/ev/ce52320570

Как я могу получить эту часть ce52320570 URL-адреса в моем сервлете?

protected void doPost(HttpServletRequest request, HttpServletResponse response)
                                                     throws ServletException, IOException {
      String vid = "";  // Here I need to get the id from the URL
}

Ответ 1

Рассмотрение сервлета (называемого EmailVerification), отображаемого на /ev/*:

Будет ли URL http://example.com/ev/ce52320570 запускать сервлет EmailVerification?

Да. В версиях Servlet версии 2.5 и 3.0 (возможно, раньше) он получит подпуть, если вы сопоставляете его с *, например /ev/*, как и вы.

Как я могу получить эту ce52320570 часть URL http://example.com/ev/ce52320570?

  • request.getRequestURI() вы получите запрошенный URL как String, например /ev/ce52320570.

  • request.getPathInfo() получает вас (если существует) все после /ev/.

    • Итак, в запросе /ev/123, getPathInfo() предоставит вам /123. Точно так же запрос /ev/some/other, getPathInfo() даст вам /some/other.

  • request.getQueryString() следует использовать, если вам нужна часть параметров запроса URL-адреса.

    • Имейте в виду, что getRequestURI() и getPathInfo() предоставляют вам только запрошенный путь. Если вам нужно получить параметры запроса, то есть те, что после ?, например /ev/something?query1=value1&other=123, только request.getQueryString() вернут часть query1=value1&other=123.
  • request.getParameter(parameterName), если вам нужно значение конкретного запроса параметра.


Дополнительные примеры частей URL в запросе здесь.

Ответ 2

Используйте request.getRequestURI() и удалите то, что вам не нужно, т.е. request.getRequestURI().replace("/ev/");