Tomcat7解决中文乱码

一、中文乱码原因
Tomcat默认是按ISO-8859-1进行URL解码,ISO-8859-1并未包括中文字符,中文字符不能被正确解析了。

二、配置编码
在tomcat的conf/server.xml下的connetor属性中增加URIEncoding或者useBodyEncodingForURI属性

(1)URIEncoding

This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.

译文:这指定了用于解码URI字节的字符编码。如果没有指定,将使用ISO-8859-1。

 如:

<?xml version='1.0' encoding='utf-8'?>
<Server port="9015" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">



    <Connector port="7001" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />



    <Engine name="Catalina" defaultHost="localhost">


      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%a %t %u &quot;%r&quot; %s %b %D" />

      </Host>
        <Valve className="org.apache.catalina.valves.RemoteIpValve"  
                remoteIpHeader="X-Forwarded-For"  
                protocolHeader="X-Forwarded-Proto"  
                protocolHeaderHttpsValue="https"/>
    </Engine>
  </Service>
</Server>


(2)useBodyEncodingForURI

This specifies if the encoding specified in contentType should be used for URI query parameters, instead of using the URIEncoding.

译文:这指定编码指定contentType应使用URI查询参数,而不是使用URIEncoding。

如:

<Server port="8005" shutdown="SHUTDOWN">
    <!-- 其他配置  -->
    <Service name="Catalina">
          <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" />   
          <!-- 其他配置  -->
    </Service>
</Server>

猜你喜欢

转载自blog.csdn.net/liaonanfeng88/article/details/84143488
今日推荐