FreeMarker使用模板生成HTML静态页面

执笔记忆的空白 2018-02-09 18:20:52 ⋅ 804 阅读

哈喽,最近的项目中正好在做一个发布新闻的功能,每个新闻可能要有不同的防蚊页面喽~
正好今天就来给大家分享FreeMarker使用模板生成HTML静态页面的技术

按照步骤来做一次试试效果吧~

前置准备

1.建立一个新的Maven项目

这个你肯定会搞吧

2.通过maven引入Freemarker
在pom.xml中加入以下语句

<dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
</dependency>

以下是我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.demo</groupId>
  <artifactId>FreeMarkerDemo</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>FreeMarkerDemo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>FreeMarkerDemo</finalName>
  </build></project>

正式开始

1.我来先来新建一个功能类FreemarkerMain

public class FreemarkerMain {    
private static final Configuration cfg;    
static {        cfg = new Configuration(Configuration.VERSION_2_3_23);        
   try {            // 设置模板路径            cfg.setDirectoryForTemplateLoading(new File("E:\\checkout\\FreeMarkerDemo\\src\\main\\webapp\\mode"));            // 设置默认编码            cfg.setDefaultEncoding("utf-8");            //若发生错误,HTML_DEBUG_HANDLER会生成错误信息到生成页面;RETHROW_HANDLER错误信息会输出到控制台            cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);        } catch (IOException e) {            e.printStackTrace();        }    } }

我在代码中备注已经写的比较清楚了
我们通过setDirectoryForTemplateLoading设置模板的存放路径
通过setDefaultEncoding设置编码格式,并通过setTemplateExceptionHandler配置失败时的错误输出格式
TemplateExceptionHandler.RETHROW_HANDLER错误信息会输出在控制台
TemplateExceptionHandler.HTML_DEBUG_HANDLER错误信息会生成到页面中

2.实现生成页面方法
方法写在FreemarkerMain 的static{}之后
先放代码

/**     * @param modeName       模板名称     * @param targetFileName 生成后的HTML名称     * @param params         传入模板的参数     * @Author: IT实战联盟Tony     * @Date: 15:57 2018/2/9     * @Description:生成静态页面     */public static void createHtmlByMode(String modeName, String targetFileName, Map<String, Object> params) throws Exception {
        Writer out = null;        //找到服务器缓存目录,可以自己指定目录
        String folder = System.getProperty("java.io.tmpdir");        //通过匹配路径格式拼接完整生成路径
        String outFile = folder + File.separator + targetFileName;        try {
            File file = new File(outFile);            //生成空HTML文件
            if (!file.exists()) {
                file.createNewFile();
            }            // 创建模版对象
            Template template = cfg.getTemplate(modeName);            // 设置输出流
            out = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");// 设置编码 UTF-8

            // 模版数据插入参数,通过输出流插入到HTML中
            template.process(params, out);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {            if (null != out) {                try {
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

我们来配置生成后的缓存目录,因为我的功能考虑了之后要通过FTP上传,
所以才用了缓存目录,用的时候可以写成自己的指定路径。

因为我是直接RUN的main方法,所以生成缓存目录是在C:\Users\lenovo\AppData\Local\Temp,
如果是tomcat服务器启动的话应该是在tomcat\temp目录。

3.建立main方法来模拟调用

public static void main(String[] args) throws Exception {        Map<String, Object> params = new HashMap<String, Object>();
        params.put("title", "IT实战联盟");
        params.put("author", "tony");
        params.put("publishTime", "2018-02-09");
        params.put("seeNum", "888");
        params.put("seeNum", "888");
        params.put("imgPath", "http://upload-images.jianshu.io/upload_images/10298880-f713c678f63be447.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240");
        params.put("content", "扫码关注IT实战联盟,IT实战联盟是集产品、UI设计、前后端、架构、大数据和AI人工智能等为一体的实战交流服务平台!联盟嘉宾都为各互联网公司项目的核心成员,联盟主旨是“让实战更简单”,欢迎来撩~~~");

        FreemarkerMain.createHtmlByMode("infopub.ftl", "test.html", params);
    }

infopub.ftl 模板文件名
test.html 生成HTML的名字
params是我用来存储模板中动态字段的集合,然后调用我们上边写的实现方法

最后放出我的模板代码

<!DOCTYPE html><html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name='viewport'          content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
    <title>Freemarker生成静态页面Demo展示</title>
    <style type="text/css">        article {            
           padding: 20px;        }        
       address {            
           font-style: normal;            
           text-align: right;            
           width: 100%;            
           color: #999999;        }        
       .author {            
           float: left;        }        
        .seeIcon {            
           padding: 0px 12px;            
           background: url(imgs/see.png) no-repeat;        }        
       .seeNum {            
           width: 100%;        }        
       .img {            
           width: 380px;            
           height: 380px;        }    

</style></head><body><article>    <h2>${title}</h2>    <address>        <span class="author">${author} ${publishTime}</span>        <span class="seeIcon"></span>        <span class="seeNum">${seeNum}</span>    </address>    <img src="${imgPath}" class="img"/>    <p>${content}</p>
</article>

</body>

</html>

现在执行我们的main方法来执行,就可以在自己的目录下找到生成的HTML静态文件喽,赶紧尝试一下吧!

更多精彩内容请关注“IT实战联盟”公众号哦~~~



全部评论: 0

    我有话说:

    精品推荐:Javascript 将 HTML 页面生成 PDF 并下载

    最近碰到个需求,需要把当前页面生成 pdf并下载,有需要的可以看看哦~~~

    Beetl 3.2.4.RELEASE,Java 模板引擎 Beetl

    Beetl是一款全功能,高性能优秀的国产模板引擎,可以广泛用于动态页面生成静态页面生成,代码生成,文本转换,脚本语言和规则引擎等,从2011年来,一直维护,并得到国内公司用户的肯定。 Beetl

    使用mybatis-generator自动生成代码(附GitHub下载地址)

    大家都知道Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,并且手动书写很容易出错,那么今天来介绍一下使用Mybatis-Generator来帮我们自动

    「轻阅读」聊一聊6种常用的架构设计模式(上)

      许多现代应用都需要在企业级规模上进行构建,有时甚至需要在互联网规模上进行构建。这些应用都需要满足可扩展性、可用性、安全性、可靠性和弹性需求。 在本文中,我将谈论一些设计模式,这些模式

    移动Web实战篇-使用CSS Sprites减少你的页面http请求

    用户新打开一个网页80%的时间耗费在加载网页内容方面。很多炫酷的网页往往通过图片来展现给用户的,那么页面每加载一张图片就是一个http请求,如果图片过多会严重影响图片渲染速度。

    HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末有源码)

    最近温习一下HTML5+CSS3的一些特性,准备找个高仿的目标,最后选择了某宝粉丝福利页面

    Node实战篇:使用joi来验证数据模型 (十)

    Joi 是 hapijs 自带的数据校验模块,他已经高度封装常用的校验功能,本文就是介绍如何优雅地使用 joi 对数据进行校验......

    SQL 模板神器

    SqlTemplate - MyBatis SqlTemplate - MyBatis 是sql模板引擎,主要解决动态拼接sql字符串 。原理是比较简单,把模板内容构建成完成的xml,这样

    有趣的404页面设计鉴赏

    经过设计后,这个提示页面会更友好些,下面来欣赏一波404页面的设计。

    Poppler 21.01.0 发布,PDF 生成工具

    Poppler 21.01.0 发布了。 Poppler 是从 Xpdf 3.0 代码库派生而来的 PDF 生成工具包。Poppler 使用了各种 PDF 类库(Evince,Okular

    「开源资讯」JPress v3.2.1 发布,新增模板预览功能

    JPress 是一个使用 Java 开发的类似 WordPress 的产品,具有完善的模板和插件功能,并在此基础上新增了在线商城、会员中心以及和微信深度整合的功能。

    微信小程序微商城(九):微信授权并实现个人中心页面页面

    实现微商城的微信授权并获取用户信息和个人中心页面布局

    Node实战篇:Express--jade模板引擎(七)

    Jade(Pug) — Node Template Engine,一个高性能的模板引擎,专为 Node 而做......

    「开源资讯」陌陌安全团队开源Java静态代码审计插件

    陌陌安全本次开源的Java静态代码安全审计插件,侧重于在编码过程中发现项目潜在的安全风险,并提供一键修复能力。 此插件作为Java项目静态代码安全审计工具,侧重于在编码过程中发现项目潜在的安全风险

    精品推荐:微服务架构下静态数据通用缓存机制

    在分布式系统中,特别是最近很火的微服务架构下,有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案,这篇文章将结合一些实际的研发经验,尝试理清其中存在的关键问题以及探寻通用的解决之道。

    Node模块之Events模块(五)

    Node模块之Events模块(五)

    微信小程序实战篇:小程序之页面数据传递

    我们在写小程序的时候经常会遇到子页面向主页面回传数据或者普通页面跳转到tabBar 页面携带数......

    Node模块(四)

    模块化分工、各司其职