`

freeMarker入门学习

阅读更多

        freeMarker入门实例就是最好的入门资料,如下即为入门的工程实例。

一.工程结构



二.代码

1.TemplateDemo.java

package com.bijian.study;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.w3c.dom.Document;

import freemarker.ext.beans.BeansWrapper;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateHashModel;
import freemarker.template.TemplateModel;

public class TemplateDemo {
	
    public static void main(String[] args) throws Exception {
    	
        //---------------------FreeMarker配置 ---------------------------
        FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();

        //指定模板文件路径
        //file:/D:/SoftWare/workspace/FreeMarkerDemo/bin/com/bijian/study/
        //String templateLoaderPath = "file:" + TemplateDemo.class.getResource("").getPath();
        
        //file:/D:/SoftWare/workspace/FreeMarkerDemo/bin/
        //String templateLoaderPath = "file:" + TemplateDemo.class.getClassLoader().getResource("").getFile();
      	
        //file:D:\SoftWare\workspace\FreeMarkerDemo\.
        //String templateLoaderPath = "file:" + new File(".").getAbsolutePath();
        
        //file:D:\SoftWare\workspace\FreeMarkerDemo
        String templateLoaderPath = "file:" + new File("").getAbsolutePath();
        freeMarkerConfigurer.setTemplateLoaderPath(templateLoaderPath);

        Properties settings = new Properties();
        settings.setProperty("template_update_delay", "0");
        settings.setProperty("default_encoding", "UTF-8");
        settings.setProperty("locale", "zh_CN");
        settings.setProperty("classic_compatible", "true");
        freeMarkerConfigurer.setFreemarkerSettings(settings);

        Configuration configuration = freeMarkerConfigurer.createConfiguration();
        Template template = configuration.getTemplate("freeMarkerDemo.ftl");
        //---------------------FreeMarker配置---------------------------

        //==========================范例 start==================================
        Map<String, Object> parameters = new HashMap<String, Object>();

        //1.简单字符串
        parameters.put("textDemo", "Hello World!!");

        //2.计算||条件判断||输出特殊字符
        int a = 1;
        int b = 2;
        parameters.put("a", a);
        parameters.put("b", b);

        //3.遍历List
        List<String> list = new ArrayList<String>();
        list.add("早餐");
        list.add("中餐");
        list.add("晚餐");
        parameters.put("list", list);

        //4.遍历map
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        parameters.put("map", map);

        //5.遍历复杂map
        Map<String,Object>  userInfo = new HashMap<String,Object>();
        userInfo.put("username","username");
        Map<String,Object> cMap = new HashMap<String,Object>();
        cMap.put("cKey1", "cValue1");
        cMap.put("cKey2", "cValue2");
        userInfo.put("cMap",cMap);
        parameters.put("userinfo", userInfo);
        
        //6.遍历嵌套map
        Map<String, Object> outerMap = new HashMap<String, Object>();
        Map<String, String> innerMap = new HashMap<String, String>();
        innerMap.put("innerKey1", "innerValue1");
        innerMap.put("innerKey2", "innerValue2");
        outerMap.put("key1", "value1");
        outerMap.put("key2", "value2");
        outerMap.put("innerMap", innerMap);
        parameters.put("outerMap", outerMap);
        
        //7.Map、List嵌套
        Map<String, Object> mMap = new HashMap<String, Object>();
        List<String> innerList = new ArrayList<String>();
        innerList.add("吃早餐");
        innerList.add("吃中餐");
        innerList.add("吃晚餐");
        mMap.put("key1", "value1");
        mMap.put("key2", "value2");
        mMap.put("innerList", innerList);
        parameters.put("mMap", mMap);
        
        //8.调用对象方法
        TemplateDemo tDemo = new TemplateDemo();
        parameters.put("tDemo", tDemo);

        //9.XPath读取XML配置信息
        List<UserDTO> users = getUsers();
        parameters.put("users", users);

        //10.调用静态方法
        BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
        TemplateHashModel staticModels = wrapper.getStaticModels();
        TemplateModel staticT = staticModels.get(TemplateDemo.class.getName());
        parameters.put("T", staticT);

        //11.枚举
        TemplateHashModel enumModels = wrapper.getEnumModels();
        TemplateHashModel enumDemo = (TemplateHashModel) enumModels.get(EnumDemo.class.getName());
        parameters.put("E", enumDemo);
        
        //12.模板模型
        ObjectWrapper objectWrapper = wrapper.getOuterIdentity();
        TemplateModel userModel = objectWrapper.wrap(new UserDTO(){
            {
                setName("testUser");
                setId("12345678");
            }
        });
        parameters.put("userModel", userModel);
        //==========================范例 end==================================

        //-----------------------根据模板和参数生成字符串----------------------------
        String ftl = FreeMarkerTemplateUtils.processTemplateIntoString(template, parameters);

        System.out.println(ftl);
    }

    public String getHello(String name) {
        return "Hello " + name;
    }

    public static List<UserDTO> getUsers() throws Exception {
    	
        List<UserDTO> users = new ArrayList<UserDTO>();
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document document = builder.parse(new File(TemplateDemo.class.getResource("userInfo.xml").getPath()));
        XPath xpath = XPathFactory.newInstance().newXPath();
        String userCount = (String) xpath.evaluate("count(.//Users/user)", document, XPathConstants.STRING);
        for (int i = 0, count = Integer.valueOf(userCount); i < count; i++) {
            String userId = (String) xpath.evaluate(".//Users/user[" + (i + 1) + "]/@id", document,
                    XPathConstants.STRING);
            String name = (String) xpath.evaluate(".//Users/user[" + (i + 1) + "]/name", document,
                    XPathConstants.STRING);
            UserDTO userDTO = new UserDTO();
            userDTO.setId(userId);
            userDTO.setName(name);
            users.add(userDTO);
        }
        return users;
    }

    public static String staticMethod() {
        return "A STATIC method is executing";
    }
}

2.UserDTO.java

package com.bijian.study;

public class UserDTO {
	
    private String id;
    private String 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;
    }
}

3.EnumDemo.java

package com.bijian.study;

public enum EnumDemo {

	Spring, Summer, Autumn, Winter;

	public String getSeason() {
		switch (this) {
		case Spring:
			return "春天";
		case Summer:
			return "夏天";
		case Autumn:
			return "秋天";
		case Winter:
			return "冬天";
		default:
			return "你想表达啥!!!";
		}
	}
}

4.userInfo.xml

<Users>
	<user id="user1">
		<name>张三</name>
	</user>
	<user id="user2">
		<name>李四</name>
	</user>
	<user id="user3">
		<name>张二</name>
	</user>
	<user id="userx">
		<name>王五</name>
	</user>
</Users>

5.freeMarkerDemo.ftl

<#-- ==================FreeMarker模板生成的内容  START===================== -->

范例一:简单输出
	textDemo的值是:${textDemo}

范例二:计算||条件判断||输出特殊字符
	a == ${a};b == ${b}
	${a} + ${b} = ${a + b}
	<#if (a > b)>
	a 大于 b
	<#elseif (a == b)>
	a 等于 b
	<#elseif (a < b)>
	a 小于 b
	</#if>
	<#assign c = a + b>
	<#noparse><#assign c = a + b>; ${c} = </#noparse>${c}
	${r'<#assign c = a + b>'}; ${r'${c}'} = ${c}
	
范例三:List遍历
	每天吃几餐:
	<#list list as item>
	${item_index + 1}.${item}
	</#list>

范例四:Map遍历
	<#list map?keys as key>
		${key} == ${map[key]}
	</#list>

范例五:复杂Map遍历
	<#assign cmap = userinfo.cMap>
    <#list cmap?keys as key> 
        ${key} == ${cmap[key]}
    </#list>

范例六:Map嵌套遍历
	<#list outerMap?keys as key>
		<#assign innerMap = outerMap[key]>
		<#if innerMap?is_hash>
			<#list innerMap?keys as _key>
				${_key} == ${innerMap[_key]}
			</#list>
		<#elseif innerMap?string>
			${key} == ${innerMap}
			<#-- ${key} == ${outerMap[key]} -->
		</#if>
	</#list>

范例七:Map、List嵌套遍历
	<#list mMap?keys as key>
		<#assign list = mMap[key]>
        <#-- if key=="innerList" -->
        <#if key?ends_with("List")>
			<#list list as item>
				${item_index + 1}.${item}
			</#list>
		<#else>
			${key} == ${list}
		</#if>
	</#list>

范例八:调用对象方法
	${tDemo.getHello('FreeMarker')}
	
范例九:XPath读取XML配置信息
	一共有:${users?size}个人,他们分别是:
	<#list users as user>
		${user.id}:${user.name}
	</#list>
	<#assign firstPerson = users?first>
	第一个人是:${firstPerson.name}
	<#assign lastPerson = users?last>
	最后一个人是:${lastPerson.name}

范例十:调用静态方法
	${T.staticMethod()}
	
范例十一:枚举
	${E.Summer.getSeason()}
	${E.Autumn.getSeason()}

范例十二:模板模型
	${userModel.name}:${userModel.getName()}
	${userModel.id}:${userModel.getId()}
	
<#-- ==================FreeMarker模板生成的内容  END===================== -->

 

三.TemplateDemo.java的主方法运行结果

范例一:简单输出
	textDemo的值是:Hello World!!

范例二:计算||条件判断||输出特殊字符
	a == 1;b == 2
	1 + 2 = 3
	a 小于 b
	<#assign c = a + b>; ${c} = 3
	<#assign c = a + b>; ${c} = 3
	
范例三:List遍历
	每天吃几餐:
	1.早餐
	2.中餐
	3.晚餐

范例四:Map遍历
		key2 == value2
		key1 == value1

范例五:复杂Map遍历
        cKey1 == cValue1
        cKey2 == cValue2

范例六:Map嵌套遍历
			key2 == value2
			key1 == value1
				innerKey1 == innerValue1
				innerKey2 == innerValue2

范例七:Map、List嵌套遍历
				1.吃早餐
				2.吃中餐
				3.吃晚餐
			key2 == value2
			key1 == value1

范例八:调用对象方法
	Hello FreeMarker
	
范例九:XPath读取XML配置信息
	一共有:4个人,他们分别是:
		user1:张三
		user2:李四
		user3:张二
		userx:王五
	第一个人是:张三
	最后一个人是:王五

范例十:调用静态方法
	A STATIC method is executing
	
范例十一:枚举
	夏天
	秋天

范例十二:模板模型
	testUser:testUser
	12345678:12345678

 

  • 大小: 24.6 KB
分享到:
评论

相关推荐

    Freemarker入门学习资料

    通过深入学习"Freemarker入门学习资料"中的内容,你可以掌握Freemarker的基本使用、语法特性、与Spring的整合方法,以及最佳实践,从而有效地进行Web应用的视图层开发。记得实践中不断探索和优化,提升模板设计和...

    freemarker基础学习.pdf

    freemarker基础学习,是一本值得研究的书籍。对于初学者来说非常有用。

    freemarker学习资料汇总

    本压缩包集合了丰富的Freemarker学习资源,涵盖从基础到进阶的各种知识点,以下是这些文档中可能包含的详细内容: 1. **Freemarker中文手册.pdf**: 这份手册通常会详细介绍Freemarker的基本概念,如模板语言、...

    freemarker中文学习资料

    1. **Freemarker基础概念** - **模板语言**:Freemarker使用一种简单的、声明式的模板语言,允许开发者编写模板,与后台数据模型结合,生成动态内容。 - **数据模型**:Freemarker模板与应用程序的数据模型进行...

    freemarker入门文档及例子

    通过阅读“freemarker学习”和“freemarkerѧϰ”这两个文件,你可以深入了解Freemarker的语法和实际应用场景,逐步掌握这个强大的模板引擎。不断练习和实践,你将在不久的将来成为一名熟练的Freemarker开发者,能够...

    FreeMarker入门之一:say hello world

    在这个“FreeMarker入门之一:say hello world”中,我们将探讨如何使用FreeMarker来创建一个简单的“Hello, World!”程序,了解其基本语法和工作原理。 1. **FreeMarker简介** FreeMarker是一个开源项目,由...

    学习FreeMarker入门文档

    ### FreeMarker入门知识详解 #### 一、FreeMarker概述 FreeMarker是一款强大的模板引擎,它以Java语言编写,主要用于生成动态HTML网页,特别是在MVC(Model-View-Controller)架构中,作为视图组件,负责将模型...

    springboot集成freemarker入门案例

    这是一个基础入门案例,旨在帮助初学者快速理解这两个技术的结合。 Spring Boot是一个由Pivotal团队开发的Java框架,它简化了Spring应用的初始搭建以及开发过程。它内置了各种默认配置,使得开发者可以快速地创建...

    Servlet + Freemarker 入门练习

    总结来说,"Servlet + Freemarker 入门练习"涉及以下几个关键知识点: 1. **Servlet**:Java 服务器端编程,处理 HTTP 请求,实现业务逻辑。 2. **Freemarker**:模板引擎,分离视图和逻辑,生成动态 HTML。 3. **...

    一个意义深刻 FreeMarker 入门例子之HelloWord

    本示例“一个意义深刻的FreeMarker入门例子之HelloWord”旨在帮助初学者理解并掌握FreeMarker的基本用法。 在Java Web开发中,FreeMarker与后端控制器如Servlet或Spring MVC中的Controller协同工作,允许开发者将...

    freemarker学习

    这只是Freemarker的基础使用。实际上,Freemarker支持更复杂的逻辑控制、循环结构、条件判断、自定义函数等特性,使得你可以构建出功能丰富的动态网页。在实际开发中,通常会结合Servlet或Spring MVC等Web框架,将...

    FreeMarker入门手册

    本入门手册将帮助你了解FreeMarker的基本概念、语法以及如何在实际项目中运用。 1. **基本概念** - **模板语言**:FreeMarker是模板驱动的,它不直接处理数据,而是通过模板和数据模型结合来生成最终输出。 - **...

    freemarker入门代码

    在本文中,我们将深入探讨FreeMarker的基础知识,包括其核心概念、语法以及如何在实际项目中进行应用。 1. **核心概念** - **模板(Template)**:Freemarker的工作基于模板,模板是纯文本文件,其中包含静态文本...

    freeMarker学习入门

    FreeMarker 是一个强大的模板引擎,主要用于生成HTML或其他类型的文本输出,尤其在Web开发中被...通过学习FreeMarker,开发者可以更好地实现MVC架构中的视图层,提高开发效率,并创建出更加灵活、可维护的Web应用程序。

    freemarker入门Demo

    在`Freemarker入门Demo`中,你可以通过创建简单的模板文件,学习如何与后端Java代码交互,传递数据模型,并使用Freemarker的语法来呈现动态内容。通常,一个基本的流程包括:控制器处理请求,准备数据模型,然后使用...

    freemarker学习资料

    在快速入门中,我们看到FreeMarker的基本工作原理是通过模板中的特定指令,如`${...}`,将动态数据插入到静态模板中。例如,以下模板展示了如何欢迎用户并显示最新产品的信息: ```html &lt;title&gt;Welcome! &lt;h1&gt;...

    freemarker入门demo

    本教程将通过一个基础的"freemarker入门demo",帮助你理解Freemarker的工作原理和基本用法。 首先,让我们了解一下Freemarker模板语言(FTL)。FTL是Freemarker Template Language的缩写,它是一种声明式的标记语言...

    FreeMarker入门指南API文档(中文版)

    本指南主要针对FreeMarker 2.3.23版本,提供详细的API文档和入门教程。 在开始之前,你需要了解FreeMarker的基本概念:模板(Template)和数据模型(Data Model)。模板是包含静态文本和变量的文件,变量会被数据...

    FreeMarker学习代码小结

    在本篇文章中,我们将深入探讨FreeMarker的学习要点,包括其基本概念、语法以及实际应用。 一、基本概念 1. 模板(Template):FreeMarker的中心是模板文件,它是一种特殊的文本文件,包含固定文本和变量。变量是由...

Global site tag (gtag.js) - Google Analytics