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)));
分享到:
相关推荐
可以看到例子中使用的两个同名变量并没有冲突,因为它们位于不同的名字空间 l 可以使用assign指令在导入的名字空间中创建或替代变量,下面是一个例子: ${my.mail} ${my.mail} l 输出结果: jsmith@...
如果指定两个索引值,则返回两个索引中间的字符串子串.假如有如下数据模型: Map root = new HashMap(); root.put("book","struts2,freemarker"); 可以通过如下语法来截取子串: ${book[0]}${book[4]} //结果是su ${...
两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将...
## 开发软件: Eclipse/Idea都可以 + JDK1.8 + Mysql + Redis ...应用技术:SpringBoot + MyBatis + FreeMarker + JWT + Redis + 雪花算法等等技术。 前台地址:http://localhost:8080/home/system/index
该属性指定整合Spring框架时,是否缓存Bean实例,该属性只允许使用true和false两个属性值,它的默认值是true.通常不建议修改该属性值. struts.objectTypeDeterminer 该属性指定Struts 2的类型检测机制, 通常支持tiger...
应用技术:SpringBoot + MyBatis + FreeMarker + JWT + Redis + 雪花算法等等技术。 前台地址:http://localhost:8080/home/system/index 后台地址:http://localhost:8080/admin/system/login 前台用户自行注册...
应用技术:SpringBoot + MyBatis + FreeMarker + JWT + Redis + 雪花算法等等技术。 前台地址:http://localhost:8080/home/system/index 后台地址:http://localhost:8080/admin/system/login 前台用户自行注册...
如果不需要这两万条数据的朋友可以光下该实例就好了.如果需要记录.则可以去下载记录集.(下载地址:http://download.csdn.net/source/513063) create table HUBO_MUSIC ( ID VARCHAR2(32) not null, ...
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,也叫做...
这是因为某个servlet(服务器端Java程序)在应用户的请求而首次调入内存执行之后将一直驻留在内存里,对同一个servlet的后续请求不用再对这个servlet的类进行实例化,因此响应速度更快。 可是,servlet也存在一个...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
- chapter3-1-3:[使用Freemarker模板引擎渲染web视图](http://blog.didispace.com/springbootweb/) - chapter3-1-4:[使用Velocity模板引擎渲染web视图](http://blog.didispace.com/springbootweb/) - chapter3-1-5...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...