使用freemarker实现页面静态化

最近做一个电商网站,首页分类数据太多需要实现静态化,于是google了一下找了一大堆的资料.做了一个例子:

由于这个项目使用了freemarker,所以就用freemarker来实现页面静态化.

   以下是我生成静态页最核心的方法,使用freemarker。

Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
     /**
      * 生成静态页面主方法
      * @param context ServletContext
      * @param data 一个Map的数据结果集
      * @param templatePath ftl模版路径
      * @param targetHtmlPath 生成静态页面的路径
      */
     public  static  void  crateHTML(ServletContext context, Map<String,Object> data, String templatePath,String targetHtmlPath){
         Configuration freemarkerCfg =  new  Configuration();
         //加载模版
         freemarkerCfg.setServletContextForTemplateLoading(context,  "/" );
         freemarkerCfg.setEncoding(Locale.getDefault(),  "UTF-8" );
         try  {
             //指定模版路径
             Template template = freemarkerCfg.getTemplate(templatePath, "UTF-8" );
             template.setEncoding( "UTF-8" );
             //生成静态页面的路径
             String htmlPath = context.getRealPath( "/html" )+ "/" +targetHtmlPath;
             File htmlFile =  new  File(htmlPath);
             Writer out =  new  BufferedWriter( new  OutputStreamWriter( new  FileOutputStream(htmlFile),  "UTF-8" ));
             //处理模版  
             template.process(data, out);
             out.flush();
             out.close();
         catch  (Exception e) {
             e.printStackTrace();
         }
     }

简单说明一下参数:
ServletContext :做java web的应该都知道,这里用的spring mvc 通过request.getSession().getServletContext()获取.
Map<String,Object> data : 模版的数据来源。freemarker通过一个Map给ftl模版送数据.
String templatePath : ftl所在的路径。我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。
String targetHtmlPath : 最后生成静态页的路径:我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。

生成的html文件路径是在: 根目录下的html文件夹下. 

ftl模版文件是在根目录下的ftl文件夹下.

我们需要freemarker生成一个index_kinds.html文件。

controller中的方法:

Java code
?
1
2
3
4
5
6
7
8
9
10
  @RequestMapping(value="createKinds.html")
public String createKinds(HttpServletRequest request){
//得到分类数据
List<Kinds> kindss = kindsService.getDataByHql("from Kinds where rank=2");
Map<String,Object> data = new HashMap<String,Object>();
data.put("kindss", kindss);
//调用静态页面方法
createHTML(request.getSession().getServletContext(), data, "/ftl/index_kinds.ftl", "index_kinds.html");
System.out.println("生成静态页面成功!");
return "index_kinds";



以下是:ftl模版源码:
Java code
?
1
2
3
4
5
6
7
8
9
10
<#if kindss?size != 0>
<div>
    <strong>一级分类:</strong>
    <#list kindss as kinds>
<a href="#">${kinds.name}</a>
</#list>
</div>
<#else>
<div>没有数据</div>
</#if>

我这里的ftl模版只是一个测试的模版,当然会根据自己的业务来实现模版.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值