欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

框架开发者一般使用这个类 昆山软件定制开发 在框架中使用velocity模板渲染功能

点击: 次  来源:宝鼎软件 时间:2017-08-12

原文出处: 加多(微信公号:技能原始积聚)

一、媒介

常见的Java模板引擎有JSP、Freemark,Velocity。在MVC三层框架中,模板引擎属于view层,实质是把model层内容揭示到前台页面的一个引擎,velocity以其前后端解耦使前靠山可以同时开拓和其语法的浅易性获得了遍及的应用,团体WebX框架就发起利用它作为模板引擎。

二、道理

2.1 架构先容

框架开拓者一般利用这个类 昆山软件定制开拓 在框架中利用velocity模板渲染成果

打开velocity的源码包,从代码布局看velocity主要包罗app、context、runtime、event、texen和一些util类

1)、app模块

源码org.apache.velocity.app下面主要有两个类Velocity和VelocityEngine。

  • Velocity ,主要对外提供一些static要领,可以通过类名直接挪用,只要通过Velocity建设一个模块,在建设一个存放变量的context,就可以渲染,如下:
  • 框架开拓者一般利用这个类 昆山软件定制开拓 在框架中利用velocity模板渲染成果

    别的Velocity成果是委托给RuntimeInstance来详细实现的,而且维护的是一个单件实例,就是说在同一个jvm中,只有一个Velocity的实例,这给资源共享和设置当地化带来的利便,这为在通一个JVM的差异应用见共享模块提供了利便。

  • VelocityEngine ,对比于Velocity提供了越发强大的成果,框架开拓者一般利用这个类在框架中利用velocity模板渲染成果,内部也是是委托给RuntimeInstance来详细实现的,可是每个VelocityEngine都有一个本身的RuntimeInstance实例。也就是说在一个JVM中可以有多个VelocityEngine实例,每个实例都可以定制化本身的设置,这为在同一个应用中设置差异的模板路径和logger提供了利便。
  • 譬喻springmvc中初始化一个veloctiy引擎方法如下:

    框架开拓者一般利用这个类 昆山软件定制开拓 在框架中利用velocity模板渲染成果

    2)、Context模块

    源码org.apache.velocity.context包下的Context,AbstractContext,尚有org.apache.velocity下的VelocityContext。主要成果是提供对模板渲染所需要的变量的封装打点.

    框架开拓者一般利用这个类 昆山软件定制开拓 在框架中利用velocity模板渲染成果

    Context设计目标:

  • 作为一个适配器,便于与其他框架集成
  • 譬喻SpringMVC通报参数的是一个Map的数据布局,那么假如springmvc中利用velocity则需要把map内里存放的变量适配到context中,这个是直接把map作为VelocityContext结构函数参数适配的。可是webx利用的是本身的context,PullableMappedContext存放变量,那么就需要担任velocity的AbstractContext实现一个适配器TemplateContextAdapter来把本身的context转换为velocity所需要的context.

  • Velocity内部数据断绝,Velocity差异模块通过通报参数方法举办处理惩罚,利于模块之间的解耦。
  • 3)、RunTime模块

    源码org.apache.velocity.runtime包下:

    认真加载模板文件,理会为JavaCC语法树,利用深度遍历算法渲染语法书节点,生成渲染功效。

    4)、RuntimeInstance

    认真理会模板文件为AST布局,velocity和velocityengine内部都是委托给它来实现成果。

    5)、util模块

    一些东西类,譬喻SimplePool是一个工具池,内里默认缓存20个Parser。CalssUtiles是一个简朴的从classloader操纵类和资源的函数类。

    2.2 源码阐明

    2.2.1 试验筹备

    pom中添加velocity依赖

    <dependency>
    
      <groupId>velocity-tools</groupId>
    
      <artifactId>velocity-tools-generic</artifactId>
    
      <version>1.4</version>
    
    </dependency>

    测试java代码:

    public static void main(String[] args) {try {    // 初始化(1)
    
        Velocity.init("velocity.properties");    // 建设context,存放变量(2)
    
        VelocityContext context = new VelocityContext();
    
        Person person = new Person();
    
        person.setName("jiaduo");
    
        context.put("person", person);    // 加载模板文件到内存(3)
    
        Template template = null;
    
        String templateFile = "healthview.vm";
    
        template = Velocity.getTemplate(templateFile);    // 渲染(4)
    
        StringWriter stringWriter = new StringWriter();
    
        template.merge(context, stringWriter);    // 打印功效
    
        System.out.println(stringWriter.toString());
    
    } catch (Exception e) {
    
        e.printStackTrace();
    
    }
    
    }

    healthview.vm内容:

    <html>
    
       <div>$!{person.sayHello()}:$!{person.name}</div>
    
    </html>

    velocity.properties内容:

    file.resource.loader.path = /Users/zhuizhumengxiang/workspace/mytool/SpringLean/src/

    2.2.2 源码阐明