1. 什么是velocity

  Velocity[vəˈlɑ:səti],名称字面翻译为:速度、速率、迅速。该项目的开源地址:http://velocity.apache.org/,它是一个基于Java的模板引擎,什么叫基于Java的模板引擎,就是说,在velocity中可以直接引用Java定义的对象。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。

2. Velocity是怎么被解析的

  我们知道使用jsp技术,让Java代码出现在view层,不易于维护,增加了前端代码量。而velocity则正是jsp技术的替代者。velocity是一种template引擎,利用先编辑完的格式来作为大纲,把一些需要变化的地方作为参数传入,显示时将模板和参数合并,达到最终输出的样子。

3. Velocity渲染过程

  1. 首先初始化启动Velocity引擎,可以通过 Velocity.init()或者新建VelocityEngine类,并调用其中的init()方法;
  2. 创建一个 VelocityContext对象,将变量名与值关联起来,与HashMap对象相类似。可以直接将值传递给页面进行引用;
  3. 获取一个模板,利用Velocity.getTemplate()获取一个渲染模板,即要将数据最终渲染在哪个页面上去。
  4. 创建一个输出流,将上述创建的数据最终渲染到模板上,采用的方法template.merge()。
  1. try {
  2. Velocity.init("velocity.properties");
  3. VelocityContext context = new VelocityContext();
  4. String templateFile = "template.vm";
  5. context.put("paramObject", "onlyone");
  6. Template template = null;
  7. template = Velocity.getTemplate(templateFile);
  8. BufferedWriter writer = new BufferedWriter(new FileWriter("velocity.data"));
  9. if (template != null) template.merge(context, writer);
  10. writer.flush();
  11. writer.close();
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. }

代码示例

4. Velocity与SpringMVC的整合

  1. <dependency>
  2. <groupId>org.apache.velocity</groupId>
  3. <artifactId>velocity</artifactId>
  4. <version>1.7</version>
  5. </dependency>
  6.  
  7. <dependency>
  8. <groupId>org.apache.velocity</groupId>
  9. <artifactId>velocity-tools</artifactId>
  10. <version>2.0</version>
  11. </dependency>

pom.xml中引入velocity-1.7.jar包

  首先,需要在Maven项目中的pom.xml中引入velocity-1.7.jar包和velocity-tools-generic-2.0.jar包,为SpringMVC配置多视图,并添加velocity的视图配置(由于Velocity是用来连接Model和View层的),既然,Velocity是要依赖于SpringMVC的,那么我们先看看在Web.xml中对于SpringMVC的相关配置,

  1. <!--Spring 服务层的配置文件 -->
  2. <context-param>
  3. <param-name>contextConfigLocation</param-name>
  4. <param-value>classpath:applicationContext.xml</param-value>
  5. </context-param>
  6.  
  7. <!--Spring 容器启动监听器 -->
  8. <listener>
  9. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  10. </listener>
  11.  
  12. <!-- Spring MVC 的Servlet,它将加载WEB-INF/springDispatcher-servlet.xml 的配置文件,以启动Spring MVC模块-->
  13. <servlet>
  14. <servlet-name>springDispatcher</servlet-name>
  15. <servlet-class>
  16. org.springframework.web.servlet.DispatcherServlet
  17. </servlet-class>
  18. <init-param>
  19. <param-name>contextConfigLocation</param-name>
  20. <param-value>
  21. /WEB-INF/springDispatcher-servlet.xml
  22. </param-value>
  23. </init-param>
  24. </servlet>
  25.  
  26. <servlet-mapping>
  27. <servlet-name>springDispatcher</servlet-name>
  28. <url-pattern>*.do</url-pattern>
  29. </servlet-mapping>

web.xml中配置SpringMVC

Spring MVC是基于DispatcherServlet来拦截请求,并找到相应的控制器进行业务逻辑处理。从web.xml中,我们可以看到web容器在启动的时候,它会加载

  1. WEB-INF/springDispatcher-servlet.xml的配置文件,来启动MVC模块,所以我们的Velocity相关信息要配置在springDispatcher-servlet.xml
  1. <--1、对模型视图名称的解析,即在模型视图名称添加前后缀 -->
  2. <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
  3. <property name="allowSessionOverride" value="true"/>
  4. <property name="exposeSessionAttributes" value="true"/>
  5. <property name="cache" value="true"/>
  6. <property name=”prefix” value=”/WEB-INF/templates/”/>
  7. <property name="suffix" value=".vm"/>
  8. <property name="contentType">
  9. <value>text/html;charset=UTF-8</value>
  10. </property>
  11. </bean>
  12.  
  13. <--2、velocity的一些设置 -->
  14. <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
  15. <property name="resourceLoaderPath">
  16. <value>velocity/</value>
  17. </property>
  18. <property name="velocityProperties">
  19. <props>
  20. <prop key="input.encoding">UTF-8</prop>
  21. <prop key="output.encoding">UTF-8</prop>
  22. <prop key="contentType">text/html;charset=UTF-8</prop>
  23. </props>
  24. </property>
  25. </bean>

springDispatcher-servlet.xml中的部分配置信息截取

这部分配置文件中,主要配置两个部分:velocityViewResolver( 配置Velocity视图解析器)和velocityConfigurer(配置Velocity引擎)在配置的第一部分,我们定义了模型视图名称的解析规则,即使用了velocity模板视图解析器:VelocityViewResolver,因为在SpringMVC中有视图解析器viewResolver,通过这段配置文件,我们可以寻找采用模板的视图配置。于此同时,还定义了*.vm模板在后端的存放路径,这样Spring就与velocity模板技术整合起来了。在配置的第二部分,则定义了velocity的一些属性配置,包括定义前端显示页面的存放路径和页面的编码格式等。

此外,我们参考一下SpringMVC中解析jsp的视图解析器的配置,参考配置如下:

  1. <!-- SpringMVC默认的视图解析器ViewResolver,负责解析jsp文件 -->
  2. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  3. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  4. <property name="prefix" value="/WEB-INF/" />
  5. <property name="suffix" value=".jsp" />
  6. </bean>

SpringMVC默认的视图解析器ViewResolver

5. Velocity与WebX的整合

6. Velocity源码分析及性能优化

  http://agapple.iteye.com/blog/1051724

7. Velocity常用语法回顾

  http://www.cnblogs.com/yjmyzz/p/4146699.html

点我吧工作总结(技术篇) Velocity的更多相关文章

  1. Velocity是如何工作的

    当在一个应用程序或者servlet中使用Velocity的时候,你要做如下几个工作: 初始化Velocity.Velocity提供2种使用形式,不管是单一实例模式还是单独运行实例模式,初始化过程都只做 ...

  2. Velocity – 另外一款加速的 jQuery 动画插件

    Velocity 是一款 jQuery 插件,重新实现了 $.animate() 方法,提供更高的性能(比 CSS 动画还更快),同时包括一些新的功能,以改进动画工作流程.Velocity 除了包括所 ...

  3. 使用 Velocity 模板引擎快速生成代码(zhuan)

    http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ ****************************************** ...

  4. 转 如何使用velocity模板引擎开发网站

    基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...

  5. 使用Velocity 模板引擎快速生成代码

    Velocity 模板引擎介绍 在现今的软件开发过程中,软件开发人员将更多的精力投入在了重复的相似劳动中.特别是在如今特别流行的MVC架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高. ...

  6. Velocity 语法示例

    一.简介: 1)它允许任何人使用简单而强大的模板语言来引用定义在 java 代码中的对象" 2)Velocity是一个基于java的模板引擎,简称VTL(Velocity Template ...

  7. Velocity之初印象

    Velocity 模板引擎介绍 在现今的软件开发过程中,软件开发人员将更多的精力投入在了重复的相似劳动中.特别是在如今特别流行的 MVC 架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加 ...

  8. Velocity 模板

    Velocity 模板引擎介绍 引:https://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ 在 现今的软件开发过程中,软件开发人员将更多的 ...

  9. Velocity 的工作原理

    原文出处:http://www.blogjava.net/jackybu/articles/8803.html 这个程序很简单,但是它能让你清楚的了解Velocity的基本工作原理.程序中其他部分基本 ...

随机推荐

  1. 开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件

    返回目录 本文主要介绍HttpModule,它在一个网页请求过程中是一个怎样的过程是我们要知道的,在网页加载过程中HttpModule在何时被执行也是我们要知道的,以及,HttpModule在网页请求 ...

  2. Atitit 研发体系建立 数据存储与数据知识点体系知识图谱attilax 总结

    Atitit 研发体系建立 数据存储与数据知识点体系知识图谱attilax 总结 分类具体知识点原理规范具体实现(oracle,mysql,mssql是否可以自己实现说明 数据库理论数据库的类型 数据 ...

  3. NPM安装之后CMD中不能使用

    NPM安装之后CMD中不能使用 这个情况就是path环境变量没有添加NPM 添加环境变量并重启CMD C:\Users\Mark\AppData\Roaming\npm\ 看看这个文件夹就知道为什么要 ...

  4. Struts2--ONGL--值栈

    ONGL:用来访问栈里对象属性的语言,通常由Struts标签来解析, 注意:要在接续OGNL的页面加入<%@ taglib prefix="s" uri="/str ...

  5. 手把手教你实现一个完整的 Promise

    用过 Promise,但是总是有点似懂非懂的感觉,也看过很多文章,还是搞不懂 Promise的 实现原理,后面自己边看文章,边调试代码,终于慢慢的有感觉了,下面就按自己的理解来实现一个 Promise ...

  6. java三大循环:for、while、do...while

    1.while和do...while的区别: while 与 do...while之间的区别:如果布尔表达式第一次执行的结果就为false,那么while循环一次也不执行:do...while循环会执 ...

  7. javascript运算符——算术运算符

    × 目录 [1]一元加 [2]一元减 [3]递增[4]递减[5]加法[6]减法[7]乘法[8]除法[9]求余 前面的话 javascript中的算术操作主要通过算术运算符来实现,本文将介绍算术运算符的 ...

  8. 信息加密之非对称加密算法RSA

    前面为大家已经总结了,基于密钥交换的DH算法,现在就为大家再介绍一种基于因子分解的RSA算法,这种加密算法有两种实现形式:1.公钥加密,私钥解密:2.私钥加密,公钥解密.下面就为大家分析一下实现代码, ...

  9. poj1273Drainage Ditches

    #include<iostream> /* 题意:就是寻找从源点到汇点的最大流! 要注意的是每两个点的流量可能有多个,也就是说有重边,所以要把两个点的所有的流量都加起来 就是这两个点之间的 ...

  10. Spring AOP AspectJ Pointcut Expressions With Examples--转

    原文地址:http://howtodoinjava.com/spring/spring-aop/writing-spring-aop-aspectj-pointcut-expressions-with ...