Сервлет request.getParameters не английский символ справки!

Я отчаянно нуждаюсь в помощи.

У меня есть сервлет Java, доступ к которому осуществляется по URL-адресу HTTP Get с восемью параметрами. Проблема в том, что параметры не только для английского языка. В этих параметрах может быть любой другой язык, например, иврит.

Теперь, когда я отправляю данные - либо из класса, который должен отправлять запрос Get, либо просто из адресной строки браузера, запрос, который я вижу в отладке (Netbeans), имеет бессмысленные символы и сами параметры, post request.getParameter являются ???? вопросительные знаки.

Как или где я могу решить эту проблему?


person Cypher_CS    schedule 14.09.2009    source источник
comment
Кстати, не используйте POST для чего-то, что семантически должно быть запросом GET. Среди прочих проблем ломаются закладки и кнопка возврата.   -  person erickson    schedule 14.09.2009


Ответы (4)


В вашем движке сервлетов должен быть параметр, который управляет кодировкой символов, используемой для параметров URL. Для поддержки всех языков кодировка UTF-8 - отличный выбор, но это не кодировка по умолчанию для многих серверов.

Tomcat использует ISO-8859-1 как декодер символов по умолчанию для параметров URL, независимо от кодировки страницы, содержащей URL. Это можно изменить с помощью атрибута "URIEncoding" в его коннекторе конфигурация. Другие серверы приложений могут иметь аналогичные настройки.

Если сервер ожидает параметры в кодировке UTF-8, страница, которая их отправляет, также должна быть закодирована в UTF-8.

Эта статья охватывает многие проблемы, часто встречающиеся при работе с JSP.

person erickson    schedule 14.09.2009

Я подозреваю, что ваш сервер находится в режиме UTF-8, но ваш URL-адрес закодирован как Latin-1. Какие вопросительные знаки вы получаете, "?" или "�"? Это прольет свет на то, кто совершает обращение.

Вам нужно изменить свой коннектор на Latin-1, добавив атрибут URIEncoding = "ISO-8859-1", или вы можете перекодировать URL-адрес в UTF-8.

Если URL-адрес закодирован браузером, вы попали в ловушку. Нет решения, потому что это может быть любым, в зависимости от браузеров. Смотрите мой вопрос,

Обработка кодировки символов в URI на Tomcat

person ZZ Coder    schedule 14.09.2009

В вашем сервлете перед request.getParameter("parameter-name") установите кодировку символов вашего запроса на "UTF-8", например:

request.setCharacterEncoding("UTF-8");
String word = request.getParameter("parameter-name");

Дополнительные сведения см. В часто задаваемых вопросах Tomcat о проблемах с кодировкой символов.

person Shant Dashjian    schedule 01.07.2018

Вы должны добавить настройки коннектора в файл tomcat server.xml, так как это проблема на уровне tomcat.

Пожалуйста, добавьте следующее в тег соединителя

URIEncoding="UTF-8" useBodyEncodingForURI="true"

если запросы отправляются из браузера, возможно, вам также придется внести некоторые изменения в web.xml. Добавьте этот тег фильтра в web.xml

<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter>
 <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

Надеюсь это поможет.

person singh    schedule 23.02.2020