Velocity([vəˈlɑ:səti],速度,快速) 是一种Java网页模板引擎。

和JSP、Freemarker差不多,都是用来展示网页内容的。

和JSP不同的是velocity只能显示Action中的数据,不能处理数据。不能写java代码,但是可以使用Velocity标记。

Velocity的页面(模版)可是是任何类型(text/html)的文件。

当Velocity应用于web开发时,Velocity将java代码从web页面中分离出来,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由Java程序开发人员关注业务逻辑编码。

 

简要描述在Spring MVC中配置velocity的步骤: 

1、引入velocity所需要的包

2、添加配置信息

3、测试

 

步骤详解:

先看下目录结构

spring-mvc-pei-zhi-velocity-01

 

1、引入包 velocity

velocity-1.7.jar、velocity-tools-2.0.jar、spring-context-support-4.2.5.RELEASE.jar(无视版本号)

pom.xml 文件配置,引入下面jar包即可

\mimvpdemo\pom.xml

<!--velocity start-->  
<dependency>  
    <groupId>org.apache.velocity</groupId>  
    <artifactId>velocity</artifactId>  
    <version>1.6</version>  
</dependency>  
<dependency>  
    <groupId>org.apache.velocity</groupId>  
    <artifactId>velocity-tools</artifactId>  
    <version>2.0</version>  
</dependency>  
<dependency>  
    <groupId>org.springframework</groupId>  
    <artifactId>spring-context-support</artifactId>  
    <version>4.2.5.RELEASE</version>  
</dependency>  
<!--velocity end-->  

 

2、在配置文件里添加配置信息

VelocityConfigurer负责在spring中设置Velocity引擎。这里,通过属性resourceLoaderPath告诉Velocity到哪里寻找它的模板。建议将模板放到WEB-INF下的某个子目录下,可以保证这些模板不能被直接访问。

在配置属性时,有两种配置方法:

方式1)通过配置文件

\mimvpdemo\src\main\resources\spring-mvc.xml

<!-- 模板信息配置 -->  
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">  
	<property name="resourceLoaderPath" value="/WEB-INF/velocity/" /><!-- 模板存放的路径 -->  
	<property name="configLocation" value="classpath:velocity.properties"/>  
</bean>

 

velocity.properties

\mimvpdemo\src\main\resources\velocity.properties

input.encoding=UTF-8
output.encoding=UTF-8
directive.foreach.counter.name=loopCounter
directive.foreach.counter.initial.value=0

 

方式2)通过属性配置推荐):

\mimvpdemo\src\main\resources\spring-mvc.xml

<!-- velocityConfigurer -->
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">    
    <property name="resourceLoaderPath"  value="WEB-INF/velocity/" />	<!-- 指定网页模板的位路径-->    
    <property name="velocityProperties">    
        <props>    
            <prop key="directive.foreach.counter.name">loopCounter</prop>    
            <prop key="directive.foreach.counter.initial.value">0</prop>    
            <prop key="input.encoding">UTF-8</prop>		<!-- 指定模板引擎进行模板处理的编码 -->    
            <prop key="output.encoding">UTF-8</prop>		<!-- 指定输出流的编码 -->    
        </props>    
    </property>    
       <!-- <property name="configLocation" value="classpath:velocity.properties"></property> -->
</bean>    

第一次配置时,用的第一种方式,出现一个问题,就是走完后台后,页面不进行跳转,一直是layout.vm

后来改为第二种方式,问题解决,再改为第一种配置,问题再现不了。如果有朋友碰到类似问题,可以试试另一种方式配置。

 

3、配置velocity解析视图

\mimvpdemo\src\main\resources\spring-mvc.xml

<!-- 配置视图的显示 -->  
<bean id="ViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">  
    <property name="cache" value="true" />  
    <property name="prefix" value="/" />			<!-- 视图文件的前缀,即存放的路径 -->  
    <property name="suffix" value=".vm" />		<!-- 视图文件的后缀名 -->  
    <property name="dateToolAttribute" value="date" /><!--日期函数名称-->  
    <property name="numberToolAttribute" value="number" />		<!--数字函数名称-->  
       <property name="allowSessionOverride" value="true" />
       <property name="allowRequestOverride" value="true" />
    <property name="exposeSessionAttributes" value="true" />
    <property name="exposeRequestAttributes" value="true" />		<!--是否开放request属性-->  
    <property name="exposeSpringMacroHelpers" value="true" />	<!--是否使用spring对宏定义的支持-->  
    <property name="requestContextAttribute" value="request"/>	<!--request属性引用名称-->  
    <property name="contentType" value="text/html;charset=UTF-8" />   
    <!--<property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml" /><!–toolbox配置文件路径–>-->  
</bean>  

VelocityViewResolver和Velocity的关系与InternalResourceViewResolver和JSP的关系相似。

InternalResourceViewResolver使用prefix属性和suffix属性由视图的逻辑名构造出模板文件路径,这样在Controller中的ModelAndView中直接通过文件名找模板。

 

4、测试页面

Action方法:

\mimvpdemo\src\main\java\com\mimvp\homer\controller\HelloAction.java

package com.mimvp.homer.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloAction {
	
	@RequestMapping(value="hello")  
	public ModelAndView printWelcome(HttpServletRequest request,HttpServletResponse response) {  
	    ModelAndView mav= new ModelAndView();  
	    mav.addObject("homeURL","http://mimvp.com");  
	    mav.setViewName("hello");  
	    return mav;  
	}  
}

 

5、添加编辑 hello.vm

在/WEB-INF/velocity/ 路径下信件hello.vm

\mimvpdemo\src\main\webapp\WEB-INF\velocity\hello.vm

<html>  
<body>  
	<h3> (velocity - hello.vm)</h3>
    <h1>${homeURL}</h1>  
</body>  
</html> 

 

6、启动项目,访问

http://localhost:8080/mimvpdemo/hello

spring-mvc-pei-zhi-velocity-02

 

完整项目代码: mimvpdemo

 

 

参考推荐

Java Velocity $ 和 $! 区别

Java Velocity 内置指令 #parse() 的使用方法