`
prec
  • 浏览: 65406 次
  • 性别: Icon_minigender_1
  • 来自: 互联网
最近访客 更多访客>>
社区版块
存档分类
最新评论

对Freemarker的简单封装

阅读更多
/** *//**
 * 
 * <p>
 * 模板预处理类,主要在输出到模板之前做一些自定义操作
 * </p>
 * 
 * <p>
 * 以下为FreemarkerServlet的具体执行顺序
 * </p>
 * <ul>
 * <li type="i">init()</li>
 * <li type="i"> | -- createConfiguration()</li>
 * <li type="i"> | -- createObjectWrapper()</li>
 * <li></li>
 * <li type="i"><font color="gray">process(request,response)</font></li>
 * <li type="i"> | -- preprocessRequest(request, response)</li>
 * <li type="i"> | -- requestUrlToTemplatePath(request)</li>
 * <li type="i"> | -- deduceLocale(path, request, response))</li>
 * <li type="i"> | -- createModel(wrapper, servletContext, request, response)</li>
 * <li type="i"> | -- | -- initializeServletContext(request, response)</li>
 * <li type="i"> | -- | -- initializeSession(request, response)</li>
 * <li type="i"> | -- | -- createRequestParametersHashModel(request)</li>
 * <li type="i"> | -- preTemplateProcess(request, response, template, model)</li>
 * <li type="i"> | -- <font color="gray">template.process(model,
 * response.getWriter())</font></li>
 * <li type="i"> | -- postTemplateProcess(request, response, template, model)</li>
 * </ul>
 * 
 * <p>
 * 请按照对应的执行顺序进行适当覆盖
 * </p>
 * <p>
 * 注:灰色部分为重要的中间环节, 不是可覆盖的方法
 * 
 * </p>
 
*/

public class BaseServlet extends FreemarkerServlet ...{

    
private static final long serialVersionUID = -7091792853096097981L;

    
/**//*
     * <p>覆盖构建配置过程, 这里可以自定义配置</p>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#createConfiguration()
     
*/

    @Override
    
protected Configuration createConfiguration() ...{
        
// 取得配置
        Configuration config = super.createConfiguration();
        
// 自动引入core模板, 此模板封装了大部分公共宏
        config.addAutoInclude("/template/common/core.ftl");
        
return config;
    }


    
/**//*
     * <p>覆盖创建模型方法, 这里可以对模型生成过程进行定制处理</p>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#createModel(freemarker.template.ObjectWrapper,
     *      javax.servlet.ServletContext, javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse)
     
*/

    @Override
    
protected TemplateModel createModel(ObjectWrapper wrapper,
            ServletContext servletContext, HttpServletRequest request,
            HttpServletResponse response) 
throws TemplateModelException ...{
        
// TODO: 自定义修改模型
        return super.createModel(wrapper, servletContext, request, response);
    }


    
/**//*
     * <p>覆盖创建对象树方法, 主要进行模板对象树的内容</p>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#createObjectWrapper()
     
*/

    @Override
    
protected ObjectWrapper createObjectWrapper() ...{
        
// TODO Auto-generated method stub
        return super.createObjectWrapper();
    }


    
/**//*
     * <p>覆盖构建参数Hash列表方法, 这里可以自定义请求参数列表</p>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#createRequestParametersHashModel(javax.servlet.http.HttpServletRequest)
     
*/

    @Override
    
protected HttpRequestParametersHashModel createRequestParametersHashModel(
            HttpServletRequest request) 
...{

        
return super.createRequestParametersHashModel(request);
    }


    
/**//*
     * <p>覆盖deduceLocale方法, 主要可以自定义一些本地化的内容</p>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#deduceLocale(java.lang.String,
     *      javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse)
     
*/

    @Override
    
protected Locale deduceLocale(String str, HttpServletRequest request,
            HttpServletResponse response) 
...{
        
// TODO Auto-generated method stub
        return super.deduceLocale(str, request, response);
    }


    
/**//*
     * <p>覆盖Servlet上下文方法, 主要实现自定义上下文</p>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#initializeServletContext(javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse)
     
*/

    @Override
    
protected void initializeServletContext(HttpServletRequest request,
            HttpServletResponse response) 
throws ServletException, IOException ...{
        
super.initializeServletContext(request, response);
    }


    
/**//*
     * <p>覆盖初始化Session方法, 主要定制Session内容</p>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#initializeSession(javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse)
     
*/

    @Override
    
protected void initializeSession(HttpServletRequest request,
            HttpServletResponse response) 
throws ServletException, IOException ...{
        
super.initializeSession(request, response);
    }


    
/**//*
     * <p>覆盖输出模板方法, 这是整个周期的最后一步, 主要做一些后期处理和收尾工作</p>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#postTemplateProcess(javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse,
     *      freemarker.template.Template, freemarker.template.TemplateModel)
     
*/

    @Override
    
protected void postTemplateProcess(HttpServletRequest request,
            HttpServletResponse response, Template template, TemplateModel data)
            
throws ServletException, IOException ...{
        
super.postTemplateProcess(request, response, template, data);
    }


    
/**//*
     * <p>覆盖请求处理方法, 主要实现在请求被处理前的自定义操作</p>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#preprocessRequest(javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse)
     
*/

    @Override
    
protected boolean preprocessRequest(HttpServletRequest request,
            HttpServletResponse response) 
throws ServletException, IOException ...{
        
// TODO: 实现自定义Request处理
        return super.preprocessRequest(request, response);
    }


    
/**//*
     * <p>覆盖模板预处理方法, 主要实现模板处理前的具体自定义操作</p> <p>这里可以加转换和模板方法的处理代码,例如:</p>
     * <code> SimpleHash sh = (SimpleHash) data; sh.put("upperCase", new
     * UpperCaseTransform()); </code> <p>或</p> <code> SimpleHash sh =
     * (SimpleHash) data; sh.put("indexOf", new IndexOfMethod()); </code>
     * 
     * @see freemarker.ext.servlet.FreemarkerServlet#preTemplateProcess(javax.servlet.http.HttpServletRequest,
     *      javax.servlet.http.HttpServletResponse,
     *      freemarker.template.Template, freemarker.template.TemplateModel)
     
*/

    @Override
    
protected boolean preTemplateProcess(HttpServletRequest request,
            HttpServletResponse response, Template template, TemplateModel data)
            
throws ServletException, IOException ...{
        SimpleHash sh 
= (SimpleHash) data;
        
// 装载转换器
        IBuilder tb = new TransformBuilder(sh);
        sh 
= tb.getSimpleHash();
        
// 装载模板方法
        IBuilder mb = new MethodBuilder(sh);
        sh 
= mb.getSimpleHash();
        
// 装载其他上下文
        IBuilder cb = new ContextBuilder(sh, request);
        sh 
= cb.getSimpleHash();
        
return super.preTemplateProcess(request, response, template, sh);
    }


分享到:
评论

相关推荐

    freemarker Demo封装

    Freemarker是一个强大的模板引擎,常用于Java web开发中生成动态HTML页面。在这个"freemarker Demo封装"中,我们将会探讨...通过对这些知识点的学习和实践,开发者能够更好地理解和运用Freemarker这一强大的模板引擎。

    Freemarker 自定义标签 简单案例

    在这个"Freemarker自定义标签简单案例"中,我们将深入探讨如何利用Freemarker进行模板设计,并结合自定义标签来增强模板的功能。 首先,让我们理解Freemarker的基础知识。Freemarker是一个与语言无关的模板引擎,它...

    Freemarker模版公用方法

    使用Freemarker模版生成不同的静态文件,该工具类使用简单,方法说明:包含所需的参数,可以进行二次封装

    freemarker中文文档与包

    6. **自定义指令与宏**: 开发者可以创建自定义指令来扩展Freemarker的功能,例如封装复杂的业务逻辑或重用模板片段。宏类似于函数,可以接收参数并嵌入到其他模板中。 7. **错误处理与调试**: Freemarker提供了详细...

    freemarker概述

    以下是一个简单的FreeMarker模板示例: ```html &lt;title&gt;Welcome! &lt;h1&gt;Welcome ${user}! &lt;p&gt;Our latest product: ${latestProduct.url}"&gt;${latestProduct.name}! ``` 在这个示例中,`${user}`、`${...

    Servlet + Freemarker 入门练习

    Freemarker 模板由简单的文本和控制结构(如条件语句和循环)组成,这些结构与 Java 代码中的数据对象结合,生成最终的输出。在 Web 开发中,Freemarker 通常与 MVC(Model-View-Controller)框架一起使用,其中控制...

    freemarker中文手册.pdf

    - **免费开源**:作为一款开源软件,FreeMarker对所有用户免费开放,并拥有活跃的社区支持。 #### 二、核心优势与特性 ##### 1. 通用目标 - **多用途输出**:FreeMarker能够生成各种文本格式,适应不同的应用场景...

    freemarker教程

    1. 模板语法:Freemarker的模板语言由简单的文本和特殊的指令组成。例如,`${expression}`用于插入变量值,`&lt;#if condition&gt;`和`&lt;#else&gt;`用于条件判断,`&lt;#list items as item&gt;`用于循环遍历。 2. 数据模型:...

    freemarker详解

    它与Java语言紧密结合,但模板设计者无需了解Java代码,只需要编写简单的模板语言(FTL:FreeMarker Template Language)来描述数据如何呈现。本篇文章将深入探讨FreeMarker的核心概念、用法以及常见应用场景。 1. ...

    Freemarker中遍历list集合实例

    一、 Freemarker 中 list 指令简单介绍 要想在 Freemarker 中遍历 List,必须通过使用 list 指令,即 `…&lt;/#list&gt;`。sequence 是集合(collection)的表达式,item 是循环变量的名字,不能是表达式。当在遍历 ...

    Freemarker官方帮助文档

    它是基于模板的,允许开发者使用简单的语法来控制数据如何显示。这份“Freemarker官方帮助文档”提供了全面的指南,帮助用户深入理解和有效地使用这个模板语言。 一、基础概念 1. 模板:Freemarker模板是纯文本文件...

    freemarker入门Demo

    在`Freemarker入门Demo`中,你可以通过创建简单的模板文件,学习如何与后端Java代码交互,传递数据模型,并使用Freemarker的语法来呈现动态内容。通常,一个基本的流程包括:控制器处理请求,准备数据模型,然后使用...

    SSH项目 有Freemarker模版

    最后,Struts2将结果数据封装成模型,并使用Freemarker模板生成响应的视图。这种方式使得开发者可以专注于业务逻辑,而无需关心视图的实现细节。 **Spring框架** 是整个应用的核心,它提供了依赖注入(DI)和面向切...

    freemarker导出word完整案例

    它允许开发者使用简单的模板语言来分离业务逻辑和视图展示,使得页面设计更为灵活。在本案例中,我们将探讨如何使用Freemarker将数据导出为Word文档,实现动态下载。 一、Freemarker基础 1. 模板语法:Freemarker...

    使用freemarker扩展struts标签

    FreeMarker模板可以包含变量、控制结构以及对其他标签的调用。 4. `AmHtml.java`: 自定义标签的Java实现,这个类通常会继承自Struts2的`Tag`或`SimpleTagSupport`类,并覆盖一些方法来处理标签的行为。 5. `说明.txt...

    freemarker 中午手册

    - **数据封装**:Freemarker 并不直接反映 Java 对象,而是通过插件式对象封装器将 Java 对象转换为模板可以理解的形式。 - **抽象接口**:通过提供统一的接口来表示不同类型的对象(如 JavaBean、XML 文档、SQL ...

    FreeMarker_Manual_zh_CN.pdf

    在阅读FreeMarker手册后,用户应该能够利用FreeMarker提供的强大功能和灵活性,编写出简单而实用的模板程序。手册中的示例和说明旨在帮助用户理解FreeMarker的模板语言和API,以便快速上手并有效地使用FreeMarker...

    FreeMarker概述API

    FreeMarker通过`Model`接口表示这些数据,并使用` BeansWrapper`或自定义的`ObjectWrapper`进行封装。 4. **`TemplateDirectiveModel`**:这是FreeMarker中定义自定义指令的接口。如果你需要在模板中使用自定义的...

    freeMarker资料

    - **数据模型**:FreeMarker使用插件式的对象封装,这意味着Java对象可以通过特定的方式在模板中表示出来,使得模板开发者可以更容易地操作数据。 #### 二、FreeMarker的核心特性 ##### 1. 通用目标 - **多文本...

Global site tag (gtag.js) - Google Analytics