【JavaWeb】FreeMarker快速入门

FreeMarker

Freemarker是免费开源的模板引擎技术;

Freemarker脚本为Freemarker Template Language;

Freemarker提供了大量内建函数来简化开发;

JSP与Freemarker

JSP Freemarker
官方标准
执行方式 编译型 解释型
执行效率
开发效率
扩展能力
数据提取 JSTL+EL 内置标签

FreeMarker基本用法

FreemarkerSample1.java

package freemarker;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;

public class FreemarkerSample1 {

    public static void main(String[] args) throws TemplateNotFoundException, MalformedTemplateNameException,
            ParseException, IOException, TemplateException {
        // 1.加载模板
        // 创建核心配置对象
        Configuration config = new Configuration(Configuration.VERSION_2_3_28);
        // 设置加载的目录
        config.setClassForTemplateLoading(FreemarkerSample1.class, ""); // ""代表当前包
        // 得到模板对象
        Template t = config.getTemplate("sample1.ftl");
        // 2.创建数据
        Map data = new HashMap<>();
        data.put("site", "百度");
        data.put("url", "http://www.baidu.com");
        // 3.产生输出
        t.process(data, new OutputStreamWriter(System.out));
    }

}

sample1.ftl

<#-- 这是注释 -->
${site}-${url}

控制台输出

百度-http://www.baidu.com

FTL取值

  • ${属性名} 取值,可对属性进行计算
  • ${属性名!默认值} 如果属性不存在的话使用默认值
  • ${属性名?string("")} 格式化输出

分支判断

<#-- if -->
<#if state == 1>
我是1
<#elseif state == 2>
我是2

<#if user??> <#-- 判断对象是否为null -->
我不是null


<#-- switch -->
<#switch state>
    <#case 1>
        我是1
        <#break>
    <#case 2>
        我是2
        <#break>
    <#default>
        其他

list迭代

<#-- list迭代列表 -->
<#list students as stu>
 
  • ${stu_index}-${stu.name}
  • <#-- list迭代Map --> <#list map?keys as key> ${key}:${map[key]}

    常用内建函数

    函数名 说明 示例
    lower_case/upper_case 大小写转换 "abcdefg"?upper_case
    cap_first 首字母大写 "jackson"?cap_first
    index_of 查找字符索引 "abcdef"?index_of("b")
    length 返回字符串长度 "abcdef"?length
    round/floor/ceiling 四舍五入/下取整/上取整 pi?floor
    size 得到集合元素总数 students?size
    first/last 获取第一个/最后一个元素 students?first
    sort_by 按某个属性对集合排序 list?sort_by("time")
    <#-- ?string可以实现三目运算符的操作 -->
    ${(words?index_of("blood") != -1)?string("包含敏感词汇", "不包含敏感词汇")}
    
    <#-- replace -->
    ${words?replace("blood", "*****")}
    
    <#-- sort_by返回一个新的集合,默认升序排列 -->
    <#-- reverse将顺序反转 -->
    <#list computers?sort_by("price")?reverse as c>
        ${c.sn}-${c.price}
    

    freemarker中文官方参考手册: http://freemarker.foofun.cn/

    Freemarker与Servlet整合

    配置FreemarkerServlet

    web.xml

    
    
      fm
      
        index.html
        index.htm
        index.jsp
        default.html
        default.htm
        default.jsp
      
      
        freemarker
        freemarker.ext.servlet.FreemarkerServlet
        
            TemplatePath
            /WEB-INF/ftl
        
      
      
        freemarker
        *.ftl
      
    

    你可能感兴趣的:(【JavaWeb】FreeMarker快速入门)