1,首先:导入FreeMarker的Jar文件

2,写一个JavaBean用于封装数据

package freemarker;

public class UserInfo {

private String uname=null;

private int uage = 0;

public String getUname() {

return uname;

}

public void setUname(String uname) {

this.uname = uname;

}

public int getUage() {

return uage;

}

public void setUage(int uage) {

this.uage = uage;

}

}

3,写一个测试用的Test

package freemarker;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

import java.io.Writer;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import freemarker.template.Configuration;

import freemarker.template.Template;

public class FreeMarkerTest {

private Configuration cfg = null;

public Configuration getConf(){

return cfg;

}

public void init() throws Exception {

cfg = new Configuration();

cfg.setDirectoryForTemplateLoading(new File("bin/freemarker"));//模板文件所在的位置

}

public static void main(String[] args) throws Exception {

FreeMarkerTest obj = new FreeMarkerTest();

obj.init();

Map root = new HashMap();

UserInfo u = new UserInfo();

u.setUname("熊师虎");

u.setUage(100);

List strList = new ArrayList();

strList.add("aa");

strList.add("bb");

strList.add("cc");

strList.add("dd");

root.put("strlist", strList);

root.put("u", "u");//放入用户的信息,在模板中可以取到用户的信息

root.put("htag", "<h1>我是一级标题</h1>");

Template t = obj.getConf().getTemplate("Test.ftl");

//在WebRoot目录下构建一个test1.html

Writer out = new OutputStreamWriter(new FileOutputStream("WebRoot/eg.html"),"GBK");

t.process(root, out);//开始转化处理

System.out.println("Successfull.....");

}

}

4,写一个Servlet

package control;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.Writer;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import freemarker.UserInfo;

import freemarker.template.Configuration;

import freemarker.template.Template;

import freemarker.template.TemplateException;

public class FreeMarkerServletextends HttpServlet {

public FreeMarkerServlet() {

super();

}

@Override

public void destroy() {

super.destroy();

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Configuration cfg=new Configuration();

//String path=this.getServletContext().getRealPath("bin/freemarker");

//cfg.setDirectoryForTemplateLoading(new File(path));

cfg.setServletContextForTemplateLoading(this.getServletContext(), "bin/freemarker");

Template tp=cfg.getTemplate("test.ftl");

//因为这个是一个Servlet,所以要用这个,并且由于在Content-Type中配置的字符集都是UTF-8,所以在此处要也设置成UTF-8

Writer out=new OutputStreamWriter(new FileOutputStream(this.getServletContext().getRealPath(".")+"/eg.html"),"utf-8");   //注意的是这里的字符集定要和自己配置的字符集是相同的,否则将出现乱码。并且注意OutputStreamWriter转为Writer的方法。

//PrintWriter out=new PrintWriter(new FileOutputStream(new File(this.getServletContext().getRealPath(".")+"/eg.html")));如果为servelet则response.getOutputStream()

Map root = new HashMap();

UserInfo u=new UserInfo();

u.setUname("熊师虎");

u.setUage(100);

root.put("u", u);//放入用户的信息,在模板中可以取到用户的信息

List strlist=new ArrayList();

strlist.add("aa");

strlist.add("bb");

strlist.add("cc");

strlist.add("dd");

root.put("strlist", strlist);

root.put("htag", "<h1>我是一级标题</h1>");

try {

tp.process(root, out);

} catch (TemplateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("Successfull................");

out.flush();

out.close();

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

5、配置servlet的url-pattern为:FreeMarkerServlet

6、运行FreeMarkerTest或访问FreeMarkerServlet,用以生成e.html

7、访问e.html,即在浏览器中输入:http://localhost:8080/freemarker/eg.html

一个简单的FreeMarker案例相关推荐

  1. 4、python简单线性回归代码案例(完整)_python 实现一个简单的线性回归案例

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @File : 自实现一个线性回归.py # @Author: 赵路仓 # @Date : 2020/4 ...

  2. 如何用DAX实现查看每个月中不同类别排名前一位,以及一个简单的svg案例

    现在给大家带来的是如何用DAX实现查看每个月中不同类别的排名前一位,最终完成效果如下!!! 首先我们需要两张简单的表 基数表 和类别表 当我们创建好表之后,我们再创建一个表格,然后我们将类别表里的列值 ...

  3. MySQL导入mdx_一个简单的MDX案例及说明 (转)

    本文以一个简单的MDX查询开始,分别解析这个查询的各个部分,以此来学习MDX语法.但是在这之前首先要介绍使用的案例多维数据集. 一.案例所使用的多维数据集 维度: 图一:维度信息 度量值: 图二:度量 ...

  4. 一个简单的samba案例(测试与思考)

    工作繁忙一直没能把测试的东西发上来.上次把服务都配置完了.今天开始测试      首先小王建立一个快捷方式 目标指向 \\192.168.0.108 分发到每个用户的桌面.以后公司每个员工直接双击文件 ...

  5. 一个简单的机器学习案例:10分钟,训练一个“剪刀石头布”识别器

    一.介绍 这是一个利用tensorflow.js库的网页端的网络. 在没有使用TensorFlow.js库之前,想要实现这个功能,需要花很长时间来完成算法编写,包括数据图像的采集.模型的训练.参数的调 ...

  6. 前端使用bootstrap实现一个简单的小案例,重点是关注响应式布局

    1.案例的效果展示 我们使用的是响应式布局,所谓的响应式布局就是可以使得同一套页面可以兼容不同分辨率的设备.可以看到苹果的官网当你将浏览器的串口放的很小的时候网站的布局也会随这页面大小发生变化,当我们 ...

  7. 第一百三十七期:一个简单的小案例带你理解MySQL中的事务

    事务又叫做TCL,全称是transaction control language,意思是事务控制语言. 作者:Java的架构师技术栈 事务又叫做TCL,全称是transaction control l ...

  8. 菜鸟学SQL注入 --- 一个简单的教学案例

    ***的SQL***演示: 指的是***或恶意用户在应用程序不知道的情况下通过应用程序来对SQL 数据库执行恶意的代码,一旦***成功,可以做任何事情,如查看数据表中的信息,删除数据表的数据,到获得网 ...

  9. 一个简单的VC++案例:显示年月日

    //4种显示方法额 #include <iostream> #include <ctime> using namespace std; class Date { public: ...

最新文章

  1. JStorm/Storm源码解读(二)--启动篇
  2. canvas粒子动画
  3. 协议形式化安全分析 Scyther 并非所有协议可以照抄就搬
  4. Android 系统(164)---手机收到8bit编码的短信无法显示
  5. 快速接入阿里云应用配置管理工具 轻松开启企业效率新时代
  6. Linux---生产者与消费者模型
  7. linux c代码调试工具,在 Linux 中调试 C 程序的福音——gdb
  8. 数据库设计_SQL数据库设计(数据建模)
  9. 为什么黑客都用python-为什么黑客需要学习C++和Python?
  10. arm的一些概念(ARM9、Cortex的区别)
  11. python:talib 计算 SAR 用 pro_api
  12. 【物联网毕设基础】单片机:RS485 通信与 Modbus 协议
  13. C语言中指向函数的指针(我见过的讲的最清晰的文章)
  14. HtmlEncode是做什么的?
  15. 成都旅游住宿购物交通攻略617
  16. 部署Kubernetes(k8s)时,为什么要关闭swap、selinux、firewall 防火墙?
  17. 小红书爆款笔记运营攻略
  18. 将阿拉伯数字转换为中文数字: 123 -> 一二三
  19. HTML——实现界面(文本,横线,平方,化学方程式)
  20. 【C语言】qsort函数

热门文章

  1. IDEA 设置泛型检查
  2. VTK:参数化超环形用法实战
  3. JavaScript实现多项式函数在某个点的评估算法(附完整源码)
  4. OpenCASCADE:Modeling Algorithms模块标准拓扑对象
  5. wxWidgets:wxDataViewCtrl类用法
  6. boost::process::system相关的测试程序
  7. boost::multiprecision模块tommath相关的测试程序
  8. boost::intrusive::list_member_hook用法的测试程序
  9. boost::astar_search用法的测试程序
  10. boost::callable_traits的is_lvalue_reference_member的测试程序