Springboot使用velocity模板引擎

花门楼前见秋草,岂能贫贱相看老。这篇文章主要讲述Springboot使用velocity模板引擎相关的知识,希望能为你提供帮助。
第五章 使用velocity模板引擎最爽的Web组合开发就是Intellij IDEA + Maven + Spring Boot + Scala + Velocity + Boostrap + jQuery了.
Spring Boot提供了一个强大的一键式Spring的集成开发环境,能够单独进行一个Spring应用的开发,其中:
(1)集中式配置(application.properties)+注解,大大简化了开发流程
(2)内嵌的Tomcat和Jetty容器,可直接打成jar包启动,无需提供java war包以及繁琐的Web配置
(3)提供了Spring各个插件的基于Maven的pom模板配置,开箱即用,便利无比。
(4)可以在任何你想自动化配置的地方,实现可能
(5)提供更多的企业级开发特性,如何系统监控,健康诊断,权限控制
(6)无冗余代码生成和XML强制配置
(7)提供支持强大的Restfult风格的编码,非常简洁
当然Spring Boot提供的功能,远远比上面的强大. Spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spring boot 自动配置的功能(因为加了EnableAutoConfiguration的注解),帮我们创建了一堆默认的配置,以前在web.xml中配置,现在都可以通过spring bean的方式进行配置,由spring来进行生命周期的管理,大多数情况下,我们需要重载这些配置(例如修改服务的启动端口,contextpath,filter,listener,servlet,session超时时间等)
本章我们介绍一下,在SB中使用模板引擎Velocity.
SB默认支持的模板引擎spring boot会自动配置 FreeMarker,Thymeleaf,Velocity,只需要在pom中加入相应的依赖即可
SB使用Velocity的依赖

< dependency>
< groupId> org.springframework.boot< /groupId>
< artifactId> spring-boot-starter-velocity< /artifactId>
< /dependency>

默认配置下spring boot会从src/main/resources/templates目录中去找模板
SB的velocity配置application.properties配置
lightsword/src/main/resources/application.properties
# VELOCITY TEMPLATES (VelocityAutoConfiguration)
spring.velocity.charset=UTF-8
spring.velocity.properties.input.encoding=UTF-8
spring.velocity.properties.output.encoding=UTF-8
spring.velocity.resourceLoaderPath=classpath:/templates/
spring.velocity.suffix=.html
spring.velocity.toolbox-config-location=/WEB-INF/toolbox.xml

这样,SB会从src/main/resources/templates目录中去找以.html后缀的模板文件.
Controller里面的Model
数据httpapis通过model传到模板文件(SpringMVC框架里面做的事情):
model.addAttribute("httpapis", HttpApiDao.findAll())

完整的Controller代码:
??https://github.com/LightSwordSpringBoot/lightsword/blob/lightsword/src/main/scala/com/springboot/in/action/controller/HttpApiController.scala??
package com.springboot.in.action.controller

import java.util.Date
import java.util.concurrent.CountDownLatch

import com.alibaba.fastjson.JSON
import com.springboot.in.action.dao.HttpApiDao, HttpReportDao, HttpSuiteDao
import com.springboot.in.action.engine.OkHttp
import com.springboot.in.action.entity.HttpApi, HttpReport
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.PathVariable, RequestMapping, RequestMethod, RequestParam, ResponseBody, RestController
import org.springframework.web.servlet.ModelAndView
import scala.collection.JavaConversions._

@RestController
@RequestMapping(Array("/httpapi"))
class HttpApiController @Autowired() (
val HttpSuiteDao: HttpSuiteDao,
val HttpApiDao: HttpApiDao,
val HttpReportDao: HttpReportDao)

@RequestMapping(value = https://www.songbingjia.com/android/
Array("", "/")
, method = Array(RequestMethod.GET))
def list(model: Model) =
model.addAttribute("httpapis", HttpApiDao.findAll())
new ModelAndView("/httpapi/list")


...


模板文件list.html
lightsword/src/main/resources/templates/httpapi/list.html
#include("/common/header.html")
< div class="form-group">
< table style="word-break: break-all; word-wrap: break-all; "
class="table table-hover table-condensed table-responsive">
< thead>
< tr>
< th style=width: 60px> Id< /th>
< th style=width: 100px> 用例名称< /th>
< th> URL< /th>
< th style=width: 80px> 方法< /th>
< th style=width: 100px> 期望输出< /th>
< th style=width: 60px> 次数< /th>
< th> 状态< /th>
< th style=width: 90px> 创建人< /th>
< th style=width: 120px> 调用时间< /th>
< th style=width: 60px> 操作< /th>
< th> 执行测试< /th>
< /tr>
< /thead>
< tbody>
#foreach ($t in $httpapis)
< tr>
< td> $!t.id< /td>
< td> $!t.name< /td>
< td> $!t.url< /td>
< td> $!t.method< /td>
< td> $!t.expectOutput< /td>
< td> $!t.runTimes< /td> #if($!t.state==1)
< td> < div class="btn btn-success"> 成功< /div> < /td> #elseif($!t.state==0)
< td> < div class="btn btn-danger"> 失败< /div> < /td> #else
< td> < div class="btn btn-info"> 未执行< /div> < /td> #end
< td> $!t.owner< /td>
< td> $!DateTool.format(yyyy-MM-dd HH:mm:ss, $!t.gmtModify)< /td>
< td> < a href="https://www.songbingjia.com/httpapi/detailPage/$t.id"> 查看< /a> < /td>
< td> < div id=btn-$t.id class=btn btn-primary
onclick=runTest($t.id)> 运行< /div> < /td>
< /tr>
#end
< /tbody>
< /table>
< /div>

< script>
function runTest(id)
var url = /httpapi/runTest?id= + id
$.getJSON(url, function(data)
if (data)
alert(响应结果: + JSON.stringify(data, null, 2))
location.reload()
else
alert(执行失败)

)

< /script>


#include("/common/footer.html")

velocity的语法详情参考:
toolbox的使用我们在velocity模板文件中有时候需要格式化小数点,日期等输出,我们可以使用toolbox.
我们看到application.properties有这么一行配置:
spring.velocity.toolbox-config-location=/WEB-INF/toolbox.xml

然后,在list.html里面有这么一行代码
< td> $!DateTool.format(yyyy-MM-dd HH:mm:ss, $!t.gmtModify)< /td>

这个DateTool就是我们这里要说的toolbox的功能.
lightsword/src/main/resources/WEB-INF/toolbox.xml的配置如下
< ?xml version="1.0" encoding="UTF-8"?>
< !-- ============================================================= @(#) toolbox.xml
Copyright (c) 2016, Project, All Rights Reserved. ============================================================= -->

< toolbox>

< !-- [ DateTool ] @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/generic/DateTool.html
(ja) @see http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/DateTool.html
(en) @since VelocityTools 1.0 -->
< tool>
< key> DateTool< /key>
< scope> application< /scope>
< class> org.apache.velocity.tools.generic.DateTool< /class>
< /tool>

< !-- [ MathTool ] @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/generic/MathTool.html
(ja) @see http://velocity.apache.org/tools/devel/generic/MathTool.html (en)
@since VelocityTools 1.0 -->
< tool>
< key> MathTool< /key>
< scope> application< /scope>
< class> org.apache.velocity.tools.generic.MathTool< /class>
< /tool>

< !-- [ NumberTool ] @see http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/NumberTool.html
(en) @since VelocityTools 1.2 -->
< tool>
< key> NumberTool< /key>
< scope> application< /scope>
< class> org.apache.velocity.tools.generic.NumberTool< /class>
< /tool>

< !-- [ RenderTool ] @see http://velocity.apache.org/tools/devel/generic/RenderTool.html
(en) @since VelocityTools 1.0 < tool> < key> render< /key> < scope> application< /scope>
< class> org.apache.velocity.tools.generic.RenderTool< /class> < /tool> -->

< !-- [ EscapeTool ] @see http://velocity.apache.org/tools/devel/generic/EscapeTool.html
(en) @since VelocityTools 1.2 -->
< tool>
< key> EscapeTool< /key>
< scope> application< /scope>
< class> org.apache.velocity.tools.generic.EscapeTool< /class>
< /tool>

< !-- [ ResourceTool ] @see http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/ResourceTool.html
(en) @since Velocity 1.3 < tool> < key> text< /key> < class> org.apache.velocity.tools.generic.ResourceTool< /class>
< parameter name="bundles" value="https://www.songbingjia.com/android/resources,prj.hoboken.patrasche.resources.PatrascheResources"
/> < parameter name="locale" value="https://www.songbingjia.com/android/ja_JP" /> < /tool> -->

< !-- [ AlternatorTool ] @see http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/AlternatorTool.html
(en) @since VelocityTools 1.2 -->
< tool>
< key> AlternatorTool< /key>
< scope> application< /scope>
< class> org.apache.velocity.tools.generic.AlternatorTool< /class>
< /tool>

< !-- [ ValueParser ] @see http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/ValueParser.html
(en) @since VelocityTools 1.2 -->
< tool>
< key> ValueParser< /key>
< scope> application< /scope>
< class> org.apache.velocity.tools.generic.ValueParser< /class>
< /tool>

< !-- [ ListTool ] @see http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/ListTool.html
(en) @since VelocityTools 1.2 -->
< tool>
< key> ListTool< /key>
< scope> application< /scope>
< class> org.apache.velocity.tools.generic.ListTool< /class>
< /tool>

< !-- [ SortTool ] @see http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/SortTool.html
(en) @since VelocityTools 1.2 -->
< tool>
< key> SortTool< /key>
< scope> application< /scope>
< class> org.apache.velocity.tools.generic.SortTool< /class>
< /tool>

< !-- [ IteratorTool ] @see http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/IteratorTool.html
(en) @since VelocityTools 1.0 -->
< tool>
< key> IteratorTool< /key>
< scope> request< /scope>
< class> org.apache.velocity.tools.generic.IteratorTool< /class>
< /tool>

< !-- ============================================================ [ TOOL
FOR STRUTS TAGLIB ] ============================================================ -->
< !-- [ ActionMessagesTool ] @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/struts/ActionMessagesTool.html
(ja) @see http://velocity.apache.org/tools/devel/struts/ActionMessagesTool.html
(en) @since VelocityTools 1.1 -->
< tool>
< key> ActionMessagesTool< /key>
< scope> request< /scope>
< class> org.apache.velocity.tools.struts.ActionMessagesTool< /class>
< /tool>

< !-- [ ErrorsTool ] @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/struts/ErrorsTool.html
(ja) @see http://velocity.apache.org/tools/devel/struts/ErrorsTool.html (en)
@since VelocityTools 1.0 -->
< tool>
< key> ErrorsTool< /key>
< scope> request< /scope>
< class> org.apache.velocity.tools.struts.ErrorsTool< /class>
< /tool>

< !-- [ FormTool ] @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/struts/FormTool.html
(ja) @see http://velocity.apache.org/tools/devel/struts/FormTool.html (en)
@since VelocityTools 1.0 -->
< tool>
< key> FormTool< /key>
< scope> request< /scope>
< class> org.apache.velocity.tools.struts.FormTool< /class>
< /tool>

< !-- [ MessageTool ] @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/struts/MessageTool.html
(ja) @see http://velocity.apache.org/tools/devel/struts/MessageTool.html
(en) @since VelocityTools 1.0 -->
< tool>
< key> MessageTool< /key>
< scope> request< /scope>
< class> org.apache.velocity.tools.struts.MessageTool< /class>
< /tool>

< !-- [ StrutsLinkTool ] LinkTool @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/struts/StrutsLinkTool.html
(ja) @see http://velocity.apache.org/tools/devel/struts/StrutsLinkTool.html
(en) @since VelocityTools 1.0 -->
< tool>
< key> StrutsLinkTool< /key>
< scope> request< /scope>
< class> org.apache.velocity.tools.struts.StrutsLinkTool< /class>
< /tool>

< !-- [ SecureLinkTool ] LinkTool @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/struts/SecureLinkTool.html
(ja) @see http://velocity.apache.org/tools/devel/struts/SecureLinkTool.html
(en) @since VelocityTools 1.1 -->
< tool>
< key> SecureLinkTool< /key>
< scope> request< /scope>
< class> org.apache.velocity.tools.struts.SecureLinkTool< /class>
< /tool>

< !-- [ TilesTool ] Tiles @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/struts/TilesTool.html
(ja) @see http://velocity.apache.org/tools/devel/struts/TilesTool.html (en)
@since VelocityTools 1.1 -->
< tool>
< key> TilesTool< /key>
< scope> request< /scope>
< class> org.apache.velocity.tools.struts.TilesTool< /class>
< /tool>

< !-- [ ValidatorTool ] Validator @see http://www.jajakarta.org/velocity/tools/velocity-tools-1.1/docs-ja/struts/ValidatorTool.html
(ja) @see http://velocity.apache.org/tools/devel/struts/ValidatorTool.html
(en) @since VelocityTools 1.1 -->
< tool>
< key> ValidatorTool< /key>
< scope> request< /scope>
< class> org.apache.velocity.tools.struts.ValidatorTool< /class>
< /tool>


< /toolbox>

这样我们就可以在模板文件中使用类似DateTool这样的工具类了.同时我们也可以在代码里自己实现工具类,然后配置到toolbox.xml文件里.


【Springboot使用velocity模板引擎】


    推荐阅读