我正在寻找使用Tomcat为Geronimo 3的HTTP响应设置默认字符编码的功能方法。似乎有很多解决方法,但没有任何方法可以轻松地在某些文件中设置某些属性,就像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
作为回应。另一个解决方案是在应用程序中更改标题(例如通过过滤器或阀门),但我没有找到它系统性。
答案 0 :(得分:0)
我回答了两个月前我问过的问题。我现在知道使用过滤器的解决方案不是任何解决方法,而是常见的方法。只需编写一个过滤类:
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 { } }
并为过滤器分配WEB-INF/web.xml
文件中的所有URI:
<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>
就是这样。