2013-03-19 3 views
6

У меня есть все в UTF-8. Это включает Content-Type, базу данных, файлы, java, все (если только я что-то пропустил).JBoss AS 7.1 - Запрос параметров кодирования

Я следую многочисленным ответам stackoverflow, JIRAs, блогам и т. Д., Но он все еще не работает.

Сама проблема заключается в следующем:

Когда я представить, давайте предположим, к http://localhost:8080/app/searh?text=café, отладки, мой request.getParameter("text") всегда неправильно, что-то вроде café и request.getCharachterEncoding() дает мне null (?).

Глядя на заголовки запроса, я получил это:

GET http://localhost:8080/app/search?text=caf%C3%A9 HTTP/1.1 
Host: localhost:8080 
Proxy-Connection: keep-alive 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17 
Referer: http://localhost:8080/app/search?text=n%C3%A3o 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4 
Accept-Charset: UTF-8,*;q=0.5 
Cookie: JSESSIONID=OMMITED 

И заголовки ответов:

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Pragma: No-cache 
Cache-Control: no-cache 
Expires: Wed, 31 Dec 1969 21:00:00 BRT 
Content-Type: text/html;charset=UTF-8 
Transfer-Encoding: chunked 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Date: Tue, 19 Mar 2013 14:06:24 GMT 
Proxy-Connection: keep-alive 
Connection: keep-alive 

Это все UTF-8. Я просто не понимаю.

Я попытался передать -Dfile.encoding=UTF-8 -Dfile.io.encoding=UTF-8 -DjavaEncoding=UTF-8 в моей standalone.confJAVA_OPTS переменной, пытался поставить

<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/> 
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/> 

в моем standalone.xml. Ничто из этого не решает проблему.

Что я могу сделать, чтобы исправить это?

Заранее спасибо.

BTW: JBoss AS 7.1.1.

ответ

3

Я пришел к той же проблеме, но в Jboss 5.1, и решил, что добавляет атрибут URIEncoding в HTTP-коннектор (в jbossweb/server.xml) и вручную расшифровывает параметры URL/GET.

Но способ определить его в Jboss7 отличается от предыдущих версий, но я искал немного. Я нашел это link: в основном вы должны добавить следующие строки в файл standalone.xml или domain.xml после окончания </extensions> тег (похоже, что вы уже сделали этот шаг ;-):

<system-properties> 
     <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/> 
     <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/> 
</system-properties> 

Кроме того вы, чтобы декодировать вручную URI, или параметр с помощью объекта java.net.URIEncoder:

String param = URLDecoder.decode(request.getParameter("text"), "UTF-8"); 

У BalusC есть interesing post in his blog об этом.

И, наконец, второе решение, если вы хотите избежать использования предыдущих параметров: считаете ли вы использование метода POST вместо GET?

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

+0

Привет, спасибо за ваш ответ; Первое решение, которое я уже пробовал, не сработало. Использование POST в моем случае не имеет смысла, потому что это поиск, и я хочу, чтобы пользователи могли скопировать URL-адрес. Я также попробовал ваше второе решение, и ошибка сохраняется. Pretty creepy ... Спасибо – caarlos0

+1

Привет, Caarlos, я ответил наизусть, но мне было немного любопытно о вашей проблеме, и теперь я подготовил пример: я воспроизвел вашу проблему, и я, наконец, сделал это, и решение работает как в Jboss 5.x, так и в 7. Дело в том, что первые два решения, которые я дал, на самом деле являются одним единственным решением, поэтому чтобы он работал, вы должны определить свойства систем, и, кроме того, вы для декодирования параметра. Я изменил ответ. – Toni

+0

Спасибо, я буду считать это = D – caarlos0

2

Я решил проблему, создав фильтр, который устанавливает кодировку запроса и ответа в UTF-8.

Pretty hacky, но работает.

+0

Да, я использую JBoss EAP 6.1 и должен был использовать 'request.setCharacterEncoding (" UTF-8 ")' помимо установки свойств 'catalina. *' – tbrugz

1

У меня недостаточно отзывов, чтобы добавить комментарий к the answer by Toni S. Magraner, так что я напишу здесь.

request.getParameter («текст») уже расшифровывает URL. Вызов URLDecoder.decode() снова даст двойное декодирование, которое, вероятно, не будет делать то, что вы хотите. Пример:

logger.error("p1:"+request.getParameter("p1")); 

Назвав его с

http://localhost/test?p1=ku%2fki%44__%33X%C3%A9X 

принтами:

p1:ku/kiD__3XéX 
0

standalone.xml или domain.xml конфигурация не работает для меня.

На jboss-as-7.1.1.Final просто добавьте эту строку в standalone.conf, этот файл живет в директории Bin:

JAVA_OPTS = "$ JAVA_OPTS -Dorg.apache.catalina.connector.URI_ENCODING = UTF-8"

от: JBOSS 7 encoding not working as expected

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