Java: когда параметр имеет значение, соответствующее строке в кодировке UTF-8 в java HTTPRequestServlet, doGet декодирует его по умолчанию - PullRequest
1 голос
/ 20 сентября 2011

Я новичок в сервлетах.Я выполняю запрос GET к сервлету с параметром, скажем, param = https% 3A% 2F% 2Fwww.somesite.com со стороны клиента.На стороне сервера есть метод doGet, который принимает объекты HTTPServletRequest и HTTPServletResponse.Когда я пытаюсь получить параметр, он дает мне https://www.somesite.com вместо https% 3A% 2F% 2Fwww.somesite.com.

Код на стороне сервера работает в Websphere.Это ожидаемое поведение или есть какое-то возможное объяснение тому же?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

Это ожидаемое поведение. Все параметры, передаваемые через GET, должны быть закодированы, и вам, вероятно, все равно придется декодировать их вручную, поэтому сервлет сделает эту работу за вас. Если вам это не нужно, вы можете использовать java.net.URLEncoder.encode(<your_string>, "UTF-8")

2 голосов
/ 20 сентября 2011

Это правильное поведение, изложенное в цитатах, которые вы указали в качестве темы своего вопроса.

URL-адрес ограничен для использования некоторых символов.Вы можете использовать только английские буквы, цифры и некоторые специальные символы.Если вам нужно отправить другие символы, они должны быть закодированы с использованием нотации%.Например,% 20 означает пробел,% 3A означает двоеточие и т. Д. Кодирование выполняется клиентом.Для удобства API сервлета декодирует параметры сервлета автоматически.

Это то, что вы читаете в документации и видите в действии.

...