FreeMarker之根据模型生成HTML代码与FreeMarker根据模型生成Java代码,本质上是一样的,关于生成Java代码可以参考我的这篇文章:FreeMarker之根据模板生成Java代码

一、导入依赖

<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.test.freemarker</groupId>
<artifactId>testFreemarker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<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>testFreemarker</finalName>
</build> </project>

二、编写模板

在src/main/java下新建templates包,并在该包下新建user.ftl,内容如下所示:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户信息</title>
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet"
href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" />
</head>
<body style="font-family:'Courier New'">
<h3 class="text-center">这是用户${username}的信息页!</h3>
<div class="col-md-6 column">
<table class="table table-bordered">
<tr>
<th>用户名</th>
<th>密码</th>
<th>年龄</th>
<th>地址</th>
</tr>
<tr>
<td>${username}</td>
<td>${password}</td>
<td>${age}</td>
<td>${address}</td>
</tr>
</table>
</div>
</body>
</html>

三、编写Java代码

在src/main/java新增testFreeMarker包,并在该包下创建该两个Java文件

User.java

package testFreemarker;

public class User {

    private String username;

    private String password;

    private Integer age;

    private String address;

    public User() {
super();
// TODO Auto-generated constructor stub
} public User(String username, String password, Integer age, String address) {
super();
this.username = username;
this.password = password;
this.age = age;
this.address = address;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} }

CreateHtmlByFreemarker.java

package testFreemarker;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException; public class CreateHtmlByFreemarker {
private static final String TEMPLATE_PATH = "src/main/java/templates";
private static final String CLASS_PATH = "src/main/webapp/product"; public static void main(String[] args) {
// step1 创建freeMarker配置实例
Configuration configuration = new Configuration();
Writer out = null;
try {
// step2 获取模版路径
configuration.setDirectoryForTemplateLoading(new File(TEMPLATE_PATH));
// step3 创建数据模型
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("username", "zhangsan");
dataMap.put("password", "123456");
dataMap.put("age", "18");
dataMap.put("address", "test");
// step4 加载模版文件
Template template = configuration.getTemplate("user.ftl");
// step5 生成数据
File docFile = new File(CLASS_PATH + "\\" + "user.html");
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
// step6 输出文件
template.process(dataMap, out);
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^user.ftl 文件创建成功 !");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != out) {
out.flush();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
} }

四、运行CreateHtmlByFreemarker.java

一般运行不报错并输出user.ftl创建成功的输出语句就表示成功,这时只需刷新下,就可以在对应的目录下看到通过模板生成的html文件。

FreeMarker之根据模型生成HTML代码的更多相关文章

  1. 根据powerdesigner的OO模型生成C#代码

    2007-05-15 08:34:11|  分类: 转贴部分 |  标签:学习帖子 |字号 订阅 习惯了用Powerdesigner设计数据库模型,XDE设计类图.因此我一般的设计方法是用PD做分析模 ...

  2. FreeMarker之根据模板生成Java代码

    FreeMarker根据模板生成Java代码,光这句话,大家想必也知道它的应用了,比如流行的DRY原则,该原则的意思,可简单概述为"不要写重复的代码". 比如Java中三层架构,数 ...

  3. SpringBoot获取Freemarker模板引擎,生成HTML代码

    今天用Ajax异步添加评论,加载Freemarker模板引擎,生成模板模块 1.新建Freemarker模板 <li id="${comment.oId}"> < ...

  4. Ngen生成Native代码实战及优缺点分析

    先科普一下,.Net是一个用于Windows的托管代码模型,用于高效构建具有视觉上引人注目的用户体验的应用程序.但这个模型生成的代码并非可执行代码,而是由.Net公共语言运行库环境执行的IL代码.所以 ...

  5. Rose如何由模型生成代码(正向工程)

    原创 正向工程: 选中要转换的模型. 单击 tools>Java/J2EE > Syntax Check 来检查目标代码是否符合规范,比如命名错误. 察看rose log窗口(下方)察看检 ...

  6. MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码

    前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少代码相似度较高,比如负责实体映射的 EntityConfiguration,负责仓储操作的I ...

  7. Entity Framework 数据库先行、模型先行、代码先行

    数据库先行(Database First):基于已存在的数据库,利用某些工具(如Vs提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件. 模型先 ...

  8. 使用greenDAO生成DAO代码

    研究greenDAO有几天了,刚开始看别人的博客基本都把我带到了沟里,讲gradle把简单的问题搞得非常复杂,而且都是抄来抄去,看来看去也就那么几篇,实在看不下去了,只得硬着头皮自己琢磨,好在终于把这 ...

  9. ASP.NET MVC 5 学习教程:生成的代码详解

    原文 ASP.NET MVC 5 学习教程:生成的代码详解 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

随机推荐

  1. Angular4 step by step.4

    1.官方的模拟远程调用API接口没整出来,干脆自己使用 最新版本 .netcore2.1.0 preview 作为请求地址 2.直接上图懒得沾代码了,等完善后再开放所有源码: 3.使用了Chole.O ...

  2. Centos7 redis 5.0 服务设置、启动、停止、开机启动

    redis 没有配置服务,没有开启动,每次都要手工配置. 解决这个麻烦,我们new一个服务,然后开机启动即可. 1.创建服务(redis.conf 配置文件要注意,经过cp产生了很多个redis.co ...

  3. https如何工作

    一.http 网络协议基于分层架构构建了七层模型,是ISO建立的用于计算机或者通信系统之间的互联的标准体系.下图展示了其中的五层: http被称为超文本传输协议,是互联网上应用最为广泛的一种网络协议, ...

  4. Linux必会必知

    一.前言 Linux作为一个开源系统,被极客极力推崇,作为程序员不来了解一下,那就亏了 Linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次 ...

  5. PHP支持多线程吗?

    https://zhidao.baidu.com/question/2053529640037778107.html

  6. Eclipse常用操作

    一 Eclipse常用快捷键 ctrl+Q:跳到最后一次编辑处. ctrl+F:在当前文件中查找并替换. ctrl+T:查看类的继承关系. alt+左箭头:返回到光标的上一个位置. alt+右箭头:前 ...

  7. 04_ActiveMQ事务与三种签收方式

    [ActiveMQ添加事务] 添加事务主要注意两点: 1.修改Session配置,启用事务 /** * 3.通过Connection对象创建Session会话(上下文环境对象),用于接收消息. * 参 ...

  8. 面向对象之property

    property功能 以调用数据属性的方式(不用加括号)调用方法 方法定义成数据属性(方法本应该是动词) # 定义property之前 class People: def __init__(self, ...

  9. idea 多项目部署JRebel

    碰到个问题,Jrebel热部署Idea,两个项目一个可以热部署,一个不行.刚开始发现是其中一个项目没有添加JRebel,于是加上 然而发现还是不行,继续google, 在一篇文章里面发现如下的内容: ...

  10. delphi之socket通讯

    使用了2个组建: TServerSocket TClientSocket ------------------TServerSocket--------------------------- //开启 ...