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
相关推荐
通过深入学习"Freemarker入门学习资料"中的内容,你可以掌握Freemarker的基本使用、语法特性、与Spring的整合方法,以及最佳实践,从而有效地进行Web应用的视图层开发。记得实践中不断探索和优化,提升模板设计和...
freemarker基础学习,是一本值得研究的书籍。对于初学者来说非常有用。
本压缩包集合了丰富的Freemarker学习资源,涵盖从基础到进阶的各种知识点,以下是这些文档中可能包含的详细内容: 1. **Freemarker中文手册.pdf**: 这份手册通常会详细介绍Freemarker的基本概念,如模板语言、...
1. **Freemarker基础概念** - **模板语言**:Freemarker使用一种简单的、声明式的模板语言,允许开发者编写模板,与后台数据模型结合,生成动态内容。 - **数据模型**:Freemarker模板与应用程序的数据模型进行...
通过阅读“freemarker学习”和“freemarkerѧϰ”这两个文件,你可以深入了解Freemarker的语法和实际应用场景,逐步掌握这个强大的模板引擎。不断练习和实践,你将在不久的将来成为一名熟练的Freemarker开发者,能够...
在这个“FreeMarker入门之一:say hello world”中,我们将探讨如何使用FreeMarker来创建一个简单的“Hello, World!”程序,了解其基本语法和工作原理。 1. **FreeMarker简介** FreeMarker是一个开源项目,由...
### FreeMarker入门知识详解 #### 一、FreeMarker概述 FreeMarker是一款强大的模板引擎,它以Java语言编写,主要用于生成动态HTML网页,特别是在MVC(Model-View-Controller)架构中,作为视图组件,负责将模型...
这是一个基础入门案例,旨在帮助初学者快速理解这两个技术的结合。 Spring Boot是一个由Pivotal团队开发的Java框架,它简化了Spring应用的初始搭建以及开发过程。它内置了各种默认配置,使得开发者可以快速地创建...
总结来说,"Servlet + Freemarker 入门练习"涉及以下几个关键知识点: 1. **Servlet**:Java 服务器端编程,处理 HTTP 请求,实现业务逻辑。 2. **Freemarker**:模板引擎,分离视图和逻辑,生成动态 HTML。 3. **...
本示例“一个意义深刻的FreeMarker入门例子之HelloWord”旨在帮助初学者理解并掌握FreeMarker的基本用法。 在Java Web开发中,FreeMarker与后端控制器如Servlet或Spring MVC中的Controller协同工作,允许开发者将...
这只是Freemarker的基础使用。实际上,Freemarker支持更复杂的逻辑控制、循环结构、条件判断、自定义函数等特性,使得你可以构建出功能丰富的动态网页。在实际开发中,通常会结合Servlet或Spring MVC等Web框架,将...
本入门手册将帮助你了解FreeMarker的基本概念、语法以及如何在实际项目中运用。 1. **基本概念** - **模板语言**:FreeMarker是模板驱动的,它不直接处理数据,而是通过模板和数据模型结合来生成最终输出。 - **...
在本文中,我们将深入探讨FreeMarker的基础知识,包括其核心概念、语法以及如何在实际项目中进行应用。 1. **核心概念** - **模板(Template)**:Freemarker的工作基于模板,模板是纯文本文件,其中包含静态文本...
FreeMarker 是一个强大的模板引擎,主要用于生成HTML或其他类型的文本输出,尤其在Web开发中被...通过学习FreeMarker,开发者可以更好地实现MVC架构中的视图层,提高开发效率,并创建出更加灵活、可维护的Web应用程序。
在`Freemarker入门Demo`中,你可以通过创建简单的模板文件,学习如何与后端Java代码交互,传递数据模型,并使用Freemarker的语法来呈现动态内容。通常,一个基本的流程包括:控制器处理请求,准备数据模型,然后使用...
在快速入门中,我们看到FreeMarker的基本工作原理是通过模板中的特定指令,如`${...}`,将动态数据插入到静态模板中。例如,以下模板展示了如何欢迎用户并显示最新产品的信息: ```html <title>Welcome! <h1>...
本教程将通过一个基础的"freemarker入门demo",帮助你理解Freemarker的工作原理和基本用法。 首先,让我们了解一下Freemarker模板语言(FTL)。FTL是Freemarker Template Language的缩写,它是一种声明式的标记语言...
本指南主要针对FreeMarker 2.3.23版本,提供详细的API文档和入门教程。 在开始之前,你需要了解FreeMarker的基本概念:模板(Template)和数据模型(Data Model)。模板是包含静态文本和变量的文件,变量会被数据...
在本篇文章中,我们将深入探讨FreeMarker的学习要点,包括其基本概念、语法以及实际应用。 一、基本概念 1. 模板(Template):FreeMarker的中心是模板文件,它是一种特殊的文本文件,包含固定文本和变量。变量是由...