freemarker学习例子

freemarker调用模板.ftl文件,生成静态shtml文件
public class ControllerServletS extends HttpServlet {
private Configuration cfg;
public void init() {
          // 初始化FreeMarker配置;
          // - 创建一个配置实例
        cfg = new Configuration();
          // - 设置模板目录.
        cfg.setServletContextForTemplateLoading(
                getServletContext(), "WEB-INF/tmpl");
          // - 设置模板延迟时间,测试环境设置为0,正是环境可提高数值.
        cfg.setTemplateUpdateDelay(0);
          // - 设置错误句柄
        cfg.setTemplateExceptionHandler(
                TemplateExceptionHandler.HTML_DEBUG_HANDLER);
        cfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER);
          // - 设置默认模板编码
        cfg.setDefaultEncoding("gbk");
          // - 设置输出编码
        cfg.setOutputEncoding("gbk");
        cfg.setLocale(Locale.SIMPLIFIED_CHINESE);
    }
Template t = cfg.getTemplate(page.getTemplate());
//此处调模板直接输出到终端显示,不生成静态页面.
//Writer out = resp.getWriter();
//try {
                //t.process(page.getRoot(), out);
         //   } catch (TemplateException e) {
              // throw new ServletException(
                      // "加载FreeMarker模板出错", e);
           // }

此处生成静态页面
try{
Template t=cfg.getTemplate(templateFileName);
File afile=new File(htmlFilePath+htmlFileName);
Writer out=new OutputStreamWriter(new FileOutputStream(afile),"GB2312");
StringWriter write=new StringWriter();
write.flush();
t.process(propMap, out);
System.out.println(write.toString());
}catch(TemplateException e){
logger.error("error"+templateFileName,e);
return false;
}catch(IOException e){
logger.error("error"+htmlFileName,e);
return false;
}
}

freemarker实例搭建环境和配置
下面演示一个简单的使用项目过程:
1. 使用myeclipse创建一个web项目testFM
2. 把下载到的jar包(freemarker-2.3.9.jar)放到\WebRoot\WEB-INF\lib目录下。下载地址:http://freemarker.sourceforge.net/freemarkerdownload.html (注:官方网站.org的经常打不开)
3. 在WebRoot下面新建templates文件包,然后在里面新建扩展名为ftl的模板。
a) 创建hello.ftl内容如下:
<html>

<head>

<title>hello!</title>

</head>

<body>

<h1>hello ${user}!</h1>

</body>

</html>

4. 在src目录下创建example包 和Hello.java文件,代码如下:
package example;

import java.io.*;

import java.util.*;


import javax.servlet.ServletException;
  import javax.servlet.http.*;

import freemarker.template.*;

public class Hello extends HttpServlet{
  private Configuration cfg;

public void init()

{

   //初始化FreeMarker配置

        //创建一个Configuration实例

        cfg = new Configuration();

        //设置FreeMarker的模版文件位置

   cfg.setServletContextForTemplateLoading(getServletContext(),"templates");

}

public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
  {

   //建立数据模型

   Map root = new HashMap();

   //放入对应数据key value

   root.put("user","zdz");

   //取得模版文件

   Template t =cfg.getTemplate("hello.ftl");

   //开始准备生成输出

        //使用模版文件的charset作为本页面的charset

        //使用text/html MIME-type

        response.setContentType("text/html; charset=" + t.getEncoding());

   PrintWriter out = response.getWriter();

   //合并数据模型和模版,并将结果输出到out中

   try

   {

    t.process(root,out);// 用模板来开发servlet可以只在代码里面加入动态的数据

   }

   catch(TemplateException e)

   {

    throw new ServletException("处理Template模版中出现错误", e);

   }

}

}
5.配置web.xml 代码如下:

<?xml version="1.0" encoding="UTF-8"?>
  <web-app version="2.4"

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>

    <servlet-name>Hello</servlet-name>

    <servlet-class>example.Hello</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>Hello</servlet-name>

    <url-pattern>*.do</url-pattern>

</servlet-mapping>

<welcome-file-list>

      <welcome-file>index.html</welcome-file>

</welcome-file-list>

</web-app>
6.在WebRoot下面新建引导页面index.html,代码如下:

<html>
  <head>

<title>Hello FreeMarker Example</title>

<meta http-equiv="Content-type" content="text/html; charset=utf-8">

</head>

<body>

点击下面链接看看效果:

<hr>

<a href="hello.do">调用Hello模板</a>

</body>

</html>
7.把testFM项目部署到tomcate并启动服务。

8.打开浏览器,输入地址:http://localhost:8080/testFM/
9.点击调用Hello模板 链接,如果出现hello zdz!则说明模板调用成功了!

你可能感兴趣的:(html,freemarker,Web,servlet,MyEclipse)