【原创文章,转载请注明出处,提供源代码下载】
在写此博客之前,我要对通过支付宝,微信公众号,微信给我的文章打赏的小伙伴表示感谢,谢谢你们的支持,虽然money不多,但是确实是对我很大的鼓励,谢谢你们,有你们的支持,我相信我的博客质量也会越来越好。
好了,说了一些题外话,我们还是进入正题吧。距离上一篇博客,又过了10天了,今天我们讲讲怎么在Spring Boot中使用模板引擎velocity,先看看今天的大纲:
(1) velocity介绍;
(2) 新建spring-boot-velocity工程;
(3) 在pom.xml引入相关依赖;
(4) 编写启动类;
(5) 编写模板文件hello.vm;
(6) 编写访问类HelloController;
(7) 测试;
(8) velocity配置;
(9) velocity常用语法;
(10) velocity layout
(1) velocity介绍;
Velocity是一个基于java的模板引擎(templateengine)。它允许任何人仅仅使用简单的模板语言(template language)来引用由java代码定义的对象。
官网:http://velocity.apache.org/
模板引擎的使用我们其中的一个章节中介绍过freemarker和thymeleaf的使用。
(2) 新建spring-boot-velocity工程;
我们新建一个maven工程,取名为:spring-boot-velocity
(3) 在pom.xml引入相关依赖;
在这里需要说明下,其一就是之后的博客应该会直接使用1.4.1的版本作为讲解了,其二就是在这里使用velocity需要引入相关依赖包:spring-boot-starter-velocity,
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.kfit</groupId>
<artifactId>spring-boot-velocity</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-velocity</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- jdk版本号,angel在这里使用1.8,大家修改为大家本地配置的jdk版本号即可 -->
<java.version>1.8</java.version>
</properties>
<!--
spring boot 父节点依赖,
引入这个之后相关的引入就不需要添加version配置,
spring boot会自动选择最合适的版本进行添加。
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version><!--1.4.1.RELEASE , 1.3.3.RELEASE-->
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- spring boot web支持:mvc,aop...-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入velocity的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-velocity</artifactId>
</dependency>
</dependencies>
</project>
(4) 编写启动类;
启动类没有什么特别之处,不过多介绍,请看代码:
package com.kfit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*
* @author Angel --守护天使
* @version v.0.1
* @date 2016年10月4日
*/
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
(5) 编写模板文件hello.vm;
编写一个hello.vm文件,此文件的路径在src/main/resources下,其中hello.vm文件的内容如下:
<html>
<body>
welcome ${name} to velocity!
</body>
</html>
(6) 编写访问类HelloController;
有了模板文件之后,我们需要有个Controller控制类,能够访问到hello.vm文件,这里也很简单,具体看如下代码:
package com.kfit.demo.web;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 测试velocity;
* @author Angel --守护天使
* @version v.0.1
* @date 2016年10月4日
*/
@Controller
public class HelloController{
@RequestMapping("/hello")
public String hello(Map<String,Object> map){
map.put("name", "[Angel -- 守护天使]");
return "hello";
}
}
(7) 测试;
好了,到这里,我们就可以启动我们的程序进行测试了,访问地址:
http://127.0.0.1:8080/hello ,如果你在浏览器中看到如下信息:
welcome [Angel -- 守护天使] to velocity!
那么说明你的demo ok 了。
(8) velocity配置;
在spring boot的application.properties属性文件中为velocity提供了一些常用的配置,如下:
spring.velocity.allow-request-override=false # Set whether HttpServletRequestattributes are allowed to override (hide) controller generated model attributesof the same name.
spring.velocity.allow-session-override=false # Set whether HttpSessionattributes are allowed to override (hide) controller generated model attributesof the same name.
spring.velocity.cache= # Enable template caching.
spring.velocity.charset=UTF-8 # Template encoding.
spring.velocity.check-template-location=true # Check that the templates location exists.
spring.velocity.content-type=text/html # Content-Type value.
spring.velocity.date-tool-attribute= # Name of the DateTool helper object toexpose in the Velocity context of the view.
spring.velocity.enabled=true # Enable MVC view resolution for thistechnology.
spring.velocity.expose-request-attributes=false # Set whether all requestattributes should be added to the model prior to merging with the template.
spring.velocity.expose-session-attributes=false # Set whether all HttpSessionattributes should be added to the model prior to merging with the template.
spring.velocity.expose-spring-macro-helpers=true # Set whether to expose a RequestContextfor use by Spring's macro library, under the name "springMacroRequestContext".
spring.velocity.number-tool-attribute= # Name of the NumberTool helper object toexpose in the Velocity context of the view.
spring.velocity.prefer-file-system-access=true # Prefer file system access for templateloading. File system access enables hot detection of template changes.
spring.velocity.prefix= # Prefix that gets prepended to view nameswhen building a URL.
spring.velocity.properties.*= # Additional velocity properties.
spring.velocity.request-context-attribute= # Name of the RequestContext attribute forall views.
spring.velocity.resource-loader-path=classpath:/templates/ # Template path.
spring.velocity.suffix=.vm # Suffix that gets appended to view nameswhen building a URL.
spring.velocity.toolbox-config-location= # Velocity Toolbox config location. Forinstance `/WEB-INF/toolbox.xml`
spring.velocity.view-names= # White list of view names that can beresolved.
(9) velocity常用语法;
Velocity的语法并不是本节的重点,这里还是简单的介绍下几个常用的if else,foreach;
首先我们改造下HelloController的hello方法
@RequestMapping("/hello")
public String hello(Map<String,Object> map){
map.put("name", "[Angel -- 守护天使]");
map.put("gender","1");//gender:性别,1:男;0:女;
List<Map<String,Object>>friends =new ArrayList<Map<String,Object>>();
Map<String,Object> friend = new HashMap<String,Object>();
friend.put("name", "张三");
friend.put("age", 20);
friends.add(friend);
friend = newHashMap<String,Object>();
friend.put("name", "李四");
friend.put("age", 22);
friends.add(friend);
map.put("friends", friends);
return "hello";
}
这里我们返回了gender和friends的列表;
接下来我们看看怎么在velocity进行展示呢?
<html>
<body>
welcome ${name} to velocity!
<p>性别:
#if($gender == 1)
男
#elseif($gender == 0)
女
#else
保密
#end
</p>
<h4>我的好友:</h4>
#foreach( $info in$friends )
姓名:$info.name , 年龄$info.age
<br/>
#end
</body>
</html>
(10) velocity layout
Velocity layout主要处理具有相同内容的页面,比如每个网站的header和footer页面。
Velocity的布局主要常见的两种方式是#parse(“文件路径”)和#include(“文件路径”),其中pase和include的区别在于,若包含的文件中有velocity监本标签,parse将会进一步解析,而include将原样显示。
我们编写一个header和footer,其中的header使用parse引入,footer页面使用include引入。
header.vm内容:
<header>
This is a header,welcome $name to my web site!
</header>
<hr>
footer.vm内容:
<hr>
<footer>
This is a footer,welcome $name to my web site!
</footer>
修改hello.vm:
<html>
<body>
#parse("/header.vm")
welcome ${name} to velocity!
<p>性别:
#if($gender == 1)
男
#elseif($gender== 0)
女
#else
保密
#end
</p>
<h4>我的好友:</h4>
#foreach($info in $friends )
姓名:$info.name , 年龄$info.age
<br/>
#end
#include("/footer.vm")
</body>
</html>
到这里就ok了,我们访问/hello页面
好了,到这里spring boot使用velocity就介绍到这里了,对于velocity的语法大家可以看看别的博客或者直接上官网看看。