Tomcat 5.0, обслуживающий статические ресурсы с именами в кодировке UTF-8 - PullRequest
2 голосов
/ 25 октября 2011

Я пытаюсь настроить Tomcat-Server версии 5.0.30-27.35 на Suse Linux Enterprise Server 11.2.Существует целый набор статических ресурсов, которые также должны обслуживаться этим котом.(Обновление tomcat-Server не является вариантом из-за ограничений администратора в этих системах.) Проблема в том, что некоторые файлы имеют имена файлов со специальными символами, и эти файлы не доставляются Tomcat-Server - например, я получаю HTTP 404ошибка при доступе к http://myserver/qm-iso/aä.html в браузере (wget, FF, IE, Chrome).(файл /qm-iso/aä.html существует)

Мои настройки:

  • Для Linux-сервера установлен UTF-8.

  • Tomcat запускается с JAVA_OPTS -Dfile.encoding = UTF8.

  • Для Tomcat-HTTP-Connector установлено значение URIEncoding = "UTF-8" <connector ... URIEncoding="UTF-8"> в файле server.xml.

  • Сервлет по умолчанию имеет файл init-paramEncoding в web.xml

    <init-param><param-name>fileEncoding</param-name><param-value>UTF-8</param-value></init-param>

Я установил Test-JSP, который печатает <%= System.getProperty("file.encoding") %> и <%= (new OutputStreamWriter(new ByteArrayOutputStream())).getEncoding() %> - оба показывают UTF-8.

Я установил уровень tomcat-log для отладки и чтения этих операторов регистрации при обращении к URL http://myserver/qm-iso/aä.html

Attributes
javax.servlet.forward.request_uri : /qm-iso/a%C3%A4.html
javax.servlet.forward.context_path : 
javax.servlet.forward.servlet_path : /qm-iso/aä.html
javax.servlet.forward.path_info : /error.html
javax.servlet.error.request_uri : /qm-iso/a%C3%A4.html
javax.servlet.error.servlet_name : default
javax.servlet.error.status_code : 404
javax.servlet.error.message : /qm-iso/a%C3%A4.html

Для меня это выглядит так, что logentry javax.servlet.forward.servlet_path показывает неправильную кодировку .html.Строки с% C3% A4.html, похоже, правильно закодированы.

Есть идеи, что я мог забыть?Есть идеи, что может помочь?

Ричард

1 Ответ

1 голос
/ 25 октября 2011

Вам необходимо (разрешите своему администратору) установить атрибут URIEncoding элемента <Connector> в /conf/server.xml на UTF-8.

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

В противном случае они по умолчанию интерпретируются как ISO 8859-1, что является однобайтовой кодировкой символов.Отдельные 0xC3 и 0xA4 байты символа UTF-8 ä будут действительно представлены как символы Ã и ¤ соответственно, см. Также кодовая страница ISO 8859-1 .

См. Также:


Обновление : извините, я упустил из виду, что вы уже установили атрибут URIEncoding.Теперь это похоже на проблему с Tomcat 5.0.Установка этого атрибута устраняет проблему в Tomcat 7 (и, скорее всего, также в самой последней 6).Я рекомендую перейти на более новую версию Tomcat.Tomcat 5.0 - это EOL для многих лет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...