在最早的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://cloud.tencent.com/developer/article/1334223
在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>
1、创建模板文件夹
在resources文件夹下新建templates文件夹,作为模板根目录
完整路径:src/main/resources/templates
为什么文件夹名字一定要叫templates?
答:Spring Boot就是这么约定的,如果有需要,可以通过配置application.yml修改
spring:
freemarker:
template-loader-path: classpath:/templates/
2、在templates新建welcome.ftl文件
ftl就是Freemarker模板文件后缀,可以通过配置application.yml修改
<!DOCTYPE html>
<html>
<head>
<title>Welcome - ken.io</title>
</head>
<body>
Message: ${message}
</body>
</html>
使用${变量名}可以输出controller中返回的对象
在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");
启动项目&访问
访问:http://localhost:8080/welcome:
Message: Welcome to Spring Boot & 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 |
https://github.com/ken-io/springboot-course/tree/master/chapter-03-01