一、前言
为什么要使用模板引擎?
在最早的Java Web应用中,最为广泛使用的就是JSP,但是JSP已经是陈旧的技术了,ken.io觉得JSP主要有三个问题:
1、视图代码不能与Java代码完全分离,如果再JSP页面写Java代码维护成本高
2、无法实现页面继承工程,实现模板页的方式蹩脚
3、由于一些已知问题,Spring Boot官方不建议,比如:Spring Boot+JSP打成jar包会有问题
所以,ken.io选择了较为流行的Freemarker,本文我们介绍Spring Boot+Freemarker的基本使用
本项目构建基于:https://ken.io/note/springboot-course-basic-helloworld
二、操作步骤
1、引入Freemarker
在pom.xml文件的dependencies引入
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
</dependencies>
2、创建Freemarker模板
- 创建模板文件夹
在resources文件夹下新建templates文件夹,作为模板根目录
完整路径:src/main/resources/templates
为什么文件夹名字一定要叫templates?
答:Spring Boot就是这么约定的,如果有需要,可以通过配置application.yml修改
spring:
freemarker:
template-loader-path: classpath:/templates/
- 在templates新建welcome.ftl文件
ftl就是Freemarker模板文件后缀,可以通过配置application.yml修改
<!DOCTYPE html>
<html>
<head>
<title>Welcome - ken.io</title>
</head>
<body>
Message: ${message}
</body>
</html>
使用${变量名}可以输出controller中返回的对象
3、创建Welcome访问入口
在HomeController中增加函数
@RequestMapping("/")
@ResponseBody
String index() {
return "Hello World!";
}
@RequestMapping("/welcome")
ModelAndView welcome(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("welcome");
modelAndView.addObject("message","Welcome to Spring Boot & Freemarker");
return modelAndView;
}
对比index函数,主要发生了以下几个变化:
1、去掉@
ResponseBody注解,如果使用该注解,返回结果会直接输出,而不是使用模板引擎渲染
2、使用ModelAndView对象,指定视图名&添加视图对象
对于setViewName函数,如果视图的路径是templates/home/index.ftl
那么使用方式应该是:
modelAndView.setViewName("home/index");
4、启动&访问
启动项目&访问
访问:http://localhost:8080/welcome:
Message: Welcome to Spring Boot & Freemarker
三、备注
1、Freemarker 常用配置
配置项 | 说明 |
---|---|
spring.freemarker.template-loader-path | 模板根目录,例如:classpath:/templates/ |
spring.freemarker.cache | 是否启用缓存(true/false) |
spring.freemarker.charset | 字符编码 |
spring.freemarker.content-type | 内容类型,例如:text/html |
spring.freemarker.suffix | 模板文件后缀,默认为.ftl |
2、附录
- 本文参考:
- 示例代码地址
https://github.com/ken-io/springboot-course/tree/master/chapter-03-01
- 相关阅读
Freemarker母版页示例:https://ken.io/note/freemarker-skill-layout