如何设置tomcat 8容器字符编码请求和响应ISO-8859-1的UTF-8 intead

问题描述 投票:3回答:4

我们需要设置tomcat 8容器字符编码的请求和响应ISO-8859-1的UTF-8 intead,同样的设置我们尝试设置如下所述,https://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q1

但这需要创建过滤器等。有没有任何优雅的方式我们可以更改一些配置集,使其适用于容器级别

tomcat8 servlet-3.0
4个回答
8
投票

Tomcat 8+捆绑了一个过滤器来设置字符编码。

这在Tomcat 8 Container Provided Filters中有描述。

需要在web.xml文件中配置此过滤器以及一些其他更改,如下所示。

以下配置适用于

  • Tomcat 8.0.30
  • Jdk1.d.0_66
  • SQL Server 2008 R2
  • Microsoft JDBC驱动程序(sqljdbc42.jar)

字符编码过滤器

网嗯

<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>

JSP页面编码

网嗯

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <page-encoding>UTF-8</page-encoding>
  </jsp-property-group>
</jsp-config>

JSP页面创建

只能使用标准英文字符,即没有重音字符等

数据库字符类型

表列的所有字符类型都应该是Unicode类型,例如NCHAR,NVARCHAR和NTEXT。

数据库连接字符串

对于具有排序规则“Latin1_General_CI_AS”的SQL Server 2008 R2数据库,似乎不需要将连接字符串设置为使用UTF-8。

的context.xml

 <Resource name="jdbc/gtraxDS" auth="Container"
           type="javax.sql.DataSource"  
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://ctceu-wgc-dv026:45666; databaseName=gtraxd2"
       username="myAppUsername"
       password="myAppPa55word"/>

严格的Servlet合规性

不要设置'严格的servlet遵从性'。

来自Tomcat 8 Migration Guide

The default value of URIEncoding attribute for HTTP and AJP connectors has been changed from
"ISO-8859-1" to be "UTF-8" (if "strict servlet compliance" mode is off, which is the default)

文件系统字符编码

迭代并显示以下内容:

System.getProperties();

得到:

...
file.encoding       Cp1252
file.encoding.pkg   sun.io
...

似乎不需要更改文件编码


1
投票

字符编码过滤器应该是访问请求参数的过滤器链中的第一个过滤器。


0
投票

对我来说,设置tomcat的web.inf(/tomcat/8.0.33/conf/web.inf)就足够了,特别是标题。

代替 :

<?xml version="1.0" encoding="ISO-8859-1"?>

我正在使用:

<?xml version="1.0" encoding="UTF-8"?>

0
投票

我对控制器返回的HTML页面也有同样的问题。在IntelliJ IDEA 2018中运行时没有问题,但在构建war文件并在tomcat中部署之后,HTML页面的编码问题出现在项目静态文件夹中。经过一番搜索后,我找到了this救命答案,并在C:\ apache-tomcat \ conf目录下的tomcat web.xml文件中添加了以下标签,所有内容都像魅力一样。

    <mime-mapping>
        <extension>html</extension>
        <mime-type>text/html;charset=UTF-8</mime-type>
     </mime-mapping>
© www.soinside.com 2019 - 2024. All rights reserved.