最爽的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.
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
```
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代码:
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") }
...
}
```
lightsword/src/main/resources/templates/httpapi/list.html
```
Id | 用例名称 | URL | 方法 | 期望输出 | 次数 | 状态 | 创建人 | 调用时间 | 操作 | 执行测试 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
$!t.id | $!t.name | $!t.url | $!t.method | $!t.expectOutput | $!t.runTimes | #if($!t.state==1) 成功 | #elseif($!t.state==0) 失败 | #else 未执行 | #end $!t.owner | $!DateTool.format('yyyy-MM-dd HH:mm:ss', $!t.gmtModify) | 查看 | 运行 |
```
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的配置如下
```
<!-- [ 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>
```
这样我们就可以在模板文件中使用类似DateTool这样的工具类了.同时我们也可以在代码里自己实现工具类,然后配置到toolbox.xml文件里.