2010-02-23 4 views
10

Я знаю, что могу использовать HttpServletRequest.getParameter() для получения значений параметров URL.HttpServletRequest - SetParameter

Есть ли эквивалентный метод, с помощью которого я могу установить/заменить значение?

ответ

7

Нет, нет.

Вы можете изменять атрибуты, а не параметры.

Единственный способ добиться чего-то подобного - это обернуть запрос (классом, который возвращает что-то еще для getParameter).

Связанное любопытство: в некоторых контейнерах сервлетов есть ошибка, которая позволит вам делать request.getParameterValues(name)[0] = "newValue", но это может привести только к несоответствиям.

+0

Yup, вы всегда можете обернуть его, хотя может быть довольно много методов. –

+0

Старый вопрос, но я хотел бы добавить, что прецедент для этого - создание единичного или функционального теста. Таким образом, в этом случае это может быть сделано с помощью библиотеки Mock или с помощью предоставленного заглушки запроса, который содержит модифицируемую карту параметров. –

4

Нет. Однако почему вы хотите это сделать? Могут быть другие способы выполнения того, что вам нужно сделать.

+0

Я хочу кодировать все параметры URL – AJM

+0

Прежде чем он доберется до сервлета? Вы захотите заглянуть в JavaScript для этого - как только он попадет в сервлет, нет смысла пытаться их кодировать. Или вы говорите о кодировании для перенаправления на другой сервлет/страницу? Если это так, вы захотите изучить его в процессе создания нового URL-адреса. Посмотрите на java.net.URLEncoder (http://java.sun.com/j2se/1.5.0/docs/api/java/net/URLEncoder.html); может помочь. – MCory

+0

Я не думаю, что он говорит о кодировке URL. Параметры запроса уже декодируются URL-адресами сервлетом-контейнером. Он больше говорит о кодировке символов. – BalusC

4

не думаю есть. Но вы можете использовать метод setAttribute() аналогичным образом; вам просто нужно использовать getAttribute() - not getParameter() - чтобы вернуть значение позже.

6

Вы можете сделать parametermap изменяемой карту, заменив HttpServletRequest с пользовательской HttpServletRequestWrapper реализации, которая заменяет parametermap внутри Filter, который был размещен в начале цепи.

Однако это пахнет обходным путем. В одном из комментариев вы заявили, что хотите кодировать параметры (на самом деле: декодировать их, потому что они уже закодированы). Вы ищете неправильное направление решения. Для параметров запроса GET требуются требования кодирования, установленные в самом сервере servletcontainer (в случае, например, Tomcat, просто установите атрибут HTTP-коннектора URIEncoding). Для POST вам необходимо установить его на ServletRequest#setCharacterEncoding(). Также см. Подробные решения в this article (прочитайте всю статью, хотя чтобы понять полную картину).

1

Параметры запроса передаются сервлету или JSP с клиента через HTTP. Они не заданы по серверному коду, поэтому нет необходимости в каких-либо методах набора (setParameter()).

Кроме того, это добавит безопасности, чтобы никто не мог изменять параметры запроса.

Смежные вопросы