freemarker

什么是FreeMakrer

模板引擎技术
FreeMakrer是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写,具有以下特点:
(1)FreeMakrer适合被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。
(2)虽然FreeMakrer具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMakrer生成页面,通过模板显示准备的数据 。
(3)FreeMakrer不是一个Web应用框架,而适合作为Web应用框架一个组件。
(4)FreeMakrer与容器无关,因为它并不知道HTTP或Servlet。
(5)Freemarker 更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库。
(6)Freemarker 是免费的 。
数据模型+模板=输出

FreeMakrer的下载

<font color=#847oFF>jar 包:可在www.freemarker.org下载 ,或者取maven.aliyun.com下载</font>
插件:可在www.freemarker.org下载或者百度
插件放入eclipse中plugins目录下即可

FreeMakrer的基本语法

1、FreeMarker标记
***FreeMarker标记的设计非常精炼,只有三种1)*

$ : ${expression} FreeMarker会在输出时用实际值进行替代
       例如:${stockNum?default(‘’)}
2) # :标准的FTL标记。大部分FreeMarker指令都以#开始,可以明显地与html标记区分, 
<#if user = "BigJoe">our beloved leader</#if>。
同时,FTL文件的注释包含在<#--和-->(而不是<!--和-->)之间  
3)@作为用户定义指令使用宏变量时,使用@替代FTL标记中的#。后面将详细介绍宏 
2标准的FTL标记指令
1) if, else, elseif
2) switch, case, default, break
3) list, break
4) include
5) Import
6) assign
7) macro, nested, return
 if, else, elseif

例子

public class TestFreeMarker {
        public static void main(String[] args) throws IOException, TemplateException {


            Configuration cfg = new Configuration();
            //配置ftl查找目录
            cfg.setDirectoryForTemplateLoading(
            new File("template"));
            //设置数据的抓取模式
            cfg.setObjectWrapper(new DefaultObjectWrapper());

            Map latest = new HashMap();
            //构建数据
            latest.put("url", "products/greenmouse.html");
            latest.put("name", "green mouse");  
            // 创建一个hashMap
            Map root = new HashMap();
            // 存入值
            root.put("user", "Big Joe");
            root.put("latestProduct", latest);
            root.put("sex", "1");
            //数组list break 循环
            String[] str=new String[]{"1","2","3","4","5"};
            root.put("arr",str);
            List list=new ArrayList();
            User user=new User();
            user.setId("1");
            user.setName("张三");
            list.add(user);
            User user1=new User();
            user1.setId("2");
            user1.setName("李四");
            list.add(user1);
            root.put("userList", list);

            //找到模板对象 实例模板对象 
            Template temp = cfg.getTemplate("hello.ftl");
            //文件输出流
            FileOutputStream fos=new FileOutputStream("E:\\html\\hello.html");
            //输出到目标生成html
            Writer out = new OutputStreamWriter(fos);
            temp.process(root, out);
            out.flush();  

        }
}
public class User {
    private String id;
    private String name;
    public User(){

    }
    public User(String id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

freeemarker模板语法
freemarker的模板 ftl为后缀 语法类似于jsp的标签
添加 hellworld.ftl

<!-- 定义模板-->    
<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome ${user}!</h1>
  <p>Our latest product:
  <a href="${latestProduct.url}">${latestProduct.name}</a>!
<br/>
<#--
  if标记 键=
  -->
 我的性别是:  <br/>
  <#if sex = '1'><br/>
  <#else><br/>
  </#if>
  <#--
   list循环标记   数据或集合   as 临时变量
   临时变量_index   获取当前的索引从0开始 
    break 标记用于退出循环
  -->
 输出数组结果: <br/>
  <#list arr as tmp>
    <#if tmp_index=2>
        <#break>
    </#if>
    <#if (tmp_index+1)%2==0>
        <font color=green size=10>${tmp}--->${tmp_index+1}</font> <br/>
        <#else>
         <font color=red size=10>${tmp}--->${tmp_index+1}</font> <br/>
    </#if>
  </#list>

  输出list结果: <br/>
  <#list userList as userTmp>
    ${userTmp.id}---->${userTmp.name} <br/>
  </#list>
   <br/>
</body>
</html>  

freemarker内置的处理函数(http://freemarker.org/docs/ref_builtins.html
函数调用 语法为 () {‘ aaa ’?trim}

以下是字符串串函数的用法:

<#--FTL内置的处理函数-->
<#assign str='   hello my name is zhang    '>
<#assign str1='HELLO WORLD'>
<#--获取长度-->
${str?length}
<#--取空格-->
--${str?trim}--
<#--转小写-->
${str1?lower_case}
<#--转大写-->
${str?upper_case}
<#--获得序列中元素的数目-->
${userList?size}
<#--取得数字的整数部分-->
${1.6?int}
${userList?size}
<#--精度为3位-->
${1.656464513546313574652?float}
<#--判断变量是否存在-->
<#if  aaa?exists>
${aaa}
</#if>

定义变量:
<#assign age=12>
javaee环境下 使用freemarkerservlet寻找ftl文件并输出

添加一个servlet 映射路径 /t web.xml添加:

<servlet>  
    <description></description>  
    <display-name>TestServlet</display-name>  
    <servlet-name>TestServlet</servlet-name>  
    <servlet-class>webtest.TestServlet</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>TestServlet</servlet-name>  
    <url-pattern>/TestServlet</url-pattern>  
  </servlet-mapping> 

配置freemarkerservlet 在web.xml添加

 <servlet>
  <servlet-name>freemarker</servlet-name>
  <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
  <!--模板的查找路径 从上下文根路径查找模板ftl文件 -->
  <init-param>
    <param-name>TemplatePath</param-name>
    <param-value>/</param-value>
  </init-param>
    <!--是否不需要缓存 -->
  <init-param>
    <param-name>NoCache</param-name>
    <param-value>true</param-value>
  </init-param>
    <!--最终显示html -->
  <init-param>
    <param-name>ContentType</param-name>
    <param-value>text/html;charset=UTF-8</param-value>
  </init-param>

  <!--定时刷新模板-->
  <init-param>
    <param-name>template_update_delay</param-name>
    <param-value>0</param-value> 
  </init-param>
    <!--默认字符集 -->
  <init-param>
    <param-name>default_encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
     <!--数字的格式 -->
  <init-param>
    <param-name>number_format</param-name>
    <param-value>0.##</param-value>
  </init-param>
   <!--servlet在容器启动时实例化 -->
  <load-on-startup>1</load-on-startup>
</servlet>
### Freemarker模板引擎介绍 Freemarker 是一款用于生成文本输出(HTML网页、电子邮件、配置文件、源代码等)的模板引擎。其设计初衷是为了通过相同的机制来处理各种类型的文本生成需求,从而简化Web应用开发中的视图层实现[^1]。 #### 主要特点 - **强大的表达式语言** 支持丰富的数据操作功能,包括但不限于算术运算、字符串处理以及集合遍历等功能。 - **灵活的内容布局控制** 提供多种标签用于定义页面结构和样式,允许开发者轻松构建复杂多变的应用界面。 - **易于集成第三方库** 可方便地与其他Java框架协同工作,如Spring MVC, Struts2 等,在企业级项目中有广泛应用场景[^2]。 ### 使用方法概述 为了更好地理解如何使用Freemarker,下面将以创建名为`freemarker-demo` 的Maven工程为例说明具体步骤: #### 工程搭建 首先需要建立一个新的 Maven 项目,并在其 `pom.xml` 文件内加入如下依赖项以引入Freemarker库支持: ```xml <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency> ``` 接着可以在资源目录下新建一个 `.ftl` 后缀名的文件作为模板文件,例如 `hello.ftl`: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello Page</title> </head> <body> <h1>${message}</h1> <p>Welcome to the world of FreeMarker!</p> </body> </html> ``` 上述代码片段展示了最简单的 HTML 文档结构,并利用 `${}` 占位符预留了一个动态变量位置等待后续填充实际内容。 #### Java端调用逻辑编写 最后一步是在应用程序中加载并解析该模板文件。这里给出一段完整的示例程序展示整个过程: ```java import freemarker.template.Configuration; import freemarker.template.Template; import java.io.File; import java.io.FileWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args)throws Exception{ Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); // 设置模板所在路径 String templatePath = "src/main/resources/templates"; File dir = new File(templatePath); cfg.setDirectoryForTemplateLoading(dir); Template temp = cfg.getTemplate("hello.ftl"); Map<String,Object> dataModel = new HashMap<>(); dataModel.put("message", "Hello World!"); try (Writer out = new FileWriter(new File("output.html"))) { temp.process(dataModel,out); } } } ``` 这段代码实现了从指定位置读取模板文件(`hello.ftl`),并通过传入的数据模型对象 (`dataModel`) 将其中占位符替换为真实值后输出至目标文件(`output.html`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值