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)
Эта логика метода определяется параметрами запроса.
Что я получаю, так это:
request.getQueryString()
возвращаетсяnull
request.getParameterMap()
есть запись для"recordNumber"
Это стандартное поведение или я что-то не так делаю?
Я просмотрел документы о HttpServletRequest.getQueryString() и ServletRequest.getParameterMap(), но не могу найти описанного поведения или какой-либо ссылки на обработку, зависящую от контейнера, которая может привести к различным результатам.
Основная проблема заключается в том, что я могу сломать существующий код, используя getParameterMap() вместо getQueryString(), поэтому любой совет по этому вопросу поможет.
1 ответ
Строка запроса - не более чем механизм кодирования параметров в запросе, но это не единственный. Обычно это используется, когда браузер отправляет GET-запрос на сервер. Другой механизм был бы в теле запроса POST с кодировкой формы.
В вашем случае JSP хочет включить результаты другого JSP, что все происходит на стороне сервера. Контейнер сервлета может передавать параметры из одной JSP в другую без необходимости кодировать параметр в строке запроса (что было бы излишне неэффективным).
С помощью getParameter
или же getParameterMap
это более общее решение. С помощью getQueryString
только действительно имеет смысл в определенных обстоятельствах, когда это явно то, что вам нужно, чтобы выглядеть искусством.