freemarker 是一个模板化引擎语言,传统项目中,后台页面基本上都是 list 列表,页面都是类似的,只是展示的数据不一样。这样我们就可以把他 的样式做成一个 freemarker 模板,然后传入数据就可以展示不同的页面。他 的模板一般是以.ftl 结尾的。如果使用这个呢,可以使我们开发人员不需要 太关注前台。但是对于很多门户或商城类项目,每个页面都是不一样,所以 用他也不是很方便。另外,由于可以把 freemarker 模板直接转换成 html、 jsp、java、xml、word 等各种文档。所以我们经常使用他做代码生成、word 生成或者首页静态化等。我这里就用到了首页静态化的功能。由于任何用户 访问时,首先会访问到我们的首页,所以很多东西都希望能在首页展示,但 是放的东西多了,就会加载很慢。给用户的体验度很不好。所以我们在项目 启动时,直接把首页需要的数据查询出来,通过 freemarker 模板生成静态的 html 页面,之后用户访问时,都去访问这个静态页面,这样就不需要频繁访 问数据库,减轻了数据库压力,提高了用户体验度。但是缺点是,数据库数 据数据变换了以后,数据无法实时更新。我们一般通过定时器的方式,每天 凌晨重新生成。
还有就是热销商品的商品详情页面也做了静态化处理,首页我们是通过定时 器每天凌晨一点,去重新生成;商品详情我们是在商品信息修改以后,给定 时器表(id,业务 id、type,remark)中 推送一条信息,到第二天凌晨一点 时,定时任务扫描表,发现有需要重新生成的页面,就调用 freemarker 模板, 重新生成 html 页面,以商品 id 作为 html 页面名称,然后删除任务表中的数 据。为了预防大量静态页面给服务器造成压力,我们把 html 页面直接生成到 Nginx 的静态页面服务器上。访问时,不用经过 Tomcat,直接通过 Nginx 访 问。