一起学习
我将在下面的HTML例子中使用前面email例子的数据模式。这个HTML页面是一个假想的企业Intranet页面,它显示出客户帐户的详细信息。本例中的控制器类是一个Java Servlet,视图部分则包含一个HTML模板。下面的代码显示了Servlet类中最主要的代码。为使这个例子更具有代表性,我从头开始手工编写这个Servlet。然而,一般情况下,模板会提供一些Servlet工具,帮助用户减轻一些编写代码的负担。
// 装入模板 Template template = Velocity.getTemplate("html.vm"); // 创建环境 VelocityContext context = new VelocityContext(); context.put ("customers",Customer.getCustomers());// 解析模板,输出应答ServletOutputStream output = response.getOutputStream();Writer writer = new OutputStreamWriter (output);template.merge(context, writer);writer.flush();
这个例子也没有什么令人惊异的地方。和前面的例子一样,我只是把必需的对象加入到VelocityContext,然后输出解析模板的结果。但是请注意,在前面的例子中,我只把一个Customer加入到VelocityContext,这里加入到VelocityContext的却是一组Customer对象。我可以用#foreach指令迭代访问所有的Customer对象。下面是相应的HTML模板:
客户报告
#foreach ($customer in $customers)
$customer.CustName
#foreach ($transaction in $customer.Transactions)$transaction.Date | $transaction.Description | $transaction.Amount |
#end | | $customer.AccountTotal | |
#end
如果你正在规划一个工程,这个工程的需求远远超过几个HTML模板,请考虑众多以模板为基础的框架之一。这些框架不仅为生成HTML提供了模板引擎所带来的便利,而且提供许多实用工具,比如数据库连接池和安全。两个常见的例子是Turbine和Melati,它们都和Velocity以及WebMacro兼容,都是免费且源代码开放的产品。
性能和配置
对于大多数程序来说,模板的速度看来已经足够快;但对于大容量的Web网站,你可能要认真地考虑一下性能问题。在性能方面,模板引擎最大的特点在于模板缓冲。在模板缓冲机制的作用下,模板不再是每次出现请求的时候从磁盘读取,而是以最理想的方式在内存中保存和解析。在开发期间,模板缓冲通常处于禁用状态,因为这时请求数量较少,而且要求对页面的修改立即产生效果。部署完毕之后,模板一般不再改变,性能就成了优先考虑的问题。因此,这时你应该启用模板缓冲功能。
对于大多数模板引擎,你可以通过应用一个设置选项或编辑Java属性文件方便地启用模板缓冲功能。在Velocity中,你可以通过Properties对象初始化模板。至于Properties对象的创建方法,你既可以手工创建,就象我前面所做的那样;或者也可以从属性文件装入。在实际应用中,后者也许是较为理想的方法。
Properties props = new Properties(); props.setProperty( "file.resource.loader.cache", "true" ); props.setProperty( "file.resource.loader.modificationCheckInterval", "3600" ); Velocity.init (props);
通过file.resource.loader.cache属性可以把缓冲设置成true或false,而file.resource.loader.modificationCheckInterval属性设置的是检查文件是否改变的间隔秒数。在这里我无法详细介绍所有的属性,请参考模板引擎的文档了解更多信息。
■ 结束语
免费的高级模板引擎使我们能够把模板功能加入到几乎所有的Java应用。这些模板引擎为程序员提供了易用的工具,为模板编写者提供了简单的模板语言,使得开发者更有信心编写出高质量的代码。
模板分离了程序代码和应用的表现部分,极大地方便了程序员和内容制作者的工作。模板把程序员从混合了大量文本信息的杂乱代码中解放出来;使得制作文本内容的人无需面对程序逻辑,就可以轻松地编写和修改内容。
模板清楚地分离了程序逻辑和文本表现代码,从而也为设计更好的MVC系统提供了方便。因此,模板为替换其他内容发布系统(比如JSP)提供了一种有吸引力的方案,因为它能够在不增加复杂性的情况下,改进应用的整体设计。
■ 参考资源
下载本文示例的完整代码
其他模板应用的例子
Velocity
WebMacro
了解更多有关MVC的知识,看看它能够为你的程序设计带来什么帮助
基于模板的Web应用框架:
Turbine
The Melati project
对象-关系工具:
The ExoLab Group
Osage
用Java程序生成文本的捷径(一)
用Java程序生成文本的捷径(二)
用Java程序生成文本的捷径(三)
下载本文示例代码
用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)用Java程序生成文本的捷径(三)
阅读(136) | 评论(0) | 转发(0) |