【发布时间】:2010-03-19 00:30:26
【问题描述】:
我在 Spring MVC + Hibernate 应用程序上工作,使用 MySQL(版本 5.0.51a)和 InnoDB 引擎。
当我发送带有西里尔字符的表单时出现问题。 结果,数据库包含未知编码的无意义字符。
使用 UTF-8 创建的所有 JSP 页面、数据库(+ 表和字段)。 Hibernate 配置还包含将编码设置为 UTF-8 的属性。
我通过创建使用 UTF-8 对请求内容进行编码的过滤器解决了这个问题。 示例代码:
…
encoding = "UTF-8";
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
…
但它明显减慢了应用程序的速度。
有趣的是,直接从应用程序执行插入查询(即从 Eclipse 作为 Java 应用程序运行)效果很好。
UPD。
据我了解,在我的情况下,使用过滤器是唯一可行的解决方案。
我不知道标准 CharacterEncodingFilter。现在使用它,效果很好!
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
【问题讨论】:
-
像这样更改请求对象中的字符编码应该不会对应用程序的速度产生明显影响。一定有别的事情发生了
-
你有没有将
doFilter()方法声明为syncrhonized?
标签: java hibernate spring encoding spring-mvc