- 浏览: 587054 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
18335864773:
用 pageoffice 吧. http://www.zhuo ...
使用Jacob输出word文档 -
dick1305:
很好,谢谢分享。
XFire创建WebService实例 -
wd530141534:
<c:if test="${ReleaseRe ...
Axis2创建WebService实例 -
wd530141534:
if(result != null && re ...
Axis2创建WebService实例 -
wd530141534:
String printerIp = req.getRemot ...
Axis2创建WebService实例
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写,
模板用servlet提供的数据动态地生成 HTML,模板语言是强大的直观的,编译器速度快,
输出接近静态HTML页面的速度。
一.Freemarker模板应用事例。
1.创建模板文件,在/resource/template目录下建立freemarkerLocal.ftl文件。
------------------普通变量获取------------------- ${user} ---------获取Map中属性-------------- ${latestProduct.url} ${latestProduct.name} -------自定义的indexOf方法变量------- <#assign x = "something"> ${indexOf("met", x)} ${indexOf("foo", x)} ------自定义的转换器变量(转换小写为大写,以标签形式展现)---------------- blah1 <@upperCase> blah2 blah3 </@upperCase> blah4 ---------------共享变量的获取,在Configuration中设置--------------- <@to_upper> ${company} </@to_upper>
2.代码解析模板文件输出。
public class FreemarkerLocalTest { public static void main(String[] args) throws Exception { /* 一般在应用的整个生命周期中你仅需要执行一下代码一次*/ /* 创建一个合适的configuration */ Configuration cfg = new Configuration(); // 设置模板加载的方式 cfg.setDirectoryForTemplateLoading( new File("D:/myspace/freemarker/resource/template")); // 方式二(从Web上下文获取) // void setServletContextForTemplateLoading(Object servletContext, String path); // 设置模板共享变量,所有的模板都可以访问设置的共享变量 cfg.setSharedVariable("to_upper", new UpperCaseTransform()); cfg.setSharedVariable("company","FooInc."); // 指定模板如何查看数据模型 cfg.setObjectWrapper(new DefaultObjectWrapper()); // 如果从多个位置加载模板,可采用以下方式 /** FileTemplateLoader ftl1 = new FileTemplateLoader(new File("/tmp/templates")); FileTemplateLoader ftl2 = new FileTemplateLoader(new File("/usr/data/templates")); ClassTemplateLoader ctl = new ClassTemplateLoader(getClass(),""); TemplateLoader[] loaders = new TemplateLoader[] { ftl1, ftl2,ctl }; MultiTemplateLoader mtl = new MultiTemplateLoader(loaders); cfg.setTemplateLoader(mtl);**/ /* 而以下代码你通常会在一个应用生命周期中执行多次*/ /*获取或创建一个模版*/ Template temp = cfg.getTemplate("freemarkerLocal.ftl"); /*创建一个数据模型Create a data model */ Map root = new HashMap(); root.put("user", "Big Joe"); Map latest = new HashMap(); root.put("latestProduct", latest); latest.put("url", "products/greenmouse.html"); latest.put("name", "green mouse"); // 方法变量,indexOf为自己定义的方法变量 root.put("indexOf", new IndexOfMethod()); // 转换器变量 root.put("upperCase", new UpperCaseTransform()); /* 合并数据模型和模版*/ Writer out = new OutputStreamWriter(System.out); temp.process(root, out); out.flush(); } }
3.自定义的方法变量类IndexOfMethod
public class IndexOfMethod implements TemplateMethodModel { public Object exec(List args) throws TemplateModelException { if (args.size() != 2) { throw new TemplateModelException("Wrong arguments"); } // 返回第一个字符串首次出现在第二个字符串的位置 return new SimpleNumber(((String) args.get(1)) .indexOf((String) args.get(0))); } }
4.自定义的转换器变量类UpperCaseTransform
/** * 转换器变量,自定义自己的转换器标签 */ import freemarker.template.TemplateTransformModel; public class UpperCaseTransform implements TemplateTransformModel { // 转换器接口方法,将会转换标签之间的内容,首先把标签之间的内容读取到Writer对象中, // 再由Writer对象对其中的内容施行转换处理,转换后的内容会再次存储到Writer 中 public Writer getWriter(Writer out, Map args) { return new UpperCaseWriter(out); } private class UpperCaseWriter extends Writer { private Writer out; UpperCaseWriter(Writer out) { this.out = out; } public void write(char[] cbuf, int off, int len) throws IOException { out.write(new String(cbuf, off, len).toUpperCase()); } public void flush() throws IOException { out.flush(); } // 不用调用out.close,到达结束标签close会自动被调用 public void close() { } } }
二.自动生成代码应用
1.创建模板文件,在/resource/template目录下建立codeModel.ftl文件。
package com.order.model; public class ${class} { <#list properties as prop> private ${prop.type} ${prop.name}; </#list> <#list properties as prop> public ${prop.type} get${prop.name?cap_first}(){ return ${prop.name}; } public void set${prop.name?cap_first}(${prop.type} ${prop.name}){ this.${prop.name} = ${prop.name}; } </#list> }
2.应用代码生成模板文件。
public class GenerateCodeTest { public static void main(String args[]) throws IOException, TemplateException { Configuration cfg = new Configuration(); cfg.setDirectoryForTemplateLoading(new File( "D:/myspace/freemarker/resource/template/")); cfg.setObjectWrapper(new DefaultObjectWrapper()); /* 获取模板文件 */ Template template = cfg.getTemplate("codeModel.ftl"); /* 模板数据 */ Map<String, Object> root = new HashMap<String, Object>(); root.put("class", "Order"); Collection<Map<String, String>> properties = new HashSet<Map<String, String>>(); root.put("properties", properties); /* 字段1 orderId */ Map<String, String> orderId = new HashMap<String, String>(); orderId.put("name", "orderId"); orderId.put("type", "Long"); properties.add(orderId); /* 字段2 orderName */ Map<String, String> orderName = new HashMap<String, String>(); orderName.put("name", "orderName"); orderName.put("type", "String"); properties.add(orderName); /* 字段3 money */ Map<String, String> money = new HashMap<String, String>(); money.put("name", "money"); money.put("type", "Double"); properties.add(money); /* 生成输出到控制台 */ Writer out = new OutputStreamWriter(System.out); template.process(root, out); out.flush(); /* 生成输出到文件 */ File fileDir = new File("D:/generateCodeFile"); // 创建文件夹,不存在则创建 org.apache.commons.io.FileUtils.forceMkdir(fileDir); // 指定生成输出的文件 File output = new File(fileDir + "/Order.java"); Writer writer = new FileWriter(output); template.process(root, writer); writer.close(); } }
三.JSP调用模板文件输出。
1.首先创建模板文件,在WEB-INF/templates目录下建立test.ftl文件。
Hello,${name}!
2.解析模板文件类,传入pageContext参数。
public class FreemarkerTest { public void execute(PageContext pageContext) throws Exception { Configuration cfg = new Configuration(); // 设置模板的路径 cfg.setServletContextForTemplateLoading(pageContext.getServletContext(), "WEB-INF/templates"); Map root = new HashMap(); root.put("name", "Tom"); // 获取模板文件 Template t = cfg.getTemplate("test.ftl"); Writer out = pageContext.getResponse().getWriter(); t.process(root, out); } }
3.创建JSP文件调用输出。
<%@ page language="java" contentType="text/html; charset=GB2312" pageEncoding="GB2312"%> <%@page import="com.freemarker.test.FreemarkerTest;"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB2312"> <title>HelloWorld</title> </head> <body> <% FreemarkerTest c1 = new FreemarkerTest(); c1.execute(pageContext); %> </body> </html>
四.Servlet调用模板文件生成html文件进行页面展示。
1.创建模板文件,在WebRoot/index目录下建立test.ftl文件。
<html> <body> 用户名:${userName}<br> 邮 箱:${email} </body> </html>
2.创建Servlet文件解析模板文件并生成html文件进行页面输出。
public class FreemarkerServletTest extends HttpServlet { public FreemarkerServletTest() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //生成html后的文件 String path = getServletContext().getRealPath("/") + "index.htm"; System.out.println(path); try { freemarker(request, "test.ftl", path, "index"); } catch (Exception e) { e.printStackTrace(); } //跳转到刚生成的html文件中 request.getRequestDispatcher("/index.htm").forward(request, response); } /** * 生成静态文件 * @param request * @param ftl ftl文件 * @param html 生成html后的文件 * @param file 存放ftl文件的路径 * @throws Exception */ public void freemarker(HttpServletRequest request,String ftl, String html,String file) throws Exception { Configuration cfg = new Configuration(); // 设置加载模板的路径 cfg.setServletContextForTemplateLoading(getServletContext(),"/" + file); cfg.setEncoding(Locale.getDefault(), "GB18030"); //获得模板并设置编码 Template tep = cfg.getTemplate(ftl); tep.setEncoding("GB18303"); //新建输出,生成html文件 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(html),"GB18030")); //设置值 Map map = new HashMap(); map.put("userName", "wxj"); map.put("email", "jxauwxj@126.com"); // 解析并输出 tep.process(map, out); } public void init() throws ServletException { } }
3.web.xml文件进行servlet配置。
<servlet> <servlet-name>FreemarkerServletTest</servlet-name> <servlet-class>com.servlet.FreemarkerServletTest</servlet-class> </servlet> <servlet-mapping> <servlet-name>FreemarkerServletTest</servlet-name> <url-pattern>/servlet/FreemarkerServletTest</url-pattern> </servlet-mapping>
4.页面访问如下Url:
http://localhost:8080/freemarkerWeb/servlet/FreemarkerServletTest
输出结果如下:
用户名:wxj 邮 箱:jxauwxj@126.com
同时会在部署环境的目录下生成index.htm文件。
评论
3 楼
zkp小飞
2015-12-11
freemaker在html中引入标签的能不能给个例子...
2 楼
springdata_springmvc
2015-07-22
1 楼
Ganymede
2014-09-03
,写的不错!
发表评论
-
JAVA多线程事例参考(二)
2013-05-10 16:15 1138一、JAVA多线程之Lock import j ... -
JAVA多线程事例参考(一)
2013-05-10 16:07 1360一. Java多线程安全问题,模拟银行存款 /** * ... -
JAVA之 IO流
2013-01-16 13:57 1549一、IO流流就是字节序列的抽象概念,能被连续读取数据的数 ... -
CXF创建WebService实例
2013-01-07 20:33 18028一、概述1、ApacheCXF项目是由ObjectWeb Ce ... -
JAVA编程指南
2012-12-27 22:57 1107一、设计方法论 1、 ... -
JAVA基础
2012-12-27 22:43 1290一、JAVA基础 1.类的构建过程是从基类“向外”扩散 ... -
Java类加载器入门应用
2012-03-08 22:40 23751、类加载器负责加载 Ja ... -
Java语言高级应用
2012-03-08 22:11 4265一、 Java反射1.Java反射 ... -
CAS单点登录应用
2012-02-15 17:33 1946一. 基础知识点1.CAS Se ... -
Velocity模板应用
2011-12-14 19:25 18033Velocity是一个基于java的模板引擎(模板引擎的作用就 ... -
XFire创建WebService实例
2011-11-16 13:58 61971XFire创建WebService实例应用 X ... -
Axis2创建WebService实例
2011-03-26 14:34 193099一、Axis2的下载和安装 1.可从http: ... -
Maven使用小结
2011-01-08 21:52 11798(1)创建一个maven项目 mvn archetype ... -
Tomcat部署Web应用
2010-12-16 22:28 14651.利用Tomcat自动部署 将myWeb应用目录拷贝 ... -
Tomcat数据源配置
2010-12-16 21:32 1271一、 Tomcat5.0.X数据源配置,修改${tomca ...
相关推荐
FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力...
FreeMarker 是一款模板引擎:一种基于模板的、用来生成输出文本(任何来自于 HTML 格式的文本用来自动生成源代码)的通用工具。它是为 Java 程序员提供的一个开发包或者说是类库。它不是面向最终用户,而是为程序员...
一个简单的 web 应用程序,用于编辑 FreeMarker FTL 模板,快速转换并预览 HTML 和 PDF 格式的结果。 用 Spring 和 AngularJS 编写。 此工具旨在适应编写在您的应用程序中呈现为 HTML 或 PDF 的 FTL 模板的工作流程...
FreeMarker 是一款模板引擎:一种基于模板的、用来生成输出文本(任何来自于 HTML 格式的文本用来自动生成源代码)的通用工具。它是为 Java 程序员提供的一个开发包或者说 是类库。它不是面向最终用户,而是为程序员...
FreeMarker 是一款模板引擎:一种基于模板的、用来生成输出文本(任何来自于 HTML 格式的文本用来自动生成源代码)的通用工具。它是为 Java 程序员提供的一个开发包或者说是类库。它不是面向最终用户,而是为程序员...
为您提供FreeMarker模板引擎下载,FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。虽然FreeMarker具有一些...
freemarker大致原理是:将页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMarker模板文件解析类process()方法完成静态页面的生成。了解了上面的原理,接下来我...
注意介绍freemarker在开发struts2中应用DEMO,而不是为了像邮件模板的实例,真真是view层的实现。 也是本人在开发中实践的。
FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。 ...
FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。 模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度...
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。虽然FreeMarker具有一些编程的能力,但通常由Java程序准备...
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写,FreeMarker被设计用来生成HTML Web页面(为了提高页面的访问速度,把页面静态化),特别是基于MVC模式的应用程序
积分java源码外勤数据库 将模板引擎集成到更容易的服务器...另一个原因是遵循该原则,例如,当您使用一组有限的相似数据结构时,对其应用通用处理算法,并且您能够实现一个模板并从中生成许多略有不同的过程。 代码生成
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力,但通常由Java程序...
FreeMarker允许Java servlet保持图形设计同应用程序逻辑的...FreeMarker同样可以应用于非Web应用程序环境,FreeMarker更适合作为Model2框架(如Struts)的视图组件,可以在模板中使用JSP标记库,FreeMarker是免费的。
设计师可以改变的外观网页程序员无需更改或重新编译代码,因为应用程序逻辑( Java程序)和网页设计( FreeMarker模板)分开。 模板不会成为污染的复杂程序片段。 这一分离是有益的,在网页代码中,你甚至会觉得是...
它是为程序显示数据而准备的.(像数据库SQL语句的查询.)以及.Freemarker仅仅是利用模板加上数据生成文本页面. <br>Freemarker并不是一个WEB应用程序框架.可以说是一个WEB应用框架的一个组件.但是FREEMARKER引擎...
FreeMarker中文讲解FreeMarker允许Java servlet保持图形...FreeMarker同样可以应用于非Web应用程序环境 FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库 FreeMarker是免费的
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 l FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 l 虽然FreeMarker具有一些编程的能力,但通常由Java程序...
FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。 ...