热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Freemarker

目录Freemarker简介安装使用FIL取值list迭代列表list迭代Map内建函数Freemarker与Servlet整合Freemarker简介FreeMarker是一款主

目录



  • Freemarker

    • 简介

    • 安装使用

    • FIL取值

    • list迭代列表

    • list迭代Map

    • 内建函数

    • Freemarker与Servlet整合



Freemarker

简介



  • FreeMarker 是一款 主流的模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。

  • 模板引擎的目标是数据+模板=结果


  • 模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言,


安装使用

下载地址:http://mirror.bit.edu.cn/apache/freemarker/engine/2.3.28/binaries/apache-freemarker-2.3.28-bin.tar.gz

使用步骤:



  • 加载模板



    • 创建核心配置对象

    • 设置加载目录

    • 获取模板对象


  • 创建数据


  • 产生输出


FreemarkerDemo1.java

//创建核心配置对象
Configuration cOnfiguration= new Configuration(Configuration.VERSION_2_3_28);
//设置加载目录
configuration.setClassForTemplateLoading(FreemarkerDemo1.class,"");
//得到模板对象
Template t = configuration.getTemplate("demo2.ftl");
//创建数据
Map data = new HashMap();
List students=new ArrayList<>();
students.add(new Student("1001","Jack",18));
students.add(new Student("1002","Lucy",17));
students.add(new Student("1003","Tom",19));
students.add(new Student("1004","Tim",20));
students.add(new Student("1005","Marry",18));
data.put("students",students);
//产生输出
t.process(data, new OutputStreamWriter(System.out));

FIL取值

语法:

${属性} ${name} ${student.name}

${属性 ! 默认值} ${name ! "不存在该属性"}

${属性 ?String()} ${salary ? String("0.00")}


list迭代列表

Student.java

package entity;
public class Student {
private String sno;
private String name;
private Integer age;
public Student(String sno, String name, Integer age) {
this.sno = sno;
this.name = name;
this.age = age;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

FreemarkerDemo2.java

package freemarker;
import entity.Student;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.*;
public class FreemarkerDemo2 {
public static void main(String[] args) throws IOException, TemplateException {
//创建核心配置对象
Configuration cOnfiguration= new Configuration(Configuration.VERSION_2_3_28);
//设置加载目录
configuration.setClassForTemplateLoading(FreemarkerDemo2.class,"");
//得到模板对象
Template t = configuration.getTemplate("demo2.ftl");
//创建数据
Map data = new HashMap();
List students=new ArrayList<>();
students.add(new Student("1001","Jack",18));
students.add(new Student("1002","Lucy",17));
students.add(new Student("1003","Tom",19));
students.add(new Student("1004","Tim",20));
students.add(new Student("1005","Marry",18));
data.put("students",students);
//产生输出
t.process(data, new OutputStreamWriter(System.out));
}
}

demo2.ftl

<#list students as s>
序号:${s_index+1}
学号:${s.sno}
姓名:${s.name}
年龄:${s.age}
-------------------------------

list迭代Map

FreemarkerDemo3.java

package freemarker;
import entity.Student;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.*;
public class FreemarkerDemo3 {
public static void main(String[] args) throws IOException, TemplateException {
//创建核心配置对象
Configuration cOnfiguration= new Configuration(Configuration.VERSION_2_3_28);
//设置加载目录
configuration.setClassForTemplateLoading(FreemarkerDemo3.class,"");
//得到模板对象
Template t = configuration.getTemplate("demo3.ftl");
//创建数据
Map data = new HashMap();
List students=new ArrayList<>();
students.add(new Student("1001","Jack",18));
students.add(new Student("1002","Lucy",17));
students.add(new Student("1003","Tom",19));
students.add(new Student("1004","Tim",20));
students.add(new Student("1005","Marry",18));
data.put("students",students);
Map studentMap=new LinkedHashMap();
for(Student s:students){
studentMap.put(s.getSno(),s);
}
data.put("studentMap",studentMap);
//产生输出
t.process(data, new OutputStreamWriter(System.out));
}
}

Demo03.ftl

<#list studentMap?keys as k>
${k}-${studentMap[k].name}

内建函数

参考手册:http://freemarker.foofun.cn/


Freemarker与Servlet整合



  • 在WEB-INF目录下的lib文件夹中导入freemarker包

  • 配置web.xml文件


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">

freemarker
freemarker.ext.servlet.FreemarkerServlet


TemplatePath

/WEB-INF/ftl



freemarker

*.ftl



  • 编写Servlet类

package Freemarker;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@WebServlet("/fre_servlet")
public class FreemarkerServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("----------------------------");
List students= new ArrayList<>();
for (int i = 0; i <5; i++) {
Map student = new HashMap<>();
student.put("sno", "S" + i);
student.put("name", "Jack" + i);
students.add(student);
}
request.setAttribute("students", students);
request.getRequestDispatcher("student.ftl").forward(request, response);
}
}


  • 编写ftl文件

<#list students as student>
学号:${student.sno}-----姓名:${student.name}


  • 启动Tomcat,访问Servlet


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
author-avatar
卖女孩的小方子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有