SpringMVC+Freemarker UTF-8编码 完全解决方案

最近用SpringMVC+Freemarker+AJAX作了个例子.遇到了一些关于中文编码的问题.通过查资料把问题解决了.
在这里总结一下.

先解决Freemarker的中文问题.
在Spring的配置文件里要添加一些配置项.
  1. <bean id="freemarderConfig"
  2.           class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  3.         <property name="templateLoaderPath" value="/ftl/"/>
  4.         <property name="freemarkerVariables">
  5.             <map>
  6.                 <entry key="xml_escape" value-ref="fmXmlEscape"/>
  7.             </map>
  8.         </property>
  9.         <property name="freemarkerSettings">
  10.             <props>
  11.                 <prop key="defaultEncoding">UTF-8</prop>
  12.             </props>
  13.         </property>
  14.     </bean>
  15.     <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
  16.     <bean id="viewResolver"
  17.           class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
  18.         <property name="cache" value="true"/>
  19.         <property name="viewClass"
  20.                   value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
  21.         <property name="suffix" value=".ftl"/>
  22.         <property name="exposeRequestAttributes" value="true"/>
  23.         <property name="exposeSessionAttributes" value="true"/>
  24.         <property name="exposeSpringMacroHelpers" value="true"/>
  25.         <property name="contentType" value="text/html;charset=UTF-8"/>
  26.     </bean>
在Spring的配置文件中像如上配置之后Freemarker的中文问题基本解决.
下面是SpringMVC的中文问题解决.
首先要添加一个HandlerInterceptor的实现类
  1. import org.springframework.web.servlet.HandlerInterceptor;
  2. import org.springframework.web.servlet.ModelAndView;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. /**
  6.  * Created by IntelliJ IDEA.
  7.  * User: 
  8.  * Date: 2008-10-6
  9.  * Time: 11:50:36
  10.  * To change this template use File | Settings | File Templates.
  11.  */
  12. public class RequestEncodingInterceptor implements HandlerInterceptor
  13. {
  14.     public boolean preHandle(HttpServletRequest request,
  15.             HttpServletResponse response, Object handler) throws Exception
  16.     {
  17.         request.setCharacterEncoding("utf-8");
  18.         return true;
  19.     }
  20.     public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
  21.         //To change body of implemented methods use File | Settings | File Templates.
  22.     }
  23.     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
  24.         //To change body of implemented methods use File | Settings | File Templates.
  25.     }
  26. }
再在Spring的配置文件里配置这个类
  1. <bean id="loginUrlMapping"
  2.           class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  3.         <property name="interceptors">
  4.             <list>
  5.                 <bean class="net.dvqi.interceptors.RequestEncodingInterceptor"/>
  6.             </list>
  7.         </property>
  8.         <property name="urlPathHelper">
  9.             <bean class="org.springframework.web.util.UrlPathHelper">
  10.                 <property name="urlDecode" value="true"/>
  11.                 <property name="defaultEncoding" value="utf-8"/>
  12.             </bean>
  13.         </property>
  14.         <property name="mappings">
  15.             <props>
  16.                 <prop key="/index.html">indexController</prop>
  17.                 <prop key="/test.html">testController</prop>
  18.                 <prop key="/register.html">registerController</prop>
  19.                 <prop key="/system/user/userlist.html">userListController</prop>
  20.             </props>
  21.         </property>
  22.     </bean>
这样SpringMVC的中文问题就也解决了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值