JBoss: 如何让 UTF-8 工作(请求编码)?

JBoss: how to get UTF-8 working (request encoding)?

我有 MySQL 5.5 墨盒,其中 post_start_mysql (.openshift\action_hooks\post_start_mysql):

echo "********MySQL_config post_start_mysql it's running."/usr/bin/mysql -h "127.8.237.2" -u "adminc5aiLd5" \
         --password="bcHxwMCKLpJ4" -P 3306 \
         -e 'SET NAMES "utf8"; SET CHARACTER SET utf8; SET GLOBAL character_set_client=utf8, character_set_database=utf8, character_set_results=utf8, character_set_connection=utf8, character_set_server=utf8, collation_server=utf8_general_ci; SET character_set_client=utf8, character_set_results=utf8, character_set_connection=utf8, character_set_server=utf8, collation_server=utf8_general_ci, collation_database=utf8_general_ci;'

在我的 context.xml (\webapp\META-INF\context.xml) 我有:

<Resource name="jdbc/currencyexchange" 
        auth="Container" 
        type="javax.sql.DataSource"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://x.x.x.x:3306/xxx?autoReconnect=true"
        connectionProperties="useEncoding=true&amp;characterEncoding=UTF-8;"
        username="xxx"
        password="xxx"
        maxActive="100" maxIdle="30" maxWait="10000"
        />

结果:

mysql> show variables like '%character%';
+--------------------------+------------------------------------------------+
| Variable_name            | Value                                          |
+--------------------------+------------------------------------------------+
| character_set_client     | utf8                                           |
| character_set_connection | utf8                                           |
| character_set_database   | utf8                                           |
| character_set_filesystem | binary                                         |
| character_set_results    | utf8                                           |
| character_set_server     | utf8                                           |
| character_set_system     | utf8                                           |
| character_sets_dir       | /opt/rh/mysql55/root/usr/share/mysql/charsets/ |
+--------------------------+------------------------------------------------+

我的 JBossEWS 2.0 卡带具有以下 pre_start_jbossews (.openshift\action_hooks\pre_start_jbossews):

echo "*******jboss_Config pre_start_jboss it's running." 
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dorg.apache.catalina.connector.URIEncoding=UTF-8 -Dorg.apache.catalina.connector.useBodyEncodingForURI=true"

在我的 server.xml (.openshift\config\server.xml) 我有:

<Connector address="${OPENSHIFT_JBOSSEWS_IP}"
               port="${OPENSHIFT_JBOSSEWS_HTTP_PORT}"
               URIEncoding="UTF-8"
               useBodyEncodingForURI="true"
               protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"/>

我的 web.xml (webapp\WEB-INF\web.xml):

<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>xx.xxx.xxx.filter.CharsetFilter</filter-class>
    <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
 </filter>
<filter-mapping>
    <filter-name>CharsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
...
<jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
</jsp-config>

CharsetFilter.java:

public class CharsetFilter implements Filter
{
 private String encoding;

 public void init(FilterConfig config) throws ServletException
 {
  encoding = config.getInitParameter("requestEncoding");
  if( encoding==null ) encoding="UTF-8";
 }

 public void doFilter(ServletRequest request,
    ServletResponse response, FilterChain next)
 throws IOException, ServletException
 {
  request.setCharacterEncoding("UTF-8");
  response.setContentType("text/html; charset=UTF-8");
  response.setCharacterEncoding("UTF-8");
  next.doFilter(request, response);
 }

 public void destroy(){}
}

我的休眠道具:

<util:properties id="hibernateProperties">
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
        <prop key="hibernate.connection.CharSet">utf8</prop>
        <prop key="hibernate.connection.characterEncoding">utf8</prop>
        <prop key="hibernate.connection.useUnicode">true</prop>
        <prop key="hibernate.show_sql">false</prop>
    </util:properties>

结果: enter image description here enter image description here

问题出在 mysql:

.UpdateClient("update clients set name='???????'....")

如果你们中的一些人能帮我解决这个问题,我将不胜感激。

<Resource name="jdbc/currencyexchange" 
        auth="Container" 
        type="javax.sql.DataSource"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/${OPENSHIFT_APP_NAME}?autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8
        username="xxx"
        password="xxx"
        maxActive="100" maxIdle="30" maxWait="10000"
        />