springmvc + freemarker 乱码

症状
使用freemarker 作为视图,输出中文就乱码

首先想到的是在视图的bean和config都设置为utf-8。
设置如下面的代码1。但是发现还是乱码。于是跟踪请求。在任何一个有接受request和response的地方,设置断点。

[img]http://dl.iteye.com/upload/attachment/500692/c73bdd8a-17de-385f-a84a-9d461f6f91c1.bmp[/img]
然后在变量如上图,那右击,Watch菜单,它会开一个表达式窗口Expressions。如图


[img]http://dl.iteye.com/upload/attachment/500694/31358667-9191-3b95-bb16-17b2985ab7b5.bmp[/img]
在Expressions右击,添加获取请求字符集和回应字符集的表达式
request.getCharacterEncoding()
response.getCharacterEncoding()

当断点进入后发现request和response的字符集都是iso的。这是因为我使用的servlet-api.jar是使用tomcat里面的架包,它默认的架包是iso。因此我需要添加一个字符集的过滤器。

在网上查找,发现spring 已经提供了一个过滤器了。配置如代码2。
其中
encoding设置编码
forceEncoding,如果要设置response的字符集,一定需要添加这个参数,设置为true,否则,它不会对response设置字符集。由于我这里的response和request都是ISO,要设置两个的字符集。所以设置了这个属性


代码1:

<!-- 将ftl后缀的文件使用freemarker 摸版引擎解析 -->
<bean id="freemarkerViewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="prefix" value="" />
<property name="suffix" value=".ftl" />
<property name="contentType" value="text/html; charset=UTF-8" />
<property name="exposeRequestAttributes" value="false" />
<property name="exposeSessionAttributes" value="false" />
<property name="exposeSpringMacroHelpers" value="true" />
</bean>

<!-- 设置freemarker 解析参数 -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/view/ftl/" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">1</prop>
<prop key="defaultEncoding">UTF-8</prop>
<prop key="url_escaping_charset">UTF-8</prop>
<prop key="locale">zh_CN</prop>
<prop key="boolean_format">true,false</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="time_format">HH:mm:ss</prop>
<prop key="number_format">0.######</prop>
<prop key="whitespace_stripping">true</prop>
</props>
</property>
</bean>

代码2:
<filter>
<filter-name>setCharacter</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>setCharacter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值