`

FreeMarker简单应用

阅读更多
第一章 FreeMarker简单应用
一、简单实例
1、创建Web application:freeMarker,导入reemarker-2.3.16\lib\freemarker.jar
2、创建Servlet:ActionServlet.java
package com.zh.servlet;

import …………;

public class ActionServlet extends HttpServlet {
    //声明Configuration对象
private Configuration cfg;
       //在实例化Servlet时初始化Configuration
public void init() throws ServletException {
// Initialize the FreeMarker configuration;
         // 初始化FreeMarker的Configuration
        // - 创建Configuration实例
cfg = new Configuration();
// - 设置模板文件的目录路径
cfg.setServletContextForTemplateLoading
                                        (getServletContext(), null); }

protected void doPost(HttpServletRequest request,
                       HttpServletResponse response)
                       throws ServletException, IOException {
//Build a data-model:创建数据模型
Map root = new HashMap();
root.put("message", "hello world!");

//Get the templat object:取得一个模板
Template t = cfg.getTemplate("free.html");

//Get a out flow:取得输出流
Writer out = response.getWriter();

//Merge the data-model and Template
                  //:合并:数据模型+模板=输出
try {
t.process(root, out);
                           //t为模板,加入数据模型root
} catch (TemplateException e) {
    throw new ServletException(
                         "Error while processing template", e);
}
}

protected void doGet(HttpServletRequest request,
                              HttpServletResponse response)
                             throws ServletException, IOException {
this.doPost(request, response);
}
}
3、创建模板:free.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${message}
</body>
</html>
这样就正确的跳转到free.html页面并输出了:hello world!
简单总结:
1 初始化Configuration:Configuration cfg = new Configuration();
2 设置模板路径:此种方式是设置为应用程序根目录下:
cfg.setServletContextForTemplateLoading(getServletContext(), null);
可更改null为“xxDirectory/xxDirectory”某个目录下。
3 创建数据模型:Map root = new HashMap();
   添加数据:root.put("message", "hello world!");
4 取得模板:Template t = cfg.getTemplate("free.html");
直接从cfg.set……设置的目录查找此“模板”,如果参数2为null,直接从根目录下查找,当然模板也可以写为:Template t = cfg.getTemplate("xxDirectory/free.html")
5 取得输出流:Write out = response.getWrite();
6 合并数据模型+模板:t.process(root, out);
此方法直接会使浏览器跳转到指定“模板”页面,而不是forward/sendRedirect等方式。

二、实例应用2
在前面实例了的基础上,进一步的操作。
1、创建Page.java,它对Template、Map进一步封装
package com.zh.servlet;
import java.util.HashMap;
import java.util.Map;

public class Page {
private String template; //模板路径及文件
private String forward;  //跳转页面
private Map root = new HashMap(); //数据模型

//取得模板
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
            //设置模板,跳转页面为空
forward = null;
this.template = template;
}
//向数据模型添加数据
public void put(String name, Object value) {
root.put(name, value);
}

public void put(String name, int value) {
        root.put(name, new Integer(value));
    }
   
    public void put(String name, double value) {
        root.put(name, new Double(value));
    }

    public void put(String name, boolean value) {
        root.put(name, new Boolean(value));
    }
    //取得跳转页面
public String getForward() {
return forward;
}
public void setForward(String forward) {//设置跳转页面
this.template = null;
this.forward = forward;
}
public Map getRoot() {//取得模型
return root;
}
public void setRoot(Map root) {
this.root = root;
}

}

2、创建src/com/zh/config/action.properties
#class name + method name
#请求路径/类名/方法名.page
#Test
test.driver = com.zh.action.Test
test.mm = mm
3、修改ActionServlet.java的doGet()方法
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

String action = request.getServletPath();//取得请求路径
String action1 = null; //类名
String action2 = null; //方法名
//从请求路径路径中取出类名
if (action == null) action = "index";
        if (action.startsWith("/")) action = action.substring(1);
        if (action.lastIndexOf(".") != -1) {
            action = action.substring(0, action.lastIndexOf("."));
        }
        if (action.indexOf("/") != -1) {
        String[] str = action.split("/");
        action1 = str[0]; //取得类名       
        action2 = str[1]; //取得方法名
        }

        Properties pro = new Properties();
        pro.load(Thread.currentThread().getContextClassLoader()
             .getResourceAsStream("com/zh/config/action.properties"));
        String driver = pro.getProperty(action1 + ".driver");
        String me = pro.getProperty(action1 + "." + action2);
       
        //通过反射调用方法,传递参数request/page
        Page page = new Page();
        if(!(driver == null && me == null)) {
        try {
   Class<?> c = Class.forName(driver);
   Method mehtod = c.getMethod(me,
                 new Class[]{HttpServletRequest.class, Page.class});
   mehtod.invoke(c.newInstance(),
                       new Object[] {request, page});
} catch (Exception e) {
e.printStackTrace();
}
       
        }
               
        if(page != null && page.getTemplate() != null) {
        Template t = cfg.getTemplate(page.getTemplate());
       
// //Get a out flow
        Writer out = response.getWriter();

        //Merge the data-model and Template

try {
t.process(page.getRoot(), out); } catch (TemplateException e) {
    throw new ServletException("Error while processing ", e);
}

        } else {
        request.getRequestDispatcher(page.getForward())
                                     .forward(request, response);
        }
}
4、编写action,方法的声明必须固定:例:com/zh/action/Test.java
public class Test {
public void mm(HttpServletRequest request, Page page) {
page.put("message", "hello world!");
List list = new ArrayList();
list.add("01aaaaa");
list.add("02aaaaa");
list.add("03aaaaa");    //添加
page.put("alist", list);  //添加List
page.setTemplate("WEB-INF/free.html");//设置模板
}
}
自定义的类与方法必须在action.properties中配置,同上。
5、在请求地址中必须写成:类名/方法名.page的格式。如下
<a href="test\mm.page">跳转到模板</a>
6、模板页面的存放位置必须page.setTemplate("WEB-INF/free.html")相一致
<body>
${message}<br>
<#list alist as a>
${a}<br>
</#list>
</body>
输出结果:
hello world!
01aaaaa
02aaaaa
03aaaaa

分享到:
评论

相关推荐

    freemarker把jsp静态化简单应用

    freeMarker的简单应用,适合入门人了解,导入myeclipse发布到tomact即可应用

    FreeMarker 简单的入门小小小小例子

    俗话说万事开头难,这句话对于我们程序员来说非常的适用,刚接触一门新的东西,...FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序

    freemarker简单示例

     FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件  FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境  FreeMarker更适合作为Model2框架(如Struts...

    freemarker的优缺点及简单实例

    freemarker的应用 博文链接:https://hell-liul.iteye.com/blog/487004

    Velocity 和 FreeMarker区别

    Velocity 和 FreeMarker区别 对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的

    freemarker与struts2整合的实例应用

    适合初学freemarker的人参考的一个简单登录代码。主要是实现freemarker与struts2的整合

    FreeMarker_Manual_zh_CN.pdf一个很好用的pdf手册

    本人工作时项目需要用到freemarker,所有公司给了我这个手册让我学习,这本手册我觉得很好,只需要你花一点时间去看,那么你就能掌握freemarker的应用,比较简单易懂。加油吧!

    freemarker生成复杂word

    Word从2003开始支持XML格式,用XML+Freemarder还做就很简单了,大致的思路是先用office2003或者2007编辑好 word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。...

    Java项目:crm客户关系管理系统(java+SpringBoot+ECharts+Freemarker+Layui+mave

    技术选型方面,该项目是一个`SpringBoot`的单体应用,项目使用`SpringBoot2`框架快速开发,数据访问层使用`Mybatis`框架,页面渲染引擎使用`Freemarker`,页面样式使用`Layui`,日志方面选用的是`logback`,统计报表...

    freemarker-pdf-editor:Webapp 编辑 Freemarker 模板,快速转换并预览 HTML 和 PDF 格式的结果

    一个简单的 web 应用程序,用于编辑 FreeMarker FTL 模板,快速转换并预览 HTML 和 PDF 格式的结果。 用 Spring 和 AngularJS 编写。 此工具旨在适应编写在您的应用程序中呈现为 HTML 或 PDF 的 FTL 模板的工作流程...

    FreeMarker-代码生成器.zip

    一套基于FreeMarker技术实现的Java快速开发的代码生成器。 FreeMarker主要两大作用,一种是动态内容静态化。一种是代码生成。...本例的应用是后者,目的是为了节省业务开发时间,对简单的业务代码快速实现。

    Struts+FreeMarker+MySql

    这两天公司叫我做个简单的关于Struts的应用项目,表现层要求用FreeMarker,听说现在提倡运用模 &lt;br&gt;板,JSP将要被这些东西取代,代码中有很多可学的地方,大家下来看看吧,给个评价!!

    simple-i18n-plugin:一个简单的插件,用于使用Freemarker生成html页面和模板的本地化版本

    简单的i18n插件一个简单的插件,用于使用Freemarker生成html页面和模板的本地化版本要使用它,请在本地构建它,然后将其添加到您的应用程序pom中: &lt; plugin&gt; &lt; groupId&gt;...${basedir}/src/main/webapp/pages/&lt;...

    JessMA Java Web 应用开发框架 (v3.2.2-20130815).pdf

    5) 优秀的使用体验:JessMA的设计目标之一是提供良好的开发体验,尽量减少应用程序开发者的工作,API的设计力求简单、完整、明确。同时,JessMA为应用开发提供了大量Util工具,用来处理应用程序开发过程中通常会遇到...

    feemarker入门实例

    简单的freemarker模板渲染案例,分析数据与模型加载应用

    YMP轻量级Java应用开发框架 v2.0.6

    YMP是一个非常简单、易用的一套轻量级JAVA应用开发框架,设计原则主要侧重于简化工作任务、规范开发流程、提高开发效率,让开发工作像搭积木一样轻松是我们一直不懈努力的目标!主要技术特点:采用组件化、模块化...

    基于Java高仿某在线教育网站完整demo

    代码仅供参考学习! 代码仅供参考学习!...MySQL数据库是应用最广泛的开源数据库,上手简单。 项目目前就用到以上技术,后续不排除会加入其他技术,但为了避免项目臃肿,不会让项目变成一个技术的全家桶。

Global site tag (gtag.js) - Google Analytics