﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Java Home-随笔分类-FreeMarker</title><link>http://www.blogjava.net/yemoo/category/23423.html</link><description>Java技术修炼中...</description><language>zh-cn</language><lastBuildDate>Tue, 19 Jun 2007 03:12:52 GMT</lastBuildDate><pubDate>Tue, 19 Jun 2007 03:12:52 GMT</pubDate><ttl>60</ttl><item><title>FreeMarker特性介绍与概述【转自赛迪网】</title><link>http://www.blogjava.net/yemoo/archive/2007/06/19/125034.html</link><dc:creator>Yemoo'S Java Blog</dc:creator><author>Yemoo'S Java Blog</author><pubDate>Tue, 19 Jun 2007 00:26:00 GMT</pubDate><guid>http://www.blogjava.net/yemoo/archive/2007/06/19/125034.html</guid><wfw:comment>http://www.blogjava.net/yemoo/comments/125034.html</wfw:comment><comments>http://www.blogjava.net/yemoo/archive/2007/06/19/125034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yemoo/comments/commentRss/125034.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yemoo/services/trackbacks/125034.html</trackback:ping><description><![CDATA[
		<p style="TEXT-INDENT: 2em">FreeMarker是一个模板引擎，一个基于模板生成文本输出的通用工具，使用纯Java编写 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">FreeMarker被设计用来生成HTML Web页面，特别是基于MVC模式的应用程序 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">虽然FreeMarker具有一些编程的能力，但通常由Java程序准备要显示的数据，由FreeMarker生成页面，通过模板显示准备的数据 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">FreeMarker不是一个Web应用框架，而适合作为Web应用框架一个组件 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">FreeMarker与容器无关，因为它并不知道HTTP或Servlet；FreeMarker同样可以应用于非Web应用程序环境 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">FreeMarker更适合作为Model2框架（如Struts）的视图组件，你也可以在模板中使用JSP标记库 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">FreeMarker是免费的 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">1、通用目标 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">能够生成各种文本：HTML、XML、RTF、Java源代码等等 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">易于嵌入到你的产品中：轻量级；不需要Servlet环境 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">插件式模板载入器：可以从任何源载入模板，如本地文件、数据库等等 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">你可以按你所需生成文本：保存到本地文件；作为Email发送；从Web应用程序发送它返回给Web浏览器 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">2、强大的模板语言 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">所有常用的指令：include、if/elseif/else、循环结构 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">在模板中创建和改变变量 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">几乎在任何地方都可以使用复杂表达式来指定值 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">命名的宏，可以具有位置参数和嵌套内容 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">名字空间有助于建立和维护可重用的宏库，或者将一个大工程分成模块，而不必担心名字冲突 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">输出转换块：在嵌套模板片段生成输出时，转换HTML转义、压缩、语法高亮等等；你可以定义自己的转换 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">3、通用数据模型 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">FreeMarker不是直接反射到Java对象，Java对象通过插件式对象封装，以变量方式在模板中显示 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">你可以使用抽象（接口）方式表示对象（JavaBean、XML文档、SQL查询结果集等等），告诉模板开发者使用方法，使其不受技术细节的打扰 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">4、为Web准备 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">在模板语言中内建处理典型Web相关任务（如HTML转义）的结构 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">能够集成到Model2 Web应用框架中作为JSP的替代 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">支持JSP标记库 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">为MVC模式设计：分离可视化设计和应用程序逻辑；分离页面设计员和程序员 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">5、智能的国际化和本地化 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">字符集智能化（内部使用UNICODE） 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">数字格式本地化敏感 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">日期和时间格式本地化敏感 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">非US字符集可以用作标识（如变量名） 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">多种不同语言的相同模板 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">6、强大的XML处理能力 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">&lt;#recurse&gt; 和&lt;#visit&gt;指令（2.3版本）用于递归遍历XML树 
</p>
		<p style="TEXT-INDENT: 2em">
		</p>
		<p style="TEXT-INDENT: 2em">在模板中清楚和直觉的访问XML对象模型 </p>
<img src ="http://www.blogjava.net/yemoo/aggbug/125034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yemoo/" target="_blank">Yemoo'S Java Blog</a> 2007-06-19 08:26 <a href="http://www.blogjava.net/yemoo/archive/2007/06/19/125034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>