最爽的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.
spring boot會自動配置 FreeMarker,Thymeleaf,Velocity,只須要在pom中加入相應的依賴便可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-velocity</artifactId> </dependency>
默認配置下spring boot會從src/main/resources/templates目錄中去找模板
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後綴的模板文件.
數據httpapis經過model傳到模板文件(SpringMVC框架裏面作的事情):
model.addAttribute("httpapis", HttpApiDao.findAll())
完整的Controller代碼:
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") } ... }
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的語法詳情參考:
咱們在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文件裏.