JSP getQueryString() и getParameterMap() возвращают различные параметры

У меня есть JSP, который доступен с URL-адреса, как

http://localhost/products.jsp

(таким образом, без строки запроса), в то время как эта страница включает в себя другие JSP с:

<jsp:include page="product.jsp">
    <jsp:param value="1" name="recordNumber"/>
</jsp:include>

внутри product.jsp есть вызов метода Java, который получает request объект:

NavigationUtils.getProductUrl(request)

Эта логика метода определяется параметрами запроса.
Что я получаю, так это:

  1. request.getQueryString() возвращается null
  2. request.getParameterMap() есть запись для "recordNumber"

Это стандартное поведение или я что-то не так делаю?

Я просмотрел документы о HttpServletRequest.getQueryString() и ServletRequest.getParameterMap(), но не могу найти описанного поведения или какой-либо ссылки на обработку, зависящую от контейнера, которая может привести к различным результатам.

Основная проблема заключается в том, что я могу сломать существующий код, используя getParameterMap() вместо getQueryString(), поэтому любой совет по этому вопросу поможет.

1 ответ

Решение

Строка запроса - не более чем механизм кодирования параметров в запросе, но это не единственный. Обычно это используется, когда браузер отправляет GET-запрос на сервер. Другой механизм был бы в теле запроса POST с кодировкой формы.

В вашем случае JSP хочет включить результаты другого JSP, что все происходит на стороне сервера. Контейнер сервлета может передавать параметры из одной JSP в другую без необходимости кодировать параметр в строке запроса (что было бы излишне неэффективным).

С помощью getParameter или же getParameterMap это более общее решение. С помощью getQueryString только действительно имеет смысл в определенных обстоятельствах, когда это явно то, что вам нужно, чтобы выглядеть искусством.

Другие вопросы по тегам