Значения параметров сервлета Java не декодируются

У меня возникла проблема с getParameter() сервлета Java, который не декодирует параметр, хотя я правильно установил кодировку Tomcat в server.xml.

 <Connector port.. URIEncoding="UTF-8"/>

Если я декодирую необработанный запрос, я получаю декодированный запрос, но getParamter не декодирует сам по себе!

 protected void service(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException {
    System.out.println("CharacterEncoding: "+ request.getCharacterEncoding());
    System.out.println("Query String: "+ URLDecoder.decode(request.getQueryString(), "UTF-8");
    System.out.println("Query param name: "+request.getParameter("name"));
    ...

Результат, который я получаю, выглядит следующим образом:

Кодировка символов: UTF-8

Строка запроса: name=日本語一番ぜソFOX_&'">• «Ç€Ö™»_αß_iİıI_Администратор_cœur d´Ouchy_????????????_عربي

Запрос параметики. ±Ø¨Ù

вы можете ясно видеть, что запрос и значение имени не совпадают! На моей странице jsp я использую ‹%@page contentType="text/html; charset=UTF-8" %>


person user1318538    schedule 28.05.2012    source источник
comment
Есть ли сервер Apache перед Tomcat? Вы подключаетесь к Tomcat напрямую?   -  person mindas    schedule 29.05.2012
comment
Я обнаружил, что проблема в том, что я устанавливаю ‹Connector port=80 URIEncoding=UTF-8/› вместо ‹Connector port=8080 URIEncoding=UTF-8/›   -  person user1318538    schedule 29.05.2012


Ответы (1)


Я понимаю, что это касается запроса GET. Настройка <Connector URIEncoding="UTF-8"> должна сделать это. То, что это не работает, может означать только то, что вы запускаете Tomcat из среды IDE, такой как Eclipse, и что среда IDE не настроена для использования собственной конфигурации Tomcat, пока вы редактировали собственную конфигурацию Tomcat в /conf/server.xml.

Неясно, какую IDE вы используете, но если бы это была Eclipse, вам нужно было бы либо отредактировать файл server.xml в проекте Servers рабочей области, а не собственный /conf/server.xml Tomcat. файл

введите здесь описание изображения

Или настройте Eclipse для управления установкой Tomcat, дважды щелкнув запись сервера Tomcat в представлении Серверы и соответствующим образом изменив раздел Server Locations.

введите здесь описание изображения

Вернемся к вашим попыткам расследования/исправления: request.getCharacterEncoding() не использовался для декодирования строк запроса GET (поскольку это не контролируется API-интерфейсом сервлета), он использовался только для декодирования тела запроса POST. <%@page pageEncoding="UTF-8"%> только установит кодировку символов ответа, и последующая форма будет отправлена.

Смотрите также

person BalusC    schedule 29.05.2012
comment
Спасибо BalusC за подробный ответ. Очень ценю. Я использую правильный server.xml из моей IDE eclipse. Я обнаружил, что проблема в том, что я устанавливаю ‹Connector port=80 URIEncoding=UTF-8/› вместо ‹Connector port=8080 URIEncoding=UTF-8/› - person user1318538; 29.05.2012