FreeMarker实践总结

简介: FreeMarker实践总结

【1】FreeMarker 的缓存

FreeMarker 的缓存处理主要用于模版文件的缓存。一般来讲,模版文件改动不会很频繁,在一个流量非常大的网站中,如果频繁的读取模版文件对系统的负担还是很重的。


因此 FreeMarker 通过将模版文件的内容进行缓存,来降低模版文件读取的频次,降低系统的负载。


当处理某个模版时,FreeMarker直接从缓存中返回对应的 Template 对象,并有一个默认的机制来保证该模版对象是跟模版文件同步的。


如果使用 FreemarkerServlet 时,有一个配置项template_update_delay用来指定更新模版文件的间隔时间,相当于多长时间检测一下是否有必要重新加载模版文件,0 表示每次都重新加载,否则为多少毫秒钟检测一下模版是否更改。

template_update_delay=0


FreeMarker定义了一个统一的缓存处理接口CacheStorage,默认的实现是 MruCacheStorage 最近最少使用的缓存策略。

一般情况下,很少需要对缓存进行扩展处理。可以通过下面的代码指定最大缓存的模版数:

cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250))


其中第一个参数是最大的强引用对象数,第二个为最大的弱引用对象数。

这两个值FreeMarker默认的是0和 Integer.MAX_VALUE,表明模版缓存数是无限的


【2】SpringMVC禁用缓存配置

①先设置springmvc的缓存控制。


这是最高优先级的缓存控制。一旦springmvc发现没有缓存开启,就会进行cache。如果发现缓存没开启,则会每次生成一个view(通过调用freemarker的方法来进行)。

   <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="cache" value="false" />
        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
        <property name="suffix" value=".ftl" />
        <property name="contentType" value="text/html;charset=UTF-8"/>
         <!-- 此变量值为pageContext.request, 页面使用方法:request.contextPath -->
        <property name="requestContextAttribute" value="request" />
        <property name="exposeSpringMacroHelpers" value="true" />
        <property name="exposeRequestAttributes" value="true" />
        <property name="exposeSessionAttributes" value="true" />
    </bean>


② 再设置freemakre的缓存控制。

freemakre通过一个时间长度来控制缓存。

<bean id="freemarkerConfigurer"    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
       <property name="templateLoaderPath" value="/WEB-INF/views/" /> 
        <property name="freemarkerSettings">  
            <props>  
                <prop key="template_update_delay">0</prop>  
                 <prop key="default_encoding">UTF-8</prop>  
                <prop key="locale">zh_CN</prop>  
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>  
                <prop key="date_format">yyyy-MM-dd</prop>  
                <prop key="number_format">#.##</prop>  
            </props>  
        </property>  
    </bean>


这里关键是设置 template_update_delay 为0 ,0标示不检测模板,每次都重新载入。

【3】Freemarker常见应用实践

① Freemarker实现三目运算符


Freemarker里面不支持三目运算符,如果要使用请参考如下格式:

<select id="type" name="type" class="">
<option ${(member.type==1)?string('selected','')} value="1">普通用户</option>
<option ${(member.type==2)?string('selected','')}  value="2">商家</option>
<option ${(member.type==3)?string('selected','')}  value="3">普通管理员</option>
</select>


目录
相关文章
|
5月前
|
XML 数据格式
SpringMVC中使用FreeMarker实践
SpringMVC中使用FreeMarker实践
28 0
|
24天前
|
XML Java 数据格式
freemarker从入门到精通
freemarker从入门到精通
|
5月前
|
JavaScript Java Maven
Thymeleaf实践总结
Thymeleaf实践总结
28 0
|
XML Java 程序员
模板引擎:第一章:FreeMarker
模板引擎:第一章:FreeMarker
162 0
模板引擎:第一章:FreeMarker
|
设计模式 前端开发 Java
【JavaWeb】模板引擎Thymeleaf
内容提取出来单独的放在一个文件中,称为模板,对于一些动态的内容,可以将这些内容在模板中使用占位符占位,当服务器把这些动态的内容计算好了之后,就可以把模板中占位符替换成动态计算的结果,然后把组装好的HTML格式的字符串在返回给浏览器
【JavaWeb】模板引擎Thymeleaf
|
Java 程序员 Apache
模板引擎——FreeMarker初体验
FreeMarker 是一款模板引擎:一种基于模板的、用来生成输出文本(任何来自于 HTML格式的文本用来自动生成源代码)的通用工具。
|
前端开发
Freemarker - 基础篇(下)
Freemarker - 基础篇(下)
165 0
Freemarker - 基础篇(下)
|
前端开发 Java
Freemarker - 基础篇(上)
Freemarker - 基础篇(上)
312 0
Freemarker - 基础篇(上)
|
开发框架 前端开发 Java
FreeMarker简介
FreeMarker简介
137 0
|
Web App开发 安全 Java
一篇很全面的freemarker教程
FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{..
1718 0