You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 9欢迎页index.html编码错误显示乱码问题排查求助

问题1:根路径访问欢迎页返回ISO-8859-1编码的原因

  • 当访问根路径/时,Tomcat会触发欢迎页规则,内部转发到配置的欢迎页(此处为index.html),这个转发过程中,Tomcat默认会为text/html类型的响应追加默认编码ISO-8859-1,优先级高于静态资源本身的处理逻辑。
  • 直接访问/index.html时,请求由Tomcat的DefaultServlet直接处理静态资源,默认不会为html类型资源追加charset参数,因此响应头只有Content-Type: text/html,浏览器会自动读取页面内meta标签声明的UTF-8编码,显示正常。
  • 之前配置的AddDefaultCharsetFilter未生效,是因为默认Filter只拦截REQUEST类型的请求,不会拦截内部转发的FORWARD类型请求,因此欢迎页的转发请求没有被Filter处理。

问题2:让欢迎页返回UTF-8编码的解决方案

方案1:配置HTML类型资源的默认MIME编码(最推荐,改动最小)

在你项目WAR包的WEB-INF/web.xml,或者Tomcat全局的conf/web.xml中,添加如下mime映射配置:

<mime-mapping>
    <extension>html</extension>
    <mime-type>text/html;charset=UTF-8</mime-type>
</mime-mapping>

配置后重启Tomcat即可生效,所有html资源的响应头都会自动带上charset=UTF-8,不管是直接访问还是欢迎页转发访问都有效。

方案2:修正AddDefaultCharsetFilter配置

如果要继续使用默认编码过滤器,需要修改Filter的映射配置,增加对FORWARD请求的拦截,在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>
    <init-param>
        <param-name>ignore</param-name>
        <param-value>false</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>setCharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

配置后重启Tomcat,过滤器就会处理欢迎页的转发请求,强制设置编码为UTF-8。

内容的提问来源于stack exchange,提问作者Shimbawa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:45:04