Springboot使用velocity模板引擎

第五章 使用velocity模板引擎

最爽的Web組合開發就是Intellij IDEA + Maven + Spring Boot + Scala + Velocity + Boostrap + jQuery了.html

Spring Boot提供了一個強大的一鍵式Spring的集成開發環境,可以單獨進行一個Spring應用的開發,其中: java

(1)集中式配置(application.properties)+註解,大大簡化了開發流程 git

(2)內嵌的Tomcat和Jetty容器,可直接打成jar包啓動,無需提供Java war包以及繁瑣的Web配置 github

(3)提供了Spring各個插件的基於Maven的pom模板配置,開箱即用,便利無比。web

(4)能夠在任何你想自動化配置的地方,實現可能 spring

(5)提供更多的企業級開發特性,如何系統監控,健康診斷,權限控制 apache

(6)無冗餘代碼生成和XML強制配置 json

(7)提供支持強大的Restfult風格的編碼,很是簡潔 api

固然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超時時間等)springboot

本章咱們介紹一下,在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 = {
    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="/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="resources,prj.hoboken.patrasche.resources.PatrascheResources" 
        /> <parameter name="locale" value="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文件裏.

相關文章
相關標籤/搜索