- 浏览: 197650 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mao_lu:
cor_ggsearch.init("中国,中国人民 ...
仿google搜索框下拉提示效果 -
aas7612:
, thanks very much
JPA映射文件jpa.reveng.xml的配置问题 -
ghbhaozi:
...
Ext MultiSelect实现双击删除
FreeMarker2.3
FreeMarker笔记 收藏
FreeMarker2.3
一 介绍... 2
二 HelloWorld. 3
1 java应用程序中... 3
1.1 aa.ftl---------模板文件... 3
1.2 FreeMarkerTest调用模板及使用方法... 3
1.3 FreeMarkerTest.java----------调用freeMarker的测试程序... 4
2 web应用程序... 7
1.1 web与java应用程序的区别在于: 7
1.2 完整代码... 7
3 读XML数据源----- java应用程序中... 9
三 语法... 10
1 常用... 10
1.1 ${ varName!" value"}---------指定缺省值... 10
1.2 <#-- aaaaaaaa --> 注释... 10
1.3 条件语句 <#if condition><#elseif condition><#else></#if>. 10
1.4 变量定义 <#assign varName=value>. 11
1.5 <#local var = value> 在 macro 或者 function 中定义局部变量并初始化... 11
1.6 <#global var = value > 定义全局变量并初始化... 11
1.7 序列 [item1,item2,item3,…] 11
1.8 list-----遍历指令... 11
1.9 条件分支 <#switch 条件> <#case "值n" > <#default></#switch>. 12
1.10 key:value, key2:value2 ...} 直接定义一个hash表... 12
1.11 macro-----宏... 12
1.12 <#nested>-----FreeMarker个性十足的指令... 13
1.13 function-------函数... 14
1.14 内部函数调用---------由问号、函数名与实参构成... 14
四 常用函数... 15
1 字符串... 15
1.1 取子串--substirng. 15
1.2 第一个字母大写-------cap_first 15
1.3 第一个字母不大写-----uncap_first 15
1.4 以空格间格的字符串,第一个字母大写--------capitalize. 15
1.5 日期、时间函数---------date, time, datetime. 15
1.6 html-----把字符串转成html传输的格式... 16
1.7 index_of--------求字串在原串中的位置... 16
1.8 j_string--------把空格替换成左斜线... 16
1.9 js_string--------把左斜线换成 空格... 16
1.10 其他字符串函数... 16
2 数字... 16
1.1 带常见单位的数字... 16
1.2 格式化数字... 16
1.3 其他函数round, floor, ceiling. 17
3 日期... 17
一 介绍
FreeMarker是一个文本文件模板。
文本文件中,设定特定字符串,FreeMarker会把用户指定的数据,按规定替代这些字符串,从而产生新的文件,或流数据。
例:有文本文件-------a.ftl 如下:
你好!${userName}
用户把“张三”数据放入FreeMarker中,FreeMarker将会产生新的文件,其内容会变成:
你好!张三!
作用:
非常 精致强悍,可生成网页、生成java文件、.net文件,总之任何格式的文本文件。
当然,模板文件要按这些格式书写!
说明:
(1) FreeMarker的数据源:
--------来自xml文件,或
-------- 用Map作为基本的存储单元;且必须是树结构。
(2) 官方网址
FreeMarker是开源的;官方网址http://freemarker.org/
二 HelloWorld
1 java应用程序中
1.1 aa.ftl---------模板文件
<html>
<head>
<title>Welcome!</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
</head>
<body>
<h1>Welcome ${user}!</h1>
</body>
</html>
说明:
${user}-----是freemarker指令。意思用 user所存数据对它进行替换。
user所存数据-----放在数据源中。
Freemarker----是模板,程序,数据相分离。
1.2 FreeMarkerTest调用模板及使用方法
下面是加载模板文件
Configuration cfg = new Configuration();
cfg.setEncoding(Locale.getDefault(),"UTF-8");
// 指定模板文件的数据源,这里是一个文件目录。
cfg.setDirectoryForTemplateLoading( new File("d:\\aaa") );
cfg.setObjectWrapper(new DefaultObjectWrapper()); //这条语句可省略
//加载文件,模板文件,输出文件都要保证用UTF-8-----解决乱码
Template template = cfg.getTemplate("aa.ftl");//加载模板文件
下面是使用方法
template.setEncoding("UTF-8");
File htmlFile = new File("t.html");
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(htmlFile), "UTF-8"));//输出文件
HashMap propMap = new HashMap();//定义Map树结构数据源
propMap.put("user", "张三");
template.process(propMap, out);
注意:加载文件,模板文件,输出文件都要保证用UTF-8-----解决乱码
Configuration. setEncoding//要在Configuration对象后就要加入
template.setEncoding("UTF-8")
OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8")
1.3 FreeMarkerTest.java----------调用freeMarker的测试程序
package jap1;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Locale;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class FreeMarkerTest {
public static void main(String[] args) throws IOException {
FreeMarkerTest test = new FreeMarkerTest();
test.getFile();
test.getFile(Locale.CHINA);
}
private String basePath;
public String getBasePath() {
return basePath;
}
public void setBasePath(String basePath) {
this.basePath = basePath;
}
public FreeMarkerTest(){
basePath="";
}
public FreeMarkerTest(String basePath ){
this.basePath=basePath;
}
public void getFile() throws IOException {
Configuration cfg = new Configuration();//加载FreeMarker配置文件
if (basePath.equals("")){
//设本类运行时所在的路径为路劲
cfg.setClassForTemplateLoading(this.getClass(),"/");
} else{
//设用户指定路径为基路径
cfg.setDirectoryForTemplateLoading(new File(basePath));
}
cfg.setEncoding(Locale.getDefault(),"UTF-8");
Template template;
try {
template = cfg.getTemplate("aa.ftl");
template.setEncoding("UTF-8");
File htmlFile = new File("t.html");
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(htmlFile), "UTF-8"));
HashMap propMap = new HashMap();
propMap.put("user", "张三");
template.process(propMap, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//FreeMarker国际化支持,
public void getFile(Locale loc) {
Configuration cfg = new Configuration();
cfg.setClassForTemplateLoading(this.getClass(),"/");
cfg.setEncoding(Locale.getDefault(),"UTF-8");
Template template;
try {
template = cfg.getTemplate("aa.ftl",loc);
template.setEncoding("UTF-8");
String fileName="t_"+loc.getLanguage()+"_"
+loc.getCountry()+".html";
File htmlFile = new File(fileName);
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(htmlFile), "UTF-8"));
HashMap propMap = new HashMap();
propMap.put("user", "张三");
template.process(propMap, out);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2 web应用程序
1.1 web与java应用程序的区别在于:
(1) 配置类的路径指定:
有两种方式: (在web程序中)
A 模板文件在web中。针对servlet.。
下例的表示模板文件位于WEB-INF的子文件a中。
configuration.setServletContextForTemplateLoading(
getServletContext(), "WEB-INF/a");
B 模板文件在class中。
下像表示模板文件在src\java下。注:在netbeans6.5中调试。
configuration.setObjectWrapper(new DefaultObjectWrapper());
configuration.setTemplateLoader(new ClassTemplateLoader(
NewServlet1.class, "/"));
(2) 文件输出
web文件用response对象输出文件。或用像StringWriter之类的对象输出 。
1.2 完整代码
(1) 模板文件---------test.ftl-----------位于web /web-inf/a
<body>
sdad描述信息是 : ${message}
</body>
(2) NewServlet1.java---------调用FreeMarker把模板输出到浏览器中。
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.util.Locale;
import javax.servlet.http.HttpServlet;
public class NewServlet1 extends HttpServlet {
private Configuration configuration;
public NewServlet1() {
super();
}
@Override
public void destroy() {
configuration = null;
}
@Override
public void init() throws ServletException {
configuration = new Configuration();
configuration.setEncoding(Locale.getDefault(),"UTF-8");
configuration.setServletContextForTemplateLoading(
getServletContext(), "WEB-INF/a");
// configuration.setObjectWrapper(new DefaultObjectWrapper());
// configuration.setTemplateLoader(new ClassTemplateLoader(
// NewServlet1.class, "/"));
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
Map root = new HashMap();
root.put("message", "Hello World!帅哥,靓女!");
Template t = configuration.getTemplate("test.ftl");
Writer out = response.getWriter();
try {
t.process(root, out);
StringWriter stringWriter = new StringWriter();
t.process(root, stringWriter);
System.out.println(stringWriter.toString());
} catch (TemplateException e) {
throw new ServletException(
"Error while processing FreeMarker template", e);
}
}
}
注意:
1 configuration.setEncoding(Locale.getDefault(),"UTF-8");
要紧随configuration生成设置;否则,模板中的中文会成乱码。
2 response.setContentType("text/html;charset=UTF-8");
这句不设置;输进模板中的数据,将有可能是乱码。
3 读XML数据源----- java应用程序中
FreeMark2.3支持 XML;在程序中可直接把xml文件作为数据模型,按用户模板文件的要求,输出相应的文件(或流)给用户。
与前面相比,关键有:
1 freemarker.ext.dom.NodeModel.parse这个方法将把xml文件处理成map树状结构的模型;该方法支持以File对象,读xml;也提供了一个流适配器,从面能用InsputStream流对象读xml文件。
2 Map root = new HashMap();
root.put("doc", freemarker.ext.dom.NodeModel.parse( ins));
这里要注意:经处理后:”doc”,在数据模型中是根;而xml文件的根是它的子节点;
在读数据时,要从doc开始,否则出错。当然,”doc”也可改成其他名字。
3 增加了一个recurse指令。
FreeMarker这样处理的xml结构的数据模型的:
(1) 按层定义宏;宏名---就是节点名。(这是强行约定的)
(2) recurse----将循环调用处理子节点的宏
下面是在java应用程序中,应用freemarker的示例:
(1) ddd.xml
注意:ddd.xml位于classpath下的jap1文件夹下,与下面的 FMtest.java的位置相同。在netbean开发环境中,位于 src\java\jsp1下。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user>
<name>张三1111</name>
</user>
<user>
<name>
发表评论
-
freemaker的基本语法
2009-06-11 18:16 1241< # > 中存放所有free ... -
velocity基础教程之模板读取
2009-06-08 15:59 2381velocity虽然已经为我们提供了一些资源加载器 ... -
velocity基础教程之模板发布
2009-06-08 15:58 1110velocity是一个非常好用的模板引擎 这里不对项目进行详细 ... -
Velocity技术概要
2009-06-08 15:57 996Velocity,名称字面翻译为:速度、速率 ... -
freemarker 学习笔记
2009-06-08 15:54 7131.输出 ${book.name}空值判断:${book.na ...
相关推荐
- 在 `web.xml` 中添加 Struts2 核心过滤器配置,参考 `struts-2.3.15.3-all\struts-2.3.15.3\apps\struts2-blank\WEB-INF\web.xml`。 #### 四、Struts2 目录结构 - **apps**: 包含基于 Struts2 的示例应用。 - *...
**2.3 控制器(Controller)** - **实现技术**:Servlet、Action。 - **功能**: - 接受用户提交的请求。 - 调用模型的方法。 - 选择一个视图进行显示。 - Struts2 还提供了标签库和 OGNL 表达式语言用于视图层的...
- `freemarker-2.3.x.jar`:Struts2的UI标签的模板使用FreeMarker编写。 - `commons-logging-1.x.x.jar`:ASF出品的日志包,Struts2框架使用这个日志包来支持Log4J和JDK1.4+的日志记录。 - `commons-fileupload-...
本入门自学笔记将带你一步步了解并掌握Spring Boot的核心概念和实践技巧。 ### 01 SpringBoot简介 #### 1.1 Spring Boot 的优势 - **简化的起步**:Spring Boot 提供了起步依赖(starter),可以通过添加相应的Maven...
- `freemarker-2.3.x.jar`: Struts2的所有UI标记的模板引擎。 - `commons-logging-1.0.x.jar`: 日志接口封装。 - `commons-fileupload-1.2.1.jar`: 文件上传支持。 4. **配置过滤器**:编辑`/Webroot/WEB-INF/web...
- **实现**:根据应用需求选择不同的视图技术(如JSP、Freemarker、Thymeleaf等)。 #### 三、SpringMVC入门案例 本节通过一个简单的商品列表查询案例来详细介绍SpringMVC的基本使用。 ##### 3.1 案例需求 - **...
本大纲笔记将带你逐步深入理解SpringMVC的核心概念和使用方法。 一、SpringMVC 入门 1.1 引入SpringMVC 首先,我们需要在项目中引入SpringMVC的依赖,这通常通过在Maven或Gradle的配置文件中添加相应的依赖项来完成...
- Struts2支持多种类型的Result,包括JSP、FreeMarker、Velocity等模板引擎。此外,还支持JSON、XML等数据格式的返回,满足不同的应用场景需求。 #### 四、总结 综上所述,Struts2相比Struts1在架构设计、AOP支持、...
课程中使用的是**struts-2.3.15.3-all.zip**版本的学习资料。其中包含了一些关键的组成部分: - **apps**:提供了示例应用程序,方便快速导入所需的jar包和配置文件。 - **lib**:包含了开发Struts2所需的所有jar包...
- 模板技术:Spring MVC不强制使用特定的视图技术,而Struts2常与JSP或FreeMarker结合。 ### 7. Spring MVC的高级应用 - **参数绑定(集合类型)**:支持List、Set等集合类型的参数绑定。 - **数据回显**:在表单...
- **freemarker**: 视图渲染引擎。 - **velocity**: 另一个视图渲染引擎。 ##### 2.3 配置Struts2 - **3.3.1 生成struts.xml配置文件**:这是Struts2的核心配置文件,用于定义Action、拦截器等组件。例如,在项目的...
`struts-2.3.15.3`很可能是Struts2的特定版本库,包含所有必要的JAR文件和文档,可供开发者进行开发和调试。最后,`struts2`目录可能包含了一些示例代码或项目,供学习者实践和理解Struts2的实际应用。 通过深入...