首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker Tomcat Image:部署WAR文件时Umlaute的编码问题

Docker Tomcat Image:部署WAR文件时Umlaute的编码问题
EN

Stack Overflow用户
提问于 2019-08-07 17:41:14
回答 1查看 573关注 0票数 0

我有一个部署在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:

代码语言:javascript
复制
FROM tomcat:8.5
ADD app.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]

带编码过滤器的web.xml:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-07 20:58:34

似乎我一直走在错误的道路上。问题既不在于docker容器,也不在于Tomcat配置。问题是WAR文件的创建出错,并且没有使用UTF-8。真的很奇怪,因为gretty应该使用相同的编译文件并产生相同的错误。

因此,在将以下代码添加到我的gradle构建脚本后,所有Umlauts最终都正确显示了:

代码语言:javascript
复制
compileJava.options.encoding = 'UTF-8'

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57391384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档