我有一个部署在Tomcat8.5上的简单(无spring) web应用程序(REST-Service + HTML页面)。
如果我将应用程序源代码放入docker容器(来自java :8-jdk的纯java镜像),使用gradle构建它,并在用gretty创建的嵌入式Tomcat上运行它,一切都很正常。
但是当我使用一个带有预先安装的Tomcat的docker镜像(来自tomcat:8.5)并部署myApp.war (由gradle war插件生成)时,编码变得一团糟,像"ü“这样的Umlaute被显示为”?“。
但这只会发生在用Javascript lib "toastr“显示为toast的邮件和我用"javax.mail.Transport”发送的电子邮件的主题部分。html页面的内容和邮件的内容auf如预期的那样显示Umlaute。
所有的文件都是用UTF-8编码的(例如Java源代码)。我尝试将docker容器上的locale更改为de_DE.UTF-8,但没有帮助(它也已经设置为en_US.UTF-8,所以我猜这不是问题所在)。我还尝试了bitnami-docker-tomcat镜像,它设置了“JAVA_OPTS=-Dfile.coding=UTF-8”,但同样没有帮助。我尝试在web.xml中添加一个字符编码过滤器。也不走运。
我想这一定是一种常见的问题,但我找不到一个有效的解决方案。
我的Dockerfile:
FROM tomcat:8.5
ADD app.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]带编码过滤器的web.xml:
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>发布于 2019-08-07 20:58:34
似乎我一直走在错误的道路上。问题既不在于docker容器,也不在于Tomcat配置。问题是WAR文件的创建出错,并且没有使用UTF-8。真的很奇怪,因为gretty应该使用相同的编译文件并产生相同的错误。
因此,在将以下代码添加到我的gradle构建脚本后,所有Umlauts最终都正确显示了:
compileJava.options.encoding = 'UTF-8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}https://stackoverflow.com/questions/57391384
复制相似问题