背景
对于正在维护的项目,原始采用的是jsp进行页面渲染,在维护过程中,本着前后端数据分离的原则,开始采用freemarker进行页面渲染,但是又要兼容原始jsp页面,所以需要配置jsp,freemarker双视图解析器;
开始
1,pom文件中引入freemarker相关依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.25-incubating</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
2,修改spring-mvc文件,添加freemarker视图解析
2.1 原始jsp视图解析器添加order属性(order视图解析的优先级,值越小优先级越高);
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views" />
<property name="suffix" value=".jsp" />
<property name="order" value="1"/><!--视图解析优先级-->
</bean>
2.2 添加freemarker视图解析配置
<!--配置freemark视图解析器-->
<!--freemark视图解析器配置-->
<!-- 配置freeMarker视图解析器 -->
<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<property name="suffix" value=".ftl"/>
<property name="cache" value="true"/>
<property name="exposeSessionAttributes" value="true"/>
<property name="exposeRequestAttributes" value="true"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<!-- 在页面中使用${rc.contextPath}就可获得contextPath -->
<property name="requestContextAttribute" value="rc"/>
<!--配置视图的优先级,value值越小,优先级越大-->
<property name="order" value="0"/>
</bean>
<!-- 配置freeMarker的模板路径 -->
<bean id="FreeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!--ftl视图解析位置-->
<property name="templateLoaderPath" value="/WEB-INF/views/"/>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
<property name="defaultEncoding" value="UTF-8"/>
<property name="freemarkerSettings" ref="freemarkerConfig"/>
</bean>
<bean id="freemarkerConfig" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<!--配置freemarker初始化文件位置-->
<property name="location" value="classpath:freemarker.properties"/>
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
3.添加freemarker初始化properties配置文件
## 如果变量为null,转化为空字符串,比如做比较的时候按照空字符串做比较
classic_compatible=true
##去掉多余的空格,非常有用
whitespace_stripping=true
##模板更新事件,设置为1秒,正式环境设置为3600秒
#template_update_delay=3600
##模板更新时间,这里配置是1秒更新一次,正式环境,模板不会改变,可以降这个值很大,提高效率,就是被这个参数害死了,老是不更新
template_update_delay=1
##中国
locale=zh_CN
##编码utf8
default_encoding=utf_8
##url编码utf8
url_escaping_charset=utf_8
##显示日期格式
date_format=yyyy-MM-dd
##显示时间格式
time_format=HH:mm:ss
##显示日期格式
datetime_format=yyyy-MM-dd HH:mm:ss
##数字显示格式
number_format=0.######
output_encoding=UTF-8
#template_update_delay=1
boolean_format=true,false
#auto_import="/common/index.ftl" as ui
tag_syntax=auto_detect
4.测试
4.1创建freemark.ftl文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<#assign test="1">
${test}
<body>
4.2 Controller
@RequestMapping("getFreemark")
public String getFreeMark(Model model){
return MODEL_PATH + "freemark";
}