FreeMarker简单介绍

FreeMarker概要

    FreeMarker是一款模板引擎,即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

    FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Languager(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据,而在模板之外注意要展示什么数据。

FreeMarker配置

maven项目添加POM依赖:

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.23</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
SpringMVC配置视图解析器

 <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <!--是否启用缓存 -->
        <property name="cache" value="true" />
        <!--自动添加到路径中的前缀 -->
        <property name="prefix" value="" />
        <!--自动添加到路径中的后缀 -->
        <property name="suffix" value=".html" />
        <!--指定视图渲染类 -->
        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
        <!-- 设置是否暴露Spring的macro辅助类库,默认为true -->
        <property name="exposeSpringMacroHelpers" value="true" />
        <!-- 是否应将所有request属性添加到与模板合并之前的模型。默认为false。 -->
        <property name="exposeRequestAttributes" value="true" />
        <!-- 是否应将所有session属性添加到与模板合并之前的模型。默认为false。 -->
        <property name="exposeSessionAttributes" value="true" />
        <!-- 在页面中使用${rc.contextPath}就可获得contextPath -->
        <property name="requestContextAttribute" value="rc" />
        <!--设置所有视图的内容类型,如果视图本身设置内容类型视图类可以忽略 -->
        <property name="contentType" value="text/html;charset=UTF-8" />
        <!-- 优先级,越小越前 -->
        <property name="order" value="1" />
    </bean>
模板引擎的配置细节

<bean id="freemarkerConfig"  class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath"  value="/WEB-INF/html" />  <!-- 模板路径 -->
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">5</prop><!-- 刷新模板的周期,单位为秒 -->
                <prop key="defaultEncoding">UTF-8</prop><!--模板的编码格式 -->
                <prop key="url_escaping_charset">UTF-8</prop><!--url编码格式 -->
                <prop key="classic_compatible">true</prop> <!--此属性可以防止模板解析空值时的错误 -->
                <prop key="locale">zh_CN</prop> <!--该模板所使用的国际化语言环境选项-->
                <prop key="boolean_format">true,false</prop> <!--布尔值格式-->
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <!--日期时间格式-->
                <prop key="time_format">HH:mm:ss</prop><!--时间格式-->
                <prop key="number_format">0.######</prop><!--数字格式-->
                <prop key="whitespace_stripping">true</prop><!--自动开启/关闭空白移除,默认为true-->
            </props>
        </property>
    </bean>

FreeMarker标签

输出标签

输出散列变量:${ModelKey}

字符串常用操作:

${ModelKey?html}    对HTML进行编码(替换特殊符号)

${ModelKey?cap_first}    首字母大写

${ModelKey?lower_case}    字符串转小写

${ModelKey?upper_case}    字符串转大写

${ModelKey?trim}    首位去空格

数字类型常用操作:

${ModelKey?int}    显示转换成int类型

日期类型常用操作:

${ModelKey?string("yyyy-MM-dd HH:mm:ss")}    格式化时间

获取会话级变量Session中的值:

${Session.key}

判断标签

<#if(score>=90)>

优秀

<#elseif(score>=80)>

良好

<#elseif(score>=70)>

中等

<#elseif(score>=60)>

及格

<#else>

不及格

</#if>

遍历标签

<#list products as prod>

    <tr>

            <td>${prod.prodSn}</td>

            <td>${prod.prodName}</td>

            <td>${prod.prodPrice}</td>

            <td>${prod.prodStock}</td>

            <td>${prod.prodSale}</td>

    </tr>

</#list>

导入标签

<#include "url"/>

生成静态页面

public static void buildPage(
    String modulePath,
    String moduleFile,
    String targetPath,
    Map map ) throws Exception{
    // 生成Freemarker模板配置对象
    Configuration configuration = new Configuration();
    // 设置模板加载器
    configuration.setDirectoryForTemplateLoading(new File(modulePath));
    // 设置编码格式
    configuration.setDefaultEncoding("UTF-8");
    // 获取或创建一个模版。  
    Template template = configuration.getTemplate(moduleFile); 
    // 设置文件输入流编码,不然生成的html文件会中文乱码
    FileWriterWithEncoding out = new FileWriterWithEncoding(targetPath,"UTF-8");   
    // 开始生成静态页面
    template.process(map, out);
    out.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值