3.5 使用页面模板
在Web开发过程中,前后端交互是一件不可避免的事情。接下来我们学习Spring Boot常用的页面模板框架。
3.5.1 使用Thymeleaf
Thymeleaf是当今比较流行的模板框架,并且是Spring Boot官方推荐使用的模板框架。本小节介绍Spring Boot框架如何使用Thymeleaf,并且会对Thymeleaf框架的使用方法进行介绍。
首先创建项目,在项目中加入spring-boot-starter-thymeleaf依赖。这里需要提醒的是,由于Thymeleaf对HTML的校验特别严格,比如标签没有结束等可能会对不熟悉者造成未知的困惑,因此我们还需要加入nekohtml的依赖来避免这个“坑”。Thymeleaf依赖如代码清单3-20所示。
完成依赖的配置之后,我们需要在配置文件中对Thymeleaf进行配置,比如编码格式、缓存设置、文件前后缀等。配置文件内容如代码清单3-21所示。
代码清单3-21 Thymeleaf项目-配置文件内容
## thymeleaf缓存是否开启,开发时建议关闭,否则更改页面后不会实时展示效果 spring.thymeleaf.cache=false ## thymeleaf编码格式 spring.thymeleaf.encoding=UTF-8 ## thymeleaf对HTML的校验很严格,用这个去除thymeleaf严格校验 spring.thymeleaf.mode=LEGACYHTML5 ## thymeleaf模板文件前缀 spring.thymeleaf.prefix=classpath:/templates/ ## thymeleaf模板文件后缀 spring.thymeleaf.suffix=.html
到这里,准备工作已经完成。需要做的是创建一个Controller和HTML进行测试。新建一个IndexController,我们先写一个简单的路由跳转方法并且传一个字符串值进行测试。IndexController内容如代码清单3-22所示。
然后,在src/mian/resources/templates下新建一个index.html(需要结合配置文件中spring.thymeleaf.prefix的配置信息存放HTML),使用th:text="${msg}"来接收后台传来的数据。index.html内容如代码清单3-23所示。
启动项目,在浏览器上访问http://localhost:8080,可以看到有如下显示:
Hello, Dalaoyang !
其实到这里Spring Boot整合Thymeleaf已经完成,但是为了方便后面章节的使用,笔者在这里再介绍一下Thymeleaf模板的常用语法。
• th:text 设置当前元素的文本内容。
• th:value 设置当前元素的值。
• th:each 循环遍历元素,一般配合上面两者使用。
• th:attr 设置当前元素的属性。
• th:if th:switch th:case th:unless 用作条件判断。
• th:insert th:replace th:incloud 代码块引入,一般用作提取公共文件,或者引用公共静态文件等。
当然,Thymeleaf也提供了一些内置方法供我们使用,比如:
• #numbers 数字方法。
• #dates 日期方法。
• #calendars 日历方法。
• #strings 字符串方法。
• #lists 集合方法。
• #maps 对象方法。
关于Thymeleaf先了解到这里,后面的章节会对它有具体的实战使用,这里就不再赘述了。
3.5.2 使用FreeMarker
刚刚介绍了Thymeleaf模板,接下来我们学习FreeMarker模板,无论是语法还是配置等,两者都有很多相似的地方。接下来,我们学习Spring Boot项目整合FreeMarker模板。
新建项目,在项目中加入Freemarker依赖,如代码清单3-24所示。
接下来配置FreeMarker模板属性,与Thymeleaf模板配置类似,唯一需要注意的是模板文件后缀配置的是FTL文件。配置文件如代码清单3-25所示。
代码清单3-25 FreeMarker项目-配置文件内容
## freemarker缓存是否开启 spring.freemarker.cache=false ## freemarker编码格式 spring.freemarker.charset=UTF-8 ## freemarker模板文件前缀 spring.freemarker.template-loader-path=classpath:/templates/ ## freemarker模板文件后缀,注意这里后缀名是.ftl spring.freemarker.suffix=.ftl
接下来,创建一个IndexController进行测试,内容如代码清单3-26所示。
在src/resources/templates下新建index.ftl(注意文件后缀),使用${msg}接收后来传送的数据,文件内容如代码清单3-27所示。
到这里,项目配置完成。启动项目,在浏览器上访问http://localhost:8080,可以看到如下结果:
Hi, Dalaoyang !
接下来介绍FreeMarker的常用语法。
(1)通用赋值:${xxx}格式
• 比如后台返回键值aaa=string,可以使用${aaa?string},输出“Hi , Dalaoyang !”。
• 比如后台返回键值aaa="2018-08-01 23:59",可以使用${aaa?string("EEE,MMM d,yy")},输出:星期二,八月 14,18。
• 比如后台返回键值aaa=false,可以使用${aaa?string("是","否")},输出:否。
(2)数值赋值:#{xxx}或者#{xxx;format}格式
后者format可以是以下格式(其中X和Y为数字):
• mX 小数部分最小X位,比如后台返回值aaa=3.782131,可以使用#{x;m2},输出3.78。
• MX 小数部分最大X位,比如后台返回值aaa=3.782131,可以使用#{x;M3},输出3.782。
• mXMY 小数部分最小X位,最大Y位,比如后台返回值aaa=3.782131,可以使用#{x;m1M3},输出3.782。
(3)常用内建函数
• html 对字符串进行HTML编码。
• lower_case 字符串转小写。
• upper_case 字符串转大写。
• trim 去前后空格。
• size 获取集合元素数量。
• int 获取数字部分。
(4)常用指令
• if elseif else 分支控制语句。
• list 输出集合数据。
• import 导入变量。
• include 类似于包含指令。
关于FreeMarker模板的内容到这里暂时结束了,毕竟这是一本关于Spring Boot的书,详细内容可以参考官方文档进行系统学习。
3.5.3 使用传统JSP
虽然Spring Boot不建议使用JSP作为渲染页面,但是一定要使用的话,也是可以的。
新建项目,加入JSP对应的依赖和JSTL表达式依赖,并且需要注意packaging内不是JAR而是WAR。pom文件代码如代码清单3-28所示。
然后,需要在src/mian下新建一个webapp目录,并且在其下新建WEB-INF/jsp文件夹,用于放置JSP页面,结构图如图3-4所示。
接下来,我们进行配置文件的配置,主要配置JSP页面文件前缀和后缀,基本上和Thymeleaf、FreeMarker类似,配置如代码清单3-29所示。
图3-4 JSP项目启动Log
代码清单3-29 JSP项目-配置文件内容
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
然后创建一个IndexController文件作为跳转,完整内容如代码清单3-30所示。
最后,在创建的JSP存放文件夹下创建一个index.jsp,其中${name}用于接收后台传来的值。JSP页面代码如代码清单3-31所示。
在项目目录下使用命令mvn spring-boot:run启动项目,在浏览器上访问http://localhost:8888/,可以看到如下结果:
Hello,dalaoyang
到这里,Spring Boot使用JSP介绍完了。对于Spring Boot还有很多模板框架可以使用,如果不是必需的,那么建议不要使用。