SpringMVC html視圖解析以及中文亂碼問題


  新項目中准備拋棄jsp而改用html,遇到一些列奇怪的問題,現記錄如下:

  首先是視圖解析問題,在Controller中返回視圖時間變得異常慢,一個頁面將近20秒,方法很快就執行完畢,就是最后 return viewName 一直卡着,各種檢查沒問題,最后去查看視圖解析配置:

  

<--org.springframework.web.servlet.view.InternalResourceViewResolver-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="${web.view.prefix}"/>
        <property name="suffix" value="${web.view.suffix}"/>
        <property name="contentType">
            <value>text/html; charset=UTF-8</value>
        </property>
 </bean>
org.springframework.web.servlet.view.InternalResourceViewResolver 是jsp用的解析器,html時要用FreeMaker視圖解析
<!-- 定義視圖文件解析 html專用-->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
            <value>${web.view.prefix}</value>
        </property>
    </bean>
    <bean id="htmlviewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".html" />
        <property name="order" value="0"></property>
        <property name="contentType" value="text/html;charset=UTF-8"></property>
    </bean>

改完之后果然速度在飛,搞定。不過頁面中文卻亂碼了,這小事一樁,web應用我們解決亂碼都是高手,開始如下之旅:

  1.先改html頁面:無效

  

<head>
    <title>登錄</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

     2.web.xml:

<filter>
    <filter-name>encodingFilter</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>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

      無效 ,甚至病急亂投醫,把forceEncoding改為false試一試

  3:Controller代碼:(網上找的各種方法)

  

@RequestMapping(value = "${adminPath}/login", produces = "text/html;charset=UTF-8",method = RequestMethod.GET)
    //@ResponseBody
    public String login(HttpServletRequest request, HttpServletResponse response, String s) {
        try {
            request.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setContentType("text/html;charset=UTF-8");
        HttpServletRequest hRequest = WebUtils.toHttp(request);

  4:tomcat 服務器serer.xml,URIEncoding=utf-8,這個對get請求中文參數其實管用。

。。。。。

 最終還是沒能解決,差點放棄了。在網上百度各種 “SpringMVC html 中文亂碼”,最后想,是不是FreeMaker視圖解析器的問題呢,換關鍵詞“SpringMVC FreeMaker視圖解析 中文亂碼”,果然有新方法,如下

<!-- 定義視圖文件解析 html專用-->
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath">
            <value>${web.view.prefix}</value>
        </property>
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">1</prop>
                <prop key="default_encoding">UTF-8</prop> //關鍵解決點
                <prop key="number_format">0.##</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
            </props>
        </property>
    </bean>
    <bean id="htmlviewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".html" />
        <property name="order" value="0"></property>
        <property name="contentType" value="text/html;charset=UTF-8"></property>
    </bean>

 

終於解決了,中文亂碼真實頭疼啊。。。。,哪天編程語言用中文寫就,也就就徹底解決了!  百度用了那么多年,你真的會嗎?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM