新項目中准備拋棄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>
終於解決了,中文亂碼真實頭疼啊。。。。,哪天編程語言用中文寫就,也就就徹底解決了! 百度用了那么多年,你真的會嗎?