`
ezerg
  • 浏览: 268987 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

FreeMarker 的两个应用实例

阅读更多


FreeMarker 是一个 Java  开发的模板引擎,功能类似的还有 Apache 项目中的 Velocity ,关于比较二者功能的文章也很多。
技术本身没有高低之分,根据自己的实际情况来选择,我本人更喜欢 FreeMarker ,主要有两个用途:
1、利用 FreeMarker 模板代替 JSP 技术显示界面。
实现比较简便,FreeMarker 也有相应的例子。大概的过程如下:
首先在 Servlet 里面初始化配置,只需要初始化一次,所以可放在 init() 方法内部
		// 模版文件的路径
		String templatePath = WebConfig.get().getTemplatePath();
		//多模板路径配置,单个模板路径可使用
		//cfg.setServletContextForTemplateLoading(getServletContext(), templatePath);
		WebappTemplateLoader wtl = new WebappTemplateLoader(getServletContext(), templatePath);
		ClassTemplateLoader ctl = new ClassTemplateLoader(this.getClass(), "/template");
		TemplateLoader[] loaders = new TemplateLoader[] { wtl, ctl };
		MultiTemplateLoader mtl = new MultiTemplateLoader(loaders);
		cfg.setTemplateLoader(mtl);
		// 设置检测模版是否更新的时间
		if (debug) {
			cfg.setTemplateUpdateDelay(0); // 不缓存模板文件
			cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
		} else {
			cfg.setTemplateUpdateDelay(60);
			cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
		}
		// Use beans wrapper?(recommended for most applications)
		cfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER);
		// 设置模版文件的编码
		cfg.setDefaultEncoding(WebConfig.get().getTemplateEncoding());
		// 设置输出编码
		cfg.setOutputEncoding(characterEncoding);
		// 设置数字显示格式
		cfg.setNumberFormat("#.##"); //防止数字中出现逗号
		// 设置日期显示格式
		cfg.setDateFormat("yyyy-MM-dd");
		cfg.setDateTimeFormat("yyyy-MM-dd HH:mm:ss");

再根据请求的路径取得模板文件对象
// uri 为模板文件路径
Template t = cfg.getTemplate(uri);

最后构造需要传递到模板的 Map 数据,生成页面并返回
// rootMap 类型是 HashMap
t.process(rootMap, response.getWriter());

详细的代码可以参考自带的例子。

2、利用 FreeMarker 模板自动生成部分程序代码。
开发过程中,很多重复的增删改查的 Java 代码和页面代码,有时候很多的工作都在复制和粘贴。
因为代码存在相似性,所以可以将共性其写成 FreeMarker 的模板,不同的地方可以作为变量,从而自动生成程序代码。
基本的过程与生成 WEB 页类似,只不过生成页面的方法小改一下:
// 生成到指定的文件名
t.process(context, new PrintWriter(new FileOutputStream(filePath + "/" + export)));


1
2
分享到:
评论
1 楼 zc-111 2011-07-18  
shoucang了。回家自己研究下。用了几月freemarker了。值关注了页面本身。

相关推荐

    freemarker总结

    可以看到例子中使用的两个同名变量并没有冲突,因为它们位于不同的名字空间 l 可以使用assign指令在导入的名字空间中创建或替代变量,下面是一个例子: ${my.mail} ${my.mail} l 输出结果: jsmith@...

    FreeMark学习笔记

    如果指定两个索引值,则返回两个索引中间的字符串子串.假如有如下数据模型: Map root = new HashMap(); root.put("book","struts2,freemarker"); 可以通过如下语法来截取子串: ${book[0]}${book[4]} //结果是su ${...

    JAVA上百实例源码以及开源项目源代码

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    JAVA上百实例源码以及开源项目

    两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...

    基于SpringBoot水果蔬菜购物商城网站设计

    ## 开发软件: Eclipse/Idea都可以 + JDK1.8 + Mysql + Redis ...应用技术:SpringBoot + MyBatis + FreeMarker + JWT + Redis + 雪花算法等等技术。 前台地址:http://localhost:8080/home/system/index

    Struts2属性文件详解

    该属性指定整合Spring框架时,是否缓存Bean实例,该属性只允许使用true和false两个属性值,它的默认值是true.通常不建议修改该属性值. struts.objectTypeDeterminer 该属性指定Struts 2的类型检测机制, 通常支持tiger...

    Java基于SpringBoot的水果蔬菜购物商城网站设计源码+sql数据库(毕业设计).zip

    应用技术:SpringBoot + MyBatis + FreeMarker + JWT + Redis + 雪花算法等等技术。 前台地址:http://localhost:8080/home/system/index 后台地址:http://localhost:8080/admin/system/login 前台用户自行注册...

    基于SpringBoot实现的水果蔬菜购物的商城网站+源代码+文档说明+数据库

    应用技术:SpringBoot + MyBatis + FreeMarker + JWT + Redis + 雪花算法等等技术。 前台地址:http://localhost:8080/home/system/index 后台地址:http://localhost:8080/admin/system/login 前台用户自行注册...

    (2.0版本)自己写的struts2+hibernate+spring实例

    如果不需要这两万条数据的朋友可以光下该实例就好了.如果需要记录.则可以去下载记录集.(下载地址:http://download.csdn.net/source/513063) create table HUBO_MUSIC ( ID VARCHAR2(32) not null, ...

    Struts2 in action中文版

    8.1.1 页面上:如何使用自定义结果组件构建Struts 2 Ajax应用程序 171 8.1.2 实现JSON结果类型 173 8.2 常用的结果类型 180 8.2.1 RequestDispatcher,也叫做dispatcher 180 8.2.2 ServletRedirectResult,也叫做...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    这是因为某个servlet(服务器端Java程序)在应用户的请求而首次调入内存执行之后将一直驻留在内存里,对同一个servlet的后续请求不用再对这个servlet的类进行实例化,因此响应速度更快。 可是,servlet也存在一个...

    java开源包8

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包1

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    spring boot 全面的样例代码

    - chapter3-1-3:[使用Freemarker模板引擎渲染web视图](http://blog.didispace.com/springbootweb/) - chapter3-1-4:[使用Velocity模板引擎渲染web视图](http://blog.didispace.com/springbootweb/) - chapter3-1-5...

    java开源包2

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

    java开源包3

    LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...

Global site tag (gtag.js) - Google Analytics