美文网首页
【JavaWeb】FreeMarker快速入门

【JavaWeb】FreeMarker快速入门

作者: 或无言 | 来源:发表于2019-08-08 16:19 被阅读0次

    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<String, Object> 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>
    <#if user??> <#-- 判断对象是否为null -->
    我不是null
    </#if>
    
    <#-- switch -->
    <#switch state>
        <#case 1>
            我是1
            <#break>
        <#case 2>
            我是2
            <#break>
        <#default>
            其他
    </#switch>
    

    list迭代

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

    常用内建函数

    函数名 说明 示例
    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}
    </#list>
    

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

    Freemarker与Servlet整合

    配置FreemarkerServlet

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>fm</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>freemarker</servlet-name>
        <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
        <init-param>
            <param-name>TemplatePath</param-name>
            <param-value>/WEB-INF/ftl</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>freemarker</servlet-name>
        <url-pattern>*.ftl</url-pattern>
      </servlet-mapping>
    </web-app>
    

    相关文章

      网友评论

          本文标题:【JavaWeb】FreeMarker快速入门

          本文链接:https://www.haomeiwen.com/subject/hmgxjctx.html