一、前言
簡單的記錄freemarker遇到的錯誤問題:ftl頁面中文亂碼
由于freemarker整合在ssm框架中,所以筆者直接貼配置代碼
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 注冊spring的默認server,來出來靜態資源 --><mvc:default-servlet-handler/><!-- 注冊一些bean,只要用途就是處理請求的映射和調用 --><mvc:annotation-driven/><!-- 自動掃描該包,使SpringMVC認為包下用了@controller注解的類是控制器 --> <context:component-scan base-package="com.ys.controller" /> <!-- 添加注解驅動 --> <mvc:annotation-driven enable-matrix-variables="true" /><!-- 擴充了注解驅動,可以將請求參數綁定到控制器參數 --><!-- 靜態資源處理 css js imgs --><!-- <mvc:resources location="/resources/**" mapping="/resources" /><mvc:resources location="/back_css/" mapping="back_css/**" /><mvc:resources location="/back_js/" mapping="/back_js/**" /><mvc:resources location="/back_img/" mapping="/back_img/**" /><mvc:resources location="/skin/" mapping="/skin/**" /> --><!-- 告訴Spring 來掃描指定包下的類,并注冊被@Component,@Controller,@Service,@Repository等注解標記的組件 --><context:component-scan base-package="com.ys.controller" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan> <!--避免IE執行AJAX時,返回JSON出現下載文件 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list><value>text/html;charset=UTF-8</value> </list> </property> </bean> <!-- 啟動SpringMVC的注解功能,完成請求和注解POJO的映射 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON轉換器 --> </list> </property> </bean> <!-- 配置文件上傳,如果沒有使用文件上傳可以不用配置,當然如果不配,那么配置文件中也不必引入上傳組件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默認編碼 --> <property name="defaultEncoding" value="utf-8" /> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 內存中的最大值 --> <property name="maxInMemorySize" value="40960" /> <!-- 啟用是為了推遲文件解析,以便捕獲文件大小異常 --><property name="resolveLazily" value="true"/></bean> <!-- 配置ViewResolver 。可用多個ViewResolver 。使用order屬性排序。 InternalResourceViewResolver 放在最后--><bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"><property name="order" value="1"></property><property name="mediaTypes"><map><!-- 告訴視圖解析器,返回的類型為json格式 --><entry key="json" value="application/json" /><entry key="xml" value="application/xml" /><entry key="htm" value="text/htm" /></map></property><property name="defaultViews"><list><!-- ModelAndView里的數據變成JSON --><bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /></list></property><property name="ignoreAcceptHeader" value="true"></property></bean><!-- 對轉向頁面的路徑解析。prefix:前綴, suffix:后綴 --><!--JSP視圖解析器--><bean id="viewResolverJsp" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/"/><property name="suffix" value=".jsp"/></bean><bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="templateLoaderPath" value="/WEB-INF/views"/><!-- 設置頁面中文亂碼問題 --><property name="freemarkerSettings"> <props><prop key="defaultEncoding">UTF-8</prop> </props></property> </bean><bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><!-- 解決freemarker中文亂碼 --><property name="contentType" value="text/html;charset=UTF-8"/> <property name="cache" value="true"/><property name="prefix" value=""/><property name="suffix" value=".ftl"/><property name="order" value="0"/></bean><mvc:interceptors><mvc:interceptor ><mvc:mapping path="/**"/><!-- 對于靜態資源,可以通過后綴名<mvc:exclude-mapping path="/**/*.js"/><mvc:exclude-mapping path="/**/*.css"/><mvc:exclude-mapping path="/**/*.jpg"/><mvc:exclude-mapping path="/**/*.gif"/><mvc:exclude-mapping path="/**/*.png"/>也可以通過文件夾, 加這些exclude-mapping就不會被攔截器攔截到,資源能夠正常訪問 --><mvc:exclude-mapping path="/back_css/**"/><mvc:exclude-mapping path="/back_js/**"/><mvc:exclude-mapping path="/back_img/**"/><mvc:exclude-mapping path="/skin/**"/><bean class="com.ys.interceptors.DefaultInterceptors"/></mvc:interceptor></mvc:interceptors> </beans>
需要注意的就是:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="templateLoaderPath" value="/WEB-INF/views"/><!-- 設置頁面中文亂碼問題 --><property name="freemarkerSettings"> <props><prop key="defaultEncoding">UTF-8</prop> </props></property> </bean><bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><!-- 解決freemarker中文亂碼 --><property name="contentType" value="text/html;charset=UTF-8"/> <property name="cache" value="true"/><property name="prefix" value=""/><property name="suffix" value=".ftl"/><property name="order" value="0"/></bean>
這兩個配置文件,其中org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer在spring-webmvc.jar 包里面,項目要導入這個jar包才可以,或者會找不到類。?
注意:還有一種常見的導致亂碼問題:你頁面的編碼跟文件保存的編碼不一致時就會出現錯誤。右鍵修改為UTF-8就可以。
?