zoukankan      html  css  js  c++  java
  • 【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<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>
    
  • 相关阅读:
    [收藏]15分钟内快速构建数据访问层
    asp.net 水晶报表主从表关联问题
    C#基础——关于类
    C#和Sql的时间操作心得(一)
    DataGrid导出到Word/Excel文档
    [收藏]SQL Server 索引结构及其使用
    .NET环境下水晶报表使用总结
    读写文件之日志文件
    HashTable实现购物车,抛弃数据库实现方式
    触碰心灵34句
  • 原文地址:https://www.cnblogs.com/huowuyan/p/11321866.html
Copyright © 2011-2022 走看看