通过之前的基于SSM3框架FreeMarker自定义指令(标签)实现这篇文章的介绍,我们对FreeMarker有了一个基本了解,这次大象将使用FreeMarker模板引擎,实现生成静态页的功能。
我们在开发某个访问很频繁的页面时,首先想到的优化方式就是用缓存,将数据放到缓存中,但是对于大并发量访问的网站,这样做往往系统也吃不消,进一步的改进就是需要将页面静态化,现在的网站都是采用这种做法,访问一个静态html页面,不管是从速度上,还是性能上显然要比直接访问服务器好得多。
要想用FreeMarker模板引擎实现页面静态化,首先就要有一个模板,模板的定义一般可以有两种方式:
1、定义一个模板文件
2、将模板保存到数据库
本例中,大象将采用第二种做法,这个例子主要是讲怎么实现静态化,因此没有这个模板的CURD操作。另外大象还想说的是,一般操作静态化是放在后台系统,如果网站与后台是同一个主机,那么生成的静态页面可以直接定义到网站的目录下面。但如果网站与后台是分开的两个服务器,那么就需要将生成的静态页放在后台系统的某个目录下面,然后用rsync同步到网站的主机。
首先新建template表
CREATE TABLE `template` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL COMMENT '模板名称',
`path` varchar(20) DEFAULT NULL COMMENT '外部路径',
`content` varchar(500) DEFAULT NULL COMMENT '模板内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
content字段可以根据实际情况设置,这个表也只是一个参考,所有的都要根据实际开发的需求来设计。
Template及其Service
表映射的Pojo类我就不写了,TemplateService写法和UserService一样,根据本例有两个方法,一是从数据库取得对应的模板记录,二是进行生成静态文件前的一些处理工作。
增加ssm3.properties
上图中Context.getProperty()方法是从ssm3.properties中读取的,我在这个文件中定义了静态文件生成路径和URL访问地址,这样可以方便配置。
这两个配置需要根据各人的实际情况来定,我因为是直接运行Jetty来启动程序,所以目录结构就是我的项目代码目录。
为了简化代码,我直接将生成静态化的入口代码写在了HelloController里面。
generateFile接收Ajax方式提交,返回结果包含中文字符,所以还需要对字符串进行编码。
而操作入口也在hello.html页面,因为本例只作演示,所以我将数据库template表的主键ID直接写到ajax的url里面了,实际开发请不要这样做。
这些做完后,让我们再来看看模板
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>主页模板</title></head>
<body>
<h1>${content}</h1>
<h1><a href="${ctx}/hello">进入hello</a></h1>
</body>
</html>
这个模板很简单,接收两个插值变量content和ctx,在TempateService类的generateFile方法中是不是已经看到了?其实不光可以传递简单的字符串,还可以将Object、List、指令标签等东西加入到模板中,只要名称一致,使用方式正确就可以生成任何你想要的页面。
通过数据库取出的这个模板说到底其实就是一串字符串,而FreeMarker引擎生成静态页面是需要模板加载器的。在这里,我们使用freemarker.cache.StringTemplateLoader模板加载器,通过freemarker.template.Configuration这个对象来设置及管理模板、各种配置信息及参数设置。具体请看源码的com.bolo.freemarker.util.GenerateFileUtil
最后我们要修改servlet-context.xml里面的<mvc:view-controller path="/" view-name="forward:index.htm"
/>。index.htm就是我们生成的静态文件名称,好了,先进入http://localhost:8081/hello让我们来生成静态文件。(端口号请按自己的来)
OK,现在静态页生成好了,去看看吧!输入http://localhost:8081/
到这里,关于使用使用FreeMarker模板生成静态页的介绍就讲完了,如果有什么不对的地方还请大家指出来。谢谢!
源码下载: ssm3-template
本文为菠萝大象原创,如要转载请注明出处。http://www.blogjava.net/bolo
posted on 2014-04-04 16:55
菠萝大象 阅读(5769)
评论(7) 编辑 收藏 所属分类:
Spring3