Кодировка по умолчанию в Geronimo с Tomcat - PullRequest
0 голосов
/ 24 февраля 2011

Я ищу функциональный способ установки кодировки символов по умолчанию для ответов HTTP для Geronimo 3 с Tomcat.Кажется, есть много обходных путей, но нет никакого способа легко установить какое-либо свойство в некотором файле, как в случае Apache Httpd.(Apache Httpd имеет AddDefaultCharset, используемый для всех ответов.) Я попытался добавить атрибуты useBodyEncodingForURI и URIEncoding к <connector> элементам в var/catalina/server.xml.

<Connector name="TomcatWebConnector"
    port="${HTTPPort + PortOffset}"
    address="${ServerHostname}"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="${HTTPSPort + PortOffset}"
    useBodyEncodingForURI="true"
    URIEncoding="UTF-8"
    executor="DefaultThreadPool"/>

Но это не работает,Я все еще получаю заголовок Content-Type text/html;charset=ISO-8859-1 в ответ.Другое решение заключается в программной смене заголовков в приложении (например, через фильтр или клапан), но я не нахожу это systemic .

1 Ответ

0 голосов
/ 02 мая 2011

Я вернулся к своему вопросу, который задавал два месяца назад. Теперь я знаю, что решение с использованием фильтра - это не обходной путь, а обычный способ. Просто напишите класс фильтра:

package eu.barbucha.tests;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingSettingFilter implements Filter {
    private final String enc = "utf-8";

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse resp, FilterChain fc)
            throws IOException, ServletException {
        request.setCharacterEncoding(enc);
        resp.setCharacterEncoding(enc);
        fc.doFilter(request, resp);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }
}

И назначить фильтр со всеми URI в файле WEB-INF/web.xml:

<filter>
    <description>Filter setting encoding</description>
    <filter-name>enc-filter</filter-name>
    <filter-class>eu.barbucha.tests.EncodingSettingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>enc-filter</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

Вот и все.

...