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&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&useEncoding=true&characterEncoding=UTF-8
username="xxx"
password="xxx"
maxActive="100" maxIdle="30" maxWait="10000"
/>
我有 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&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&useEncoding=true&characterEncoding=UTF-8
username="xxx"
password="xxx"
maxActive="100" maxIdle="30" maxWait="10000"
/>