Я знаю, что могу использовать HttpServletRequest.getParameter()
для получения значений параметров URL.HttpServletRequest - SetParameter
Есть ли эквивалентный метод, с помощью которого я могу установить/заменить значение?
Я знаю, что могу использовать HttpServletRequest.getParameter()
для получения значений параметров URL.HttpServletRequest - SetParameter
Есть ли эквивалентный метод, с помощью которого я могу установить/заменить значение?
Нет, нет.
Вы можете изменять атрибуты, а не параметры.
Единственный способ добиться чего-то подобного - это обернуть запрос (классом, который возвращает что-то еще для getParameter).
Связанное любопытство: в некоторых контейнерах сервлетов есть ошибка, которая позволит вам делать request.getParameterValues(name)[0] = "newValue"
, но это может привести только к несоответствиям.
Нет. Однако почему вы хотите это сделать? Могут быть другие способы выполнения того, что вам нужно сделать.
Я хочу кодировать все параметры URL – AJM
Прежде чем он доберется до сервлета? Вы захотите заглянуть в JavaScript для этого - как только он попадет в сервлет, нет смысла пытаться их кодировать. Или вы говорите о кодировании для перенаправления на другой сервлет/страницу? Если это так, вы захотите изучить его в процессе создания нового URL-адреса. Посмотрите на java.net.URLEncoder (http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLEncoder.html); может помочь. – MCory
Я не думаю, что он говорит о кодировке URL. Параметры запроса уже декодируются URL-адресами сервлетом-контейнером. Он больше говорит о кодировке символов. – BalusC
не думаю есть. Но вы можете использовать метод setAttribute() аналогичным образом; вам просто нужно использовать getAttribute() - not getParameter() - чтобы вернуть значение позже.
Вы можете сделать parametermap изменяемой карту, заменив HttpServletRequest
с пользовательской HttpServletRequestWrapper
реализации, которая заменяет parametermap внутри Filter
, который был размещен в начале цепи.
Однако это пахнет обходным путем. В одном из комментариев вы заявили, что хотите кодировать параметры (на самом деле: декодировать их, потому что они уже закодированы). Вы ищете неправильное направление решения. Для параметров запроса GET
требуются требования кодирования, установленные в самом сервере servletcontainer (в случае, например, Tomcat, просто установите атрибут HTTP-коннектора URIEncoding
). Для POST
вам необходимо установить его на ServletRequest#setCharacterEncoding()
. Также см. Подробные решения в this article (прочитайте всю статью, хотя чтобы понять полную картину).
Параметры запроса передаются сервлету или JSP с клиента через HTTP. Они не заданы по серверному коду, поэтому нет необходимости в каких-либо методах набора (setParameter()).
Кроме того, это добавит безопасности, чтобы никто не мог изменять параметры запроса.
Yup, вы всегда можете обернуть его, хотя может быть довольно много методов. –
Старый вопрос, но я хотел бы добавить, что прецедент для этого - создание единичного или функционального теста. Таким образом, в этом случае это может быть сделано с помощью библиотеки Mock или с помощью предоставленного заглушки запроса, который содержит модифицируемую карту параметров. –