1.把包lib/freemarker.jar拷贝到项目中
2.  在WEB-INF下新建文件夹templates  在templates下新建test.ftl文件
内容为:
<html>

<head>      <title>Hello Word</title>     </head>

<body>

<h3>${message},${name}</h3>

</body>

</html>

3.    新建Servlet,内容如下:

package com.njy.freemarker.servlet;

import java.io.IOException;
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.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class HelloFreeMarker extends HttpServlet {

public HelloFreeMarker() {
  super();
 }

//负责管理FreeMarker模板的Configuration实例
 private Configuration cfg = null;
  
 public void init() throws ServletException {
  //创建一个FreeMarker实例
  cfg = new Configuration();
  //指定FreeMarker模板文件的位置
  cfg.setServletContextForTemplateLoading(getServletContext(),"/WEB-INF/templates");
 }
 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
  doPost(request, response);
 }

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //建立数据模型
  Map root = new HashMap();
  root.put("message", "hello world");
  root.put("name", "聂靖宇");
  root.put("personList", list);
  
  //获取模板文件
  Template t = cfg.getTemplate("test.ftl");
  
  //开始准备生成输出
  //- 使用模板文件的Charset作为本页面的charset
  //- 使用text/html MIME-type
  response.setContentType("text/html; charset=" + t.getEncoding());
  Writer out = response.getWriter();
  //合并数据模型和模板,并将结果输出到out中
  try {
   t.process(root, out); // 往模板里写数据
  } catch (TemplateException e) {
   e.printStackTrace();
  }
 }

public void destroy() {
  super.destroy(); 
 }
}
4web.xml中配置servlet

<servlet>
    <servlet-name>HelloFreeMarker</servlet-name>
    <servlet-class>com.njy.freemarker.servlet.HelloFreeMarker</servlet-class>
  </servlet>

<servlet-mapping>
    <servlet-name>HelloFreeMarker</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

5.    运行http://localhost:8080/freemarkerTest/hello,页面效果如下如所示:

hello world,聂靖宇

其实就是ftl页面只是一个试卷,而其支持的servlet其实唯一的作用就是答题。

FreeMarker的实例通俗理解的更多相关文章

  1. Effective Java通俗理解(持续更新)

    这篇博客是Java经典书籍<Effective Java(第二版)>的读书笔记,此书共有78条关于编写高质量Java代码的建议,我会试着逐一对其进行更为通俗易懂地讲解,故此篇博客的更新大约 ...

  2. Effective Java通俗理解(下)

    Effective Java通俗理解(上) 第31条:用实例域代替序数 枚举类型有一个ordinal方法,它范围该常量的序数从0开始,不建议使用这个方法,因为这不能很好地对枚举进行维护,正确应该是利用 ...

  3. Effective Java通俗理解(上)

    这篇博客是Java经典书籍<Effective Java(第二版)>的读书笔记,此书共有78条关于编写高质量Java代码的建议,我会试着逐一对其进行更为通俗易懂地讲解,故此篇博客的更新大约 ...

  4. 关于MQ 消息队列的通俗理解和 rabbitMQ 使用

    消息队列,一听很高大上,现在很多分布式系统都在用这个消息中间件 网上一搜, 说的都是些原理. 说下我的通俗理解, 你网上买了, 快递员给你投递, 会出现什么问题呢? 1  你不定时在家, 快递员 来了 ...

  5. 通俗理解Android事件分发与消费机制

    深入:Android Touch事件传递机制全面解析(从WMS到View树) 通俗理解Android事件分发与消费机制 说起Android滑动冲突,是个很常见的场景,比如SliddingMenu与Li ...

  6. servlet的一个web容器中有且只有一个servlet实例或有多个实例的理解1

    servlet的一个web容器中有且只有一个servlet实例或有多个实例的理解 (2013-06-19 19:30:40) 转载▼     servlet的非线程安全,action的线程安全 对提交 ...

  7. freemarker入门实例

    freemarker入门实例 1.设计思路 (1)新建Maven Project (2)生成freemarker模板 (3)写freemarker页面ftl文件 (4)写测试文件 2.新建Maven ...

  8. 关于MySQL中的自联结的通俗理解

    关于MySQL中的自联结的通俗理解 前言:最近在通过SQL必知必会这本书学习MySQL的基本使用,在学习中也或多或少遇到了点问题,我也正好分享给大家,我的这篇博客用到的所有表格的代码都是来自SQL必知 ...

  9. OSI七层模式简单通俗理解

    OSI七层模式简单通俗理解 这个模型学了好多次,总是记不住.今天又看了一遍,发现用历史推演的角度去看问题会更有逻辑,更好记.本文不一定严谨,可能有错漏,主要是抛砖引玉,帮助记性不好的人.总体来说,OS ...

随机推荐

  1. php-fpm.conf 配置文件详解

    php-fpm.conf  配置文件详解 [global] pid = run/php-fpm.pid error_log = log/php-fpm.log log_level = notice # ...

  2. FPGA与嵌入式一点见解

    FPGA:即现场可编程门阵列,它是在PAL.GAL.CPLD等可编程器件的基础上进一步发展的产物.它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可 ...

  3. 有趣的java小项目------猜拳游戏

    package com.aaa; //总结:猜拳游戏主要掌握3个方面:1.人出的动作是从键盘输入的(System.in)2.电脑是随机出的(Random随机数)3.双方都要出(条件判断) import ...

  4. java 最差实践

    HashMap size 陷阱: 错误写法: Map map = new HashMap(collection.size()); for (Object o : collection) { map.p ...

  5. Metasploit自动化脚本Ezsploit

    打开文件夹并赋予权限 ┌─[root@sch01ar]─[~] └──╼ #cd /sch01ar/ezsploit/ && ls ezsploit.sh README.md ┌─[r ...

  6. python's ninth day for me

    函数 函数的定义与调用: #def  关键字  定义一个函数. # my_len  函数名, 函数名的书写规则与变量的命名一致. # def  与函数名中间一个空格. # 函数名() :  加上冒号. ...

  7. Django界面不能添加中文解决办法

    Django项目部署好后,界面添加中文会报错,解决办法: 创建数据库时要指定编码格式: CREATE DATABASE blog CHARACTER SET utf8; 如果已经创建完毕则修改: al ...

  8. 一.lock的使用

    使用ReentrantLock类 ReentrantLock类在扩展功能上更加强大,比如嗅探锁定,多路分支通知.而且在使用上也比synchronized更加灵活 调用ReentrantLock对象的l ...

  9. 第一次调用Web service响应速度慢的解决办法

    Env: Client: WinForm(Net Framework 2.0) Server:Web Service(Net Framework 4.0) Problem: Client use pr ...

  10. mysql 存储过程 编写注意事项

    mysql的存储过程有很多需要注意的地方,一不留神就会出错,可能调试了老半天才发现原因 1  没有return 语句 可以采用leave代替,返回直接使用select语句 比如select 1: 2. ...