Freemarker模板引擎介绍.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Freemarker 模板 引擎 介绍
- 资源描述:
-
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Freemarker,模板引擎介绍,作者:王树强,1,内容提纲,什么是,Freemarker,模板开发,程序开发,对,xml,的强大支持,Freemarker,、,velocity,、,jsp,比较,2,什么是,Freemarker,是一个模板引擎;,是一个基于模板生成文本输出的通用工具,是使用纯,Java,编写的;,是被设计用来生成,HTML Web,页面,特别是基于,MVC,模式的应用程序;,不是一个,Web,应用框架,而更适合作为一个,Web,应用框架的一个组件,视图组件;,可以在模版中使用,JSP,标记库;,与容器无关,它并不知道,HTTP,或者,Servlet,,,FreeMarker,同样可以用于非,Web,应用环境;,FreeMarker,是免费的;,3,什么是,Freemarker,原理(模板,+,数据模型,=,输出),4,模板开发,模板组成,Text,文本:文本会照着原样来输出。,Interpolation,插值:这部分的输出会被计算的值来替换。插值由,$,和,所分隔(或者,#,和,,这种已经不建议再使用了)。,FTL tags,标签:,FTL,标签和,HTML,标签很相似,但是它们却是给,FreeMarker,的指示而且不会打印在输出内容中。,Comments,注释:注释和,HTML,的注释也很相似,但它们是由,来分隔的。注释会被,FreeMarker,所忽略,更不会在输出内容中显示。,5,模板开发,6,具体的模板结构,模板开发,指令,预定义指令,例如:,自定义指令,在模板中使用宏作为自定义指令,这样就能进行重复性的工作。,7,.,或,#list animals as being./#list,(,FreeMarker 2.3.4,版本后可用),模板开发,定义宏,使用宏,打印输出,8,Hello$person!,Hello Fred,模板开发,自定义函数,求平均值的函数例子:,调用:,输出:,9,$avg(3,5,100,200),77,模板开发,表达式,当需要给插值或者指令参数提供值时,可以使用变量或其他复杂的表达式。例如,我们设,x,为,8,,,y,为,5,,那么,$(x+y)/2,的值就会被处理成数字类型的值,6.5,10,程序开发,创建配置实例,创建一个,freemarker.template.Configuration,实例,然后调整它的设置,Configuration,实例是存储,FreeMarker,应用级设置的中央区域。同时,它也处理创建和缓存预解析模板的工作。,11,程序开发,将模板路径配置在,Web,项目中,12,/WEB-INF/config/template/ad,0,UTF-8,zh_CN,程序开发,将模板路径配置在绝对路径中,13,file:D:/ad_data/ftl,0,UTF-8,zh_CN,程序开发,获取模板路径配置在,Web,项目中的,Configuration,实例,获取模板路径配置在绝对路径中的,Configuration,实例,14,Configuration,cfg,=(FreeMarkerConfigurer)RmBeanFactory.,getBean(“,freeMarkerConfigurer,”),.,getConfiguration(),;,Configuration,cfg,=(Configuration)RmBeanFactory,.,getBean(“,freeMarkerConfiguration,”);,程序开发,创建数据模型,数据模型,对应的,Java,片段,15,(root),|,+-user=Big Joe,|,+-latestProduct,|,+-url=products/greenmouse.html,|,+-name=green mouse,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);,程序开发,获得模板,典型的做法是从,Configuration,实例中获取一个,Template,实例,当调用这个方法的时候,将会创建一个,test.ftl,的,Template,实例,通过读取然后解析(编译)它。,Template,实例以解析后的形式存储模板,而不是以源文件的文本形式。,16,Template temp=cfg.getTemplate(“,test.ftl,);,程序开发,合并模板和数据模型,我们已经有了一个数据模型(,root,)和一个模板(,temp,)了,所以为了得到输出就要合并它们。这是由模板的,process,方法完成的。,17,/,输出,文件,Writer out=new FileWriter(new File,(,“D:/test.html,);,temp.process(root,out);,out.flush();,/,输出字符串,StringWriter out=new StringWriter();,temp.process(root,out);,return out.toString();,程序开发,指令,使用,TemplateDirectiveModel,接口在,Java,代码中实现自定义指令。,示例,问题:如何实现一个指令,这个指令可以将在它开始标签和结束标签之内的东西都转换为大写形式?,18,foo,bar,$color,输出:,foo,BAR,RED,GREEN,BLUE,程序开发,用指令实现该问题:,19,/,*,一堆,import,*,/,public class UpperDirective implements TemplateDirectiveModel,public void execute(Environment env,Map params,TemplateModel loopVars,TemplateDirectiveBody body)throws,TemplateException,IOException,/,各种,check,if(body!=null),body.render(new UpperCaseFilterWriter(env.getOut();,else,throw new RuntimeException(missing body);,/*,接下页,*/,程序开发,20,/*,将标签中代码转化为大写并输出,*/,private static class UpperCaseFilterWriter extends Writer,private final Writer out;,UpperCaseFilterWriter(Writer out),this.out=out;,public void write(char cbuf,int off,int len)throws IOException,char transformedCbuf=new charlen;,for(int i=0;i len;i+),transformedCbufi=Character.toUpperCase(cbufi+off);,out.write(transformedCbuf);,public void flush()throws IOException out.flush();,public void close()throws IOException out.close();,程序开发,植入该指令扩展,植入指令后,可用,21,/*,重载,FreemarkerServlet,*/,Override,protected Configuration createConfiguration(),Configuration cfg=super.createConfiguration();,cfg.setSharedVariable(upper,new UpperDirective();,return cfg;,程序开发,方法,方法变量在于实现了,TemplateMethodModel,接口的模板内。这个接口包含一个方法:,TemplateModel exec(java.util.List arguments),。,当使用方法调用表达式调用方法时,,exec,方法将会被调用。形参将会包含,FTL,方法调用形参的值。,exec,方法的返回值给出了,FTL,方法调用表达式的返回值。,22,程序开发,自定义模版文件加载器,文件目录加载器,类路径加载器,Web,上下文加载器。当在,Web,环境中使用,FreemarkerServlet,来加载模版文件时,默认使用第三种加载器,并通过,Servlet,的配置,TemplatePath,来指定模版文件所存放的路径,该路径是相对于,Web,的根目录的。,23,程序开发,缓存处理,FreeMarker,的缓存处理主要用于模版文件的缓存,一般来讲,模版文件改动不会很频繁,在一个流量非常大的网站中,如果频繁的读取模版文件对系统的负担还是很重的,因此,FreeMarker,通过将模版文件的内容进行缓存,来降低模版文件读取的频次,降低系统的负载。,24,程序开发,异常处理,配置异常,:配置异常指的是,FreeMarker,初始化时发生的异常,例如错误的配置导致,该异常时由,FreeMarker,的,API,抛出来的。,模版加载异常,:模版加载异常可能是模版不存在或者没有读权限,或者是解析模版时发生错误,例如模版语法错误等。,模版执行异常,:模版执行异常是指模版已经成功的加载但在执行过程中由于代码执行错误所抛出的异常,这类异常一般都是用户的代码导致。(真正需要关心以及监控的异常),25,对,xml,的强大支持,XML,文档,xml,数据流(,sellDetail,),26,欢迎来百伯,对,xml,的强大支持,将,XML,放到数据模型中,27,/*Create a data-model*/,Map root=new HashMap();,root.put(doc,freemarker.ext.dom.NodeModel.parse(new org.xml.sax.InputSource(,sellDetail,);,sell_detail.ftl,28,广告类型为:,$,item.type,对,xml,的强大支持,通过名称来访问元素,输出:,29,对,xml,的强大支持,访问属性,输出:,30,广告类型为:,$,item.type,广告类型为:,image,对,xml,的强大支持,和,word2003,以后版本的联合应用,实例:生成电子合同,用,word,编写电子合同样式,另存成,xml,格式,将需动态生成部分作为,freemarker,用,freemarker,引擎生成,.doc,或,.docx,格式的合同文件,31,freemarker,、,velocity,、,jsp,比较,Freemarker,分析,Freemarker,优点,不能编写,java,代码,可以实现严格的,mvc,分离,性能非常不错,对,jsp,标签支持良好,内置大量常用功能,使用非常方便,宏定义(类似,jsp,标签)非常方便,使用表达式语言,32,freemarker,、,velocity,、,jsp,比较,Freemarker,缺点,不是官方标准,用户群体和第三方标签库没有,jsp,多,33,freemarker,、,velocity,、,jsp,比较,V,elocity,分析,Velocity,优点,不能编写,java,代码,可以实现严格的,mvc,分离,性能良好,据说比,jsp,性能还要好些,使用表达式语言,据说,jsp,的表达式语言就是学,velocity,的,Velocity,缺点,不是官方标准,用户群体和第三方标签库没有,jsp,多。,对,jsp,标签支持不够好,34,freemarker,、,velocity,、,jsp,比较,Jsp,分析,Jsp,优点,功能强大,可以写,java,代码,支持,jsp,标签(,jsptag,),支持表达式语言(,el,),官方标准,用户群广,丰富的第三方,jsp,标签库,性能良好。,jsp,编译成,class,文件执行,有很好的性能表现,35,freemarker,、,velocity,、,jsp,比较,Jsp,缺点,jsp,没有明显缺点,非要挑点骨头那就是,由于可以编写,java,代码,如使用不当容易破坏,mvc,结构。,36,freemarker,、,velocity,、,jsp,比较,选择,freemarker,的理由,性能,velocity,应该是最好的,其次是,jsp,,,普通的页面,freemarker,性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,,freemarker,的性能比使用,tag,和,el,的,jsp,好。,宏定义比,jsptag,方便,37,freemarker,、,velocity,、,jsp,比较,内置大量常用功能,比如,html,过滤,日期金额格式化等等,使用非常方便,支持,jsp,标签,可以实现严格的,mvc,分离,38,谢谢!,39,展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


Freemarker模板引擎介绍.ppt
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/14757991.html