freemarker
- 格式:docx
- 大小:89.77 KB
- 文档页数:9
freemarker入门1.什么是FreeMarkerFreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库FreeMarker是免费的而且你还可以通过Eclipse的插件来编辑FreeMarker,经过验证,FreeMarker 最好的Eclipse 编辑插件是 JBoss Tools。
2.FreeMarker特性1、通用目标能够生成各种文本:HTML、XML、RTF、Java源代码等等易于嵌入到你的产品中:轻量级;不需要Servlet环境插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器2、强大的模板语言所有常用的指令:include、if/elseif/else、循环结构在模板中创建和改变变量几乎在任何地方都可以使用复杂表达式来指定值命名的宏,可以具有位置参数和嵌套内容名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换3、通用数据模型FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰4、为Web准备在模板语言中内建处理典型Web相关任务(如HTML转义)的结构能够集成到Model2 Web应用框架中作为JSP的替代支持JSP标记库为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员5、智能的国际化和本地化字符集智能化(内部使用UNICODE)数字格式本地化敏感日期和时间格式本地化敏感非US字符集可以用作标识(如变量名)多种不同语言的相同模板6、强大的XML处理能力<#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树在模板中清楚和直觉的访问XML对象模型开源论坛 JForum 就是使用了FreeMarker 做为页面模板。
freemarker的用法Freemarker是一种用于生成文本输出(例如HTML网页)的模板引擎。
它通常用于在Web应用程序中生成动态内容,比如将数据填充到HTML模板中。
以下是关于Freemarker的用法的一些方面:1. 模板语法,Freemarker使用类似于HTML的标签和指令来标记要填充数据的位置。
例如,使用`${variable}`语法来插入变量的值,使用`<#if>`和`<#else>`来进行条件判断,使用`<#list>`来遍历列表等等。
2. 数据模型,在使用Freemarker时,需要将数据以某种形式传递给模板引擎。
通常,这些数据以Map的形式传递,也可以是JavaBean或POJO对象。
3. 集成,Freemarker可以与多种Java框架(如Spring、Struts等)集成,以便在Web应用程序中使用。
通常,需要配置模板解析器和视图解析器来使得框架能够识别和处理Freemarker模板。
4. 自定义指令和函数,Freemarker允许用户定义自己的指令和函数,以便扩展模板的功能。
这些自定义指令和函数可以在模板中被调用,从而实现特定的逻辑或功能。
5. 资源加载,Freemarker可以从不同的位置加载模板文件,比如从文件系统、类路径、URL等。
这使得模板可以被灵活地组织和管理。
总的来说,Freemarker是一个功能强大且灵活的模板引擎,它提供了丰富的模板语法和功能,可以帮助开发人员在Web应用程序中实现灵活的动态内容生成。
希望这些信息能够帮助你更好地了解Freemarker的用法。
freemarker基本语法一、什么是FreemarkerFreemarker是一个模板引擎,它可以将数据和模板进行结合,生成所需的文本输出。
它主要用于Web应用程序中的MVC架构中,将业务逻辑和表现层分离。
二、Freemarker基本语法1. 变量Freemarker中的变量可以通过${}来表示,如${}表示取出user对象的name属性。
2. 指令指令是Freemarker中最重要的语法之一,它可以控制模板引擎的行为。
常用指令有if、list、assign等。
(1)if指令:用于条件判断,例如:<#if user.age gt 18>成年人<#else>未成年人</#if>```(2)list指令:用于循环输出,例如:```html<#list users as user>${}</#list>```(3)assign指令:用于变量赋值,例如:```html<#assign name = "张三"> ${name}```宏定义是一种自定义函数的方式,在模板中可以多次调用。
例如:```html<#macro printName name>${name}</#macro><@printName name="张三"/><@printName name="李四"/>```4. 内建函数Freemarker提供了一些内建函数,可以方便地处理字符串、日期等数据类型。
例如:(1)字符串函数:```html${name?length} //获取字符串长度${name?upper_case} //将字符串转换为大写字母${name?lower_case} //将字符串转换为小写字母```(2)日期函数:```html${date?string("yyyy-MM-dd")} //将日期格式化为指定格式的字符串${date?time} //获取日期的时间戳```5. 注释在Freemarker中,注释可以使用<#-- -->来表示,例如:```html<#-- 这是一段注释 -->```三、Freemarker在Java中的应用1. 引入Freemarker依赖在Maven项目中,可以通过以下方式引入Freemarker依赖:```xml<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency>```2. 创建Configuration对象Configuration对象是Freemarker的核心类,它会负责解析模板文件和数据模型。
FreeMarker 是一个用Java 语言编写的模板引擎,它是一个用于生成输出文本的通用工具。
其主要应用于Web 开发,能够处理各种复杂的数据结构,并能够与各种数据库进行交互。
FreeMarker 的基础语法主要包括以下几个方面:1. 变量:在FreeMarker 中,你可以用`${...}` 来定义一个变量。
例如,`${name}` 就是一个变量,表示名字。
2. 数据结构:FreeMarker 支持各种复杂的数据结构,包括列表(list)、哈希表(hash table)、方法(method)等。
你可以用`#list`, `#set`, `#if`, `#else`, `#elseif`, `#switch`, `#case`, `#default` 等指令来创建和控制这些数据结构。
3. 函数:你可以用`#function` 定义自己的函数,然后用`#use` 或`#import` 引入其他FreeMarker 模板中定义的函数。
函数可以接受参数,并返回一个值。
4. 指令:FreeMarker 有很多内置的指令,如`#include`(包含其他文件)、`#import`(导入其他文件定义的函数和宏)、`#use`(使用其他文件定义的模板函数)等。
5. 注释和注释块:你可以用`#comment` 来创建注释,用`#end` 来结束注释块。
6. 宏:你可以用`#macro` 来定义一个宏,然后用`#end` 来结束宏定义。
宏可以接受参数,并返回一个值。
7. 自定义指令:你也可以创建自己的指令,用`#defining` 来定义一个全局的自定义指令,用`#end` 来结束指令定义。
自定义指令可以在模板中的任何位置使用。
8. 表达式:FreeMarker 支持各种表达式,包括算术表达式、比较表达式、逻辑表达式、字符串表达式等。
以上就是FreeMarker 的基础语法,更详细的信息可以查阅FreeMarker 的官方文档或相关教程。
freemarker常用指令Freemarker常用指令一、概述Freemarker是一种Java模板引擎,常用于生成动态网页、电子邮件和其他文本格式。
它使用简单的模板语言来定义模板,并通过替换模板中的占位符来生成最终的文本输出。
本文将介绍Freemarker 常用指令,帮助读者更好地理解和使用Freemarker。
二、输出指令1. #-- 输出文本 --#这是Freemarker中最基本的输出指令,用于直接输出文本内容。
例如:#-- 这是一段文本 --#。
2. ${expression}这是Freemarker中最常用的输出指令,用于输出表达式的值。
表达式可以是变量、方法调用或其他Freemarker支持的表达式。
例如:${name}表示输出变量name的值。
3. #if-#else-#elseif-#end这是Freemarker中的条件判断指令,用于根据条件来输出不同的内容。
可以使用if、else if和else来定义多个条件分支。
例如:#if (score > 90)优秀#elseif (score > 80)良好#else需要努力4. #list-#items-#sep-#end这是Freemarker中的循环指令,用于遍历一个集合并输出其中的元素。
可以使用items定义要遍历的集合,使用sep定义元素之间的分隔符。
例如:#list users as user${}#sep,#end三、变量指令1. #assign这个指令用于定义一个局部变量,并为其赋值。
例如:#assign count = 10。
2. #global这个指令用于定义一个全局变量,并为其赋值。
全局变量可以在整个模板中使用。
例如:#global count = 10。
3. #local这个指令用于在指定的作用域中定义一个局部变量,并为其赋值。
作用域可以是当前模板、当前循环或当前条件分支。
例如:#local count = 10。
freemarker原理和用法Freemarker是一个模板引擎,它提供了一种用于生成动态Web页面的方式。
该引擎将模板与数据组合在一起创建HTML、XML或其他格式的输出文档。
该引擎依赖于模板中的变量,这些变量用于在合适的位置动态地生成内容。
在本文中,我们将详细讨论Freemarker的原理和用法。
一、Freemarker原理Freemarker模板引擎的原理是基于模板和数据的组合。
模板包含动态生成内容的标记和指令,而数据则存储在模板中需要显示的元素,将数据与模板组合在一起生成所需的输出文档。
1. 模板Freemarker模板是一个包含文本和标记的文件。
标记指令以$开头,被双大括号{{}}包含起来,并用于表示应该在输出文档中生成动态内容的位置。
例如,$ {}表示在输出文档中应该显示用户的名称。
2. 数据数据是用于填充模板中指令的值。
这些值可以存储在Java对象、数据库、XML文档或其他数据源中。
在合适的位置,将数据与指令组合在一起,生成所需的输出文档。
二、Freemarker用法使用Freemarker模板引擎的过程通常包含以下步骤:1. 编写模板编写一个包含Freemarker指令和标记的模板文件。
该文件必须包含正确的元数据和指令,以告诉模板引擎什么时候生成所需的动态数据。
2. 创建数据模型数据模型是用于指定需要在模板中使用的变量值和其它数据的对象。
在Java中,可以使用Map、POJO和其他对象来创建数据模型。
在数据模型中指定的变量将可供模板使用来动态生成输出文档。
3. 管理模板使用模板管理器类,可以将模板文件加载到内存中,并将其准备好在特定时刻生成所需的输出文档。
4. 处理模板使用模板引擎将模板和数据模型组合起来,生成所需的输出文档。
在处理模板时,模板引擎通常会将指令和标记替换为与其关联的数据值。
5. 输出文档生成HTML、XML或其他格式的输出文档,然后将其返回给客户端或输出到磁盘或其他位置。
freemarker使用流程Freemarker使用流程Freemarker是一款流行的模板引擎,广泛应用于Java Web开发中。
它能够有效地将数据与展示分离,提高开发效率和代码的可维护性。
下面将介绍Freemarker的使用流程,帮助读者更好地理解和运用这一工具。
1. 熟悉Freemarker语法在使用Freemarker之前,首先需要熟悉其语法规则。
Freemarker 使用类似于HTML的标签和表达式来动态生成内容。
了解Freemarker的基本语法结构对于后续的开发至关重要。
2. 配置Freemarker环境在项目中引入Freemarker依赖,并配置Freemarker的相关参数,如模板文件的路径、编码方式等。
确保Freemarker能够正常工作,并与项目的其他组件协调配合。
3. 创建Freemarker模板编写Freemarker模板文件,定义页面的结构和内容。
在模板中可以使用Freemarker的标签和表达式来引用数据、控制流程和展示内容。
合理设计模板结构,提高页面的可读性和可维护性。
4. 准备数据模型准备与模板对应的数据模型,包括需要在页面中展示的数据内容。
数据模型可以是JavaBean、Map等形式,确保数据的准确性和完整性,以便在模板中进行引用和展示。
5. 渲染模板将数据模型与Freemarker模板进行结合,通过Freemarker引擎进行渲染。
在渲染过程中,Freemarker会根据模板中的标签和表达式动态生成最终的页面内容,将数据填充到指定位置。
6. 输出页面内容将渲染后的页面内容输出到浏览器或其他客户端,让用户可以看到最终的页面效果。
确保页面的呈现与预期一致,检查数据的展示是否准确,页面的布局是否符合设计要求。
7. 调试和优化在使用Freemarker的过程中,可能会遇到一些问题和性能瓶颈。
及时调试代码,查找并解决bug,优化页面性能和加载速度。
保持代码的简洁和高效,提升用户体验和开发效率。
freemarker 后缀-回复Freemarker 后缀指的是Freemarker模板文件使用的文件后缀名。
Freemarker是一种模板引擎,用于根据模板文件生成动态内容。
在使用Freemarker时,通常会将Freemarker模板文件保存为以.ftl作为后缀的文件。
本文将详细介绍Freemarker后缀的定义、用法以及常见问题的解决方法。
一、什么是Freemarker后缀?Freemarker后缀是指Freemarker模板文件的文件后缀名。
在使用Freemarker模板引擎时,我们通常将模板文件保存为以.ftl作为后缀的文件。
这个后缀名的选择是由Freemarker的开发者定义的,用以表示该文件是一个Freemarker模板文件。
二、Freemarker后缀的用法使用Freemarker模板引擎时,一般会在Java代码中加载Freemarker 模板文件,并根据模板生成动态内容。
下面是使用Freemarker后缀文件的基本步骤:1. 导入Freemarker库首先,我们需要在项目中引入Freemarker库。
可以使用Maven或Gradle等构建工具,在项目的pom.xml或build.gradle文件中添加相应的依赖项。
2. 加载Freemarker模板在Java代码中,我们需要使用Freemarker库提供的接口来加载Freemarker模板文件。
通常,我们会使用Configuration类的getTemplate()方法来加载.ftl文件。
3. 创建数据模型在生成动态内容时,我们通常需要提供一些数据作为模板的输入。
为此,我们需要创建一个数据模型,将数据传递给Freemarker模板。
数据模型可以是一个Java对象、一个Map对象或是一个基本的键值对。
4. 处理模板创建数据模型后,我们可以使用Template类的process()方法来处理模板并生成最终的动态内容。
在调用process()方法时,我们需要传入数据模型,并指定输出目标,可以是一个Writer对象或是一个文件。
Freemarker是一种模板引擎,广泛应用于JavaWeb开发中,它能够将数据动态填充到模板中,生成最终的页面。
在Freemarker中,变量表达式是一种重要的语法,用于表示需要动态填充的数据,下面将详细介绍Freemarker变量表达式的使用方法和注意事项。
一、Freemarker变量表达式的基本语法在Freemarker中,变量表达式使用`${}`来表示,其中`${}`内部可以是一个简单的变量名,也可以是一个复杂的表达式。
例如:```${}${user['age']}${user.age > 18 ? '成年人' : '未成年人'}```在`${}`内部,可以使用`.`来访问对象的属性,也可以使用`[]`来访问Map的值,此外还可以使用三元运算符来进行条件判断。
二、Freemarker变量表达式的使用场景1.在模板中动态显示数据在前后端分离的开发模式中,前端经常需要通过Ajax请求后台接口获取数据,然后使用Freemarker填充到页面中。
这时就可以使用变量表达式来动态显示数据,比如将后台返回的用户信息`${user}`填充到页面中。
2.在条件判断和循环中使用在模板中经常需要根据不同的条件显示不同的内容,或者对一组数据进行循环处理,这时就可以使用变量表达式来进行条件判断和循环操作。
三、Freemarker变量表达式的注意事项1.空指针判断由于在模板中动态填充的数据并不一定存在,所以在使用变量表达式时需要进行空指针判断,避免出现空指针异常。
2.复杂表达式的优化虽然变量表达式支持复杂的表达式操作,但在实际使用中应尽量将复杂的逻辑放到后台去处理,尽量保持模板的简洁和清晰。
3.变量命名规范在使用变量表达式时,要注意变量命名规范,尽量使用有意义的变量名,以便于代码的维护和阅读。
四、总结Freemarker变量表达式是一种非常灵活和强大的语法,能够帮助我们在模板中动态填充数据,进行条件判断和循环操作。
freemarker 例子Freemarker 是一种用于生成动态内容的模板引擎,它基于Java语言,并且广泛应用于各种Web应用程序中。
下面将列举10个关于Freemarker的例子,以帮助读者更好地理解和掌握该技术。
1. 使用Freemarker进行模板渲染:Freemarker可以将动态数据与静态模板相结合,生成最终的HTML、XML或其他文档类型。
通过在模板中使用Freemarker的语法,我们可以将数据填充到模板中,从而生成动态内容。
2. 使用Freemarker进行条件判断:Freemarker支持条件判断语句,可以根据不同的条件生成不同的内容。
例如,我们可以根据用户的登录状态,决定是否显示登录按钮或用户信息。
3. 使用Freemarker进行循环迭代:Freemarker提供了强大的循环迭代功能,可以方便地遍历集合或数组,并生成相应的内容。
这在展示商品列表或新闻列表等场景中非常实用。
4. 使用Freemarker进行变量定义和引用:在Freemarker中,我们可以定义和使用变量,以便在模板中引用。
通过使用变量,我们可以提高模板的可维护性和可读性。
5. 使用Freemarker进行日期格式化:Freemarker提供了丰富的日期格式化功能,可以将日期对象格式化为指定的字符串形式。
这对于展示日期和时间信息非常有用。
6. 使用Freemarker进行国际化支持:Freemarker可以与国际化(i18n)库一起使用,方便地实现多语言支持。
通过在模板中使用国际化资源文件中定义的键,我们可以轻松地切换不同语言的内容。
7. 使用Freemarker进行模板继承:Freemarker支持模板继承,可以通过定义基础模板和子模板的方式实现页面的复用和维护。
基础模板中定义通用的结构和样式,而子模板则负责填充具体内容。
8. 使用Freemarker进行表单处理:Freemarker可以方便地处理表单数据,包括表单的渲染和数据的填充。
freemarker使用手册目录一、引言 (1)1. 编写目的 (1)2. 术语定义 (1)3. 概述 (1)二、下载安装 (2)三、freemarker使用入门 (2)(1)模板+ 数据模型= 输出 (2)(2)数据模型......................................................................... 错误!未定义书签。
(3)模板................................................................................. 错误!未定义书签。
四、Demo (6)一、引言1.编写目的本文档是freemark使用说明,编写目的是:为即将使用freemark的开发人员提供帮助。
2.术语定义暂无。
3.概述FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。
模板用servlet提供的数据动态地生成HTML。
模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库FreeMarker是免费的下载和安装二、下载安装首先从官方网站下载freemarker。
下载地址为/下载以后把freemarker.jar包拷贝到lib目录下即可三、freemarker使用入门1.模板+ 数据模型= 输出FreeMarker基于设计者和程序员是具有不同专业技能的不同个体的观念。
他们是分工劳动的:设计者专注于表示——创建HTML文件、图片、Web页面的其它可视化方面;程序员创建系统,生成设计页面要显示的数据。
经常会遇到的问题是:在Web页面(或其它类型的文档)中显示的信息在设计页面时是无效的,是基于动态数据的。
在这里,你可以在HTML(或其它要输出的文本)中加入一些特定指令,FreeMarker会在输出页面给最终用户时,用适当的数据替代这些代码。
下面是一个例子:<html><head><title>Welcome!</title></head><body><h1>Welcome ${user}!</h1><p>Our latest product:<a href="${latestProduct.url}">${}</a>!</body></html>这个例子是在简单的HTML中加入了一些由${…}包围的特定代码,这些特定代码是FreeMarker的指令,而包含FreeMarker的指令的文件就称为模板(Template)。
至于user、latestProduct.url和来自于数据模型(data model)。
数据模型由程序员编程来创建,向模板提供变化的信息,这些信息来自于数据库、文件,甚至于在程序中直接生成。
模板设计者不关心数据从那儿来,只知道使用已经建立的数据模型。
下面是一个可能的数据模型:(root)+- user = "Big Joe"+- latestProduct+- url = "products/greenmouse.html"+- name = "green mouse"数据模型类似于计算机的文件系统,latestProduct可以看作是目录,而user、url 和name看作是文件,url和name文件位于latestProduct目录中(这只是一个比喻,实际并不存在)当FreeMarker将上面的数据模型合并到模板中,就创建了下面的输出:<html><head><title>Welcome!</title></head><body><h1>Welcome Big Joe!</h1><p>Our latest product:<a href="products/greenmouse.html">green mouse</a>!</body></html>数据模型典型的数据模型是树型结构,可以任意复杂和深层次,如下面的例子:(root)+- animals+- mouse+- size = "small"+- price = 50+- elephant+- size = "large"+- price = 5000+- python+- size = "medium"+- test = "It is a test"+- whatnotbecause = "don't know"类似于目录的变量称为hashes,包含保存下级变量的唯一的查询名字,类似于文件的变量称为scalars,保存单值,scalars保存的值有两种类型:字符串(用引号括起,可以是单引号或双引号)和数字(不要用引号将数字括起,这会作为字符串处理),对scalars的访问从root开始,各部分用“.”分隔,如animals.mouse.price。
另外一种变量是sequences,和hashes类似,只是不使用变量名字,而使用数字索引,如下面的例子:(root)+- animals+- (1st)+- name = "mouse"+- size = "small"+- price = 50+- (2nd)+- name = "elephant"+- size = "large"+- price = 5000+- (3rd)+- name = "python"+- size = "medium"+- price = 4999+- whatnot+- fruits+- (1st) = "orange"+- (2nd) = "banana"这种对scalars的访问使用索引,如animals[0].name模板在FreeMarker模板中可以包括下面三种特定部分:1.? ${…}:称为interpolations,FreeMarker会在输出时用实际值进行替代2.? FTL标记(FreeMarker模板语言标记):类似于HTML标记,为了与HTML标记区分,用#开始(有些以@开始,在后面叙述)3.? 注释:包含在<#--和-->(而不是<!--和-->)之间下面是一些使用指令的例子:1.? if指令<#if animals.python.price<animals.elephant.price>Pythons are cheaper than elephants today.<#else>Pythons are not cheaper than elephants today.</#if>2.? list指令<p>We have these animals:<table border=1><tr><th>Name<th>Price<#list animals as being><tr><td>${}<td>${being.price} Euros</#list></table>输出为:<p>We have these animals:<table border=1><tr><th>Name<th>Price<tr><td>mouse<td>50 Euros<tr><td>elephant<td>5000 Euros<tr><td>python<td>4999 Euros</table>3.? include指令<html><head><title>Test page</title></head><body><h1>Test page</h1><p>Blah blah...<#i nclude "/copyright_footer.html"> </body></html>4.? 一起使用指令<p>We have these animals:<table border=1><tr><th>Name<th>Price<#list animals as being><tr><td><#if being.size = "large"><b></#if>${}<#if being.size = "large"></b></#if><td>${being.price} Euros</#list></table>四、DemoDecorator.javaTop2.ftl<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html><body><DIV id=logo><A href="/"><IMG alt=ShopNC多用户综合购物平台src="zhuopin_files/logo.png"></A></DIV><DIV id=search class=search><DIV class=details><UL id=header_tab class=tab><LI class=current rel="a1"><SPAN>商品</SPAN></LI><LI rel="a2"><SPAN>店铺</SPAN></LI><LI rel="a3"><SPAN>帮助</SPAN></LI></UL><DL id=a1><FORM id=search_productonsubmit=searchProductSubmit(); method=getaction=/home/product.php><DIV class=formstyle><INPUT style="COLOR: #cccccc"id=search_product_textclass=textinput value=请输入您需要的商品 name=keyword><SPANclass=searchBtn><Aonclick="$('#search_product').submit();"href="/#">search</A></SPAN></DIV><INPUTvalue=producttype=hidden name=search_name><INPUT value=0 type=hiddenname=recommended><INPUT value=0 type=hidden name=searchcate></FORM></DL><DL style="DISPLAY: none" id=a2><FORM id=search_shoponsubmit=searchShopSubmit(); method=getaction=/home/shop.php><DIV class=formstyle><INPUT style="COLOR: #cccccc" id=search_shop_text class=textinput value=请输入您需要的店铺 name=keyword><SPANclass=searchBtn><Aonclick="$('#search_shop').submit();"href="/#">search</A></SPAN></DIV><INPUTvalue=shoptype=hidden name=search_name><INPUT value=0 type=hiddenname=recommended><INPUT value=0 type=hidden name=searchcate></FORM></DL><DL style="DISPLAY: none" id=a3><FORM id=search_helponsubmit=searchHelpSubmit(); method=getaction=/help/index.php><DIV class=formstyle><INPUT style="COLOR: #cccccc" id=search_help_text class=textinput value=请输入您需要的帮助 name=q><SPANclass=searchBtn><Aonclick="$('#search_help').submit();"href="/#">search</A></SPAN></DIV></FORM></DL><DIV class=tag><H4>${name}:</H4><UL><#list product as temp><Ahref="${temp.href}"target=_blank>${}</A> </#list></UL></DIV></DIV><DIV class=links><P><A href="/home/product.php?action=search">高级搜索</A></P><P><Ahref="/help/index.php?q=搜索">搜索帮助</A></P></DIV></DIV></DIV></body></html>top2.jsp这样浏览top2.jsp时输出的结果为:五、总结freemarker特性1、通用目标能够生成各种文本:HTML、XML、RTF、Java源代码等等易于嵌入到你的产品中:轻量级;不需要Servlet环境插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器2、强大的模板语言所有常用的指令:include、if/elseif/else、循环结构在模板中创建和改变变量几乎在任何地方都可以使用复杂表达式来指定值命名的宏,可以具有位置参数和嵌套内容名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换3、通用数据模型FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰4、为Web准备在模板语言中内建处理典型Web相关任务(如HTML转义)的结构能够集成到Model2 Web应用框架中作为JSP的替代支持JSP标记库为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员5、智能的国际化和本地化字符集智能化(内部使用UNICODE)数字格式本地化敏感日期和时间格式本地化敏感非US字符集可以用作标识(如变量名)多种不同语言的相同模板6、强大的XML处理能力<#recurse>和<#visit>指令(2.3版本)用于递归遍历XML树在模板中清楚和直觉的访问XML对象模型。