对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);
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值