淘淘商城系列——freemarker入门

来源:互联网 发布:算法书籍 编辑:程序博客网 时间:2024/04/29 18:16

通过上文的学习,我相信大家都已经学会在商品详情页面展示时添加缓存了,从现在开始,我们将步入freemarker的学习中。
我们都知道,缓存可以提高查询性能,但是当用户访问量很大时,单纯依靠缓存已经不行了,为什么这么说呢?这是因为我们在访问商品详情的时候由于每款商品都不一样,因此每款商品的详情页都是动态生成的,每查看一次,页面就要重新渲染一次,渲染的过程是消耗时间的,当用户访问量很大时,这便在一定程度上降低了系统性能。那么怎么解决这个问题呢?这便引出了我们今天要学习的内容——网页静态化,所谓网页静态化,是指我们根据一定的模板,事先把要展示的页面生成静态页面,存放到服务器中,当用户访问某商品详情页时便可以直接从服务器获取相应的静态页面,不用再重新渲染,这就在很大程度上提升了系统性能。
那么用什么技术来实现网页静态化呢?目前常用的两种技术是volocity和freemarker,我们学习其中最流行的freemarker,那么什么是freemarker呢?下面我将为大家介绍。

freemarker介绍

FreeMarker是一款模板引擎,即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据,而在模板之外只须注意要展示什么数据。
对此,我个人对FreeMarker的理解是:FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java源代码等。目前企业中主要用FreeMarker做静态页面或是页面展示

freemarker的入门程序

我们来看一张图,如下图所示,FreeMarker将模板和动态数据组合在一起,生成一个静态页面。
这里写图片描述
下面我们便使用FreeMarker进行相应的测试,要想在工程中使用FreeMarker便要添加对FreeMarker的依赖,静态页面最好放到表现层工程中。因此我们在taotao-item-web工程的pom.xml文件中添加对FreeMarker的依赖,如下图所示(在taotao-parent工程中已统一定义了FreeMarker的版本)。
这里写图片描述
下面我们创建一个模板(模板的扩展名随意,只是习惯性的用.ftl来命名),如下图所示。
这里写图片描述
接着在taotao-item-web工程中创建一个FreemarkerTest单元测试类,如下图所示。
这里写图片描述
为方便大家复制,现将FreemarkerTest单元测试类的代码给出。

public class FreemarkerTest {    @Test    public void testFreemarkerFirst() throws Exception {        // 创建一个Configuration对象        Configuration configuration = new Configuration(Configuration.getVersion());        // 设置模板所在的目录        configuration.setDirectoryForTemplateLoading(new File("F:/Java/my-taotao/taotao-item-web/src/main/resources/ftl"));        // 设置模板字符集        configuration.setDefaultEncoding("UTF-8");        // 加载模板文件        Template template = configuration.getTemplate("hello.ftl");        // 创建一个数据集        Map data = new HashMap();        data.put("hello", "Hello Freemarker!!!");        // 设置模板输出的目录及输出的文件名        FileWriter writer = new FileWriter(new File("F:/temp/freemarker/hello.html"));        // 生成文件        template.process(data, writer);        // 关闭流        writer.close();    }}

需要注意的是,静态页面输出路径F:/temp/freemarker要确保存在,如果没有要创建,如下图所示。
这里写图片描述
我们运行上面的testFreemarkerFirst测试方法,运行成功后,在F:/temp/freemarker目录下便可以看到hello.html静态页面了,我们双击打开它,可以在浏览器中看到Hello Freemarker!!!的信息,这就是我们要在模板中展示的内容,这说明模板与动态内容结合成功了!!
这里写图片描述