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

Aks*_*hat 3 servlet-3.0 tomcat8

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

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

Kev*_*ann 8

我没有足够的声誉来评论,但Tomcat 8捆绑了一个过滤器来设置字符编码.

Tomcat 8容器提供的过滤器中对此进行了描述.

需要在web.xml文件中配置此过滤器,并添加如下的其他更改.

以下配置适用于

  • Tomcat 8.0.30
  • jdk1.8.0_66
  • SQL Server 2008 R2
  • Microsoft JDBC驱动程序(sqljdbc42.jar)

字符编码过滤器

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>
Run Code Online (Sandbox Code Playgroud)

JSP页面编码

web.xml中

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <page-encoding>UTF-8</page-encoding>
  </jsp-property-group>
</jsp-config>
Run Code Online (Sandbox Code Playgroud)

JSP创建

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

数据库字符类型

表列的所有字符类型都是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"/>
Run Code Online (Sandbox Code Playgroud)

严格的Servlet合规性

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

Tomcat 8迁移指南

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)
Run Code Online (Sandbox Code Playgroud)

文件系统字符编码

迭代和显示以下内容:

System.getProperties();
Run Code Online (Sandbox Code Playgroud)

得到:

...
file.encoding       Cp1252
file.encoding.pkg   sun.io
...
Run Code Online (Sandbox Code Playgroud)

似乎不需要更改文件编码