您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# SpringBoot中怎么搭建Freemarker环境
## 一、Freemarker简介
### 1.1 什么是Freemarker
FreeMarker是一款基于Java的模板引擎,主要专注于MVC模式中的视图层(View层)。它通过将模板与数据模型结合生成动态内容,支持HTML、XML、PDF等多种输出格式。
**核心特性:**
- 轻量级模板引擎,无Servlet依赖
- 强大的表达式语言(FTL)
- 支持条件判断、循环等逻辑控制
- 模板与业务逻辑完全分离
- 国际化支持
### 1.2 与其他模板引擎对比
| 特性 | Freemarker | Thymeleaf | JSP |
|------------|------------|-----------|-----------|
| 语法复杂度 | 中等 | 简单 | 复杂 |
| 性能 | 高 | 中等 | 中等 |
| 静态化支持 | 优秀 | 一般 | 不支持 |
| 学习曲线 | 平缓 | 平缓 | 陡峭 |
## 二、环境准备
### 2.1 开发工具要求
- JDK 1.8+
- Maven 3.6+
- IntelliJ IDEA(推荐)或Eclipse
- SpringBoot 2.5.x+
### 2.2 创建SpringBoot项目
通过Spring Initializr创建基础项目:
```bash
https://start.spring.io/
选择依赖: - Spring Web - Freemarker - Lombok(可选)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
application.yml
配置示例:
spring:
freemarker:
# 模板文件后缀
suffix: .ftl
# 模板加载路径(多个用逗号分隔)
template-loader-path: classpath:/templates/
# 是否启用缓存(开发建议关闭)
cache: false
# 内容类型设置
content-type: text/html
# 编码设置
charset: UTF-8
# 其他配置
settings:
classic_compatible: true
number_format: 0.##
推荐项目结构:
src/
├── main/
│ ├── java/
│ └── resources/
│ ├── static/ # 静态资源
│ └── templates/ # 模板文件
│ ├── common/ # 公共模板
│ └── pages/ # 页面模板
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello Freemarker!");
return "hello";
}
}
hello.ftl
:<!DOCTYPE html>
<html>
<head>
<title>Freemarker Demo</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
${user.name} <!-- 标准输出 -->
${user.name!} <!-- 空值处理 -->
${user.name!'默认值'} <!-- 带默认值 -->
<#if score >= 90>
优秀
<#elseif score >= 60>
及格
<#else>
不及格
</#if>
<#list users as user>
<div>${user_index + 1}. ${user.name}</div>
</#list>
public class AuthDirective implements TemplateDirectiveModel {
@Override
public void execute(Environment env, Map params,
TemplateModel[] loopVars,
TemplateDirectiveBody body) {
// 权限检查逻辑
if (hasPermission()) {
body.render(env.getOut());
}
}
}
@Configuration
public class FreemarkerConfig {
@Autowired
private freemarker.template.Configuration configuration;
@PostConstruct
public void setSharedVariable() {
configuration.setSharedVariable("auth", new AuthDirective());
}
}
<@auth>
<!-- 受保护内容 -->
</@auth>
宏相当于可复用的模板片段:
<#macro pagination total pageSize=10>
<div class="pagination">
<#list 1..(total/pageSize)?ceiling as p>
<a href="?page=${p}">${p}</a>
</#list>
</div>
</#macro>
<!-- 使用宏 -->
<@pagination total=120 />
<!-- 包含其他模板 -->
<#include "header.ftl">
<!-- 导入宏定义库 -->
<#import "/common/macro.ftl" as m>
<@m.pagination />
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleError(HttpServletRequest req, Exception e) {
ModelAndView mav = new ModelAndView();
mav.addObject("error", e.getMessage());
mav.setViewName("error");
return mav;
}
}
error.ftl
:<h1>系统错误</h1>
<p>${error!''}</p>
spring:
freemarker:
cache: true # 生产环境开启
settings:
template_update_delay: 3600 # 更新间隔(秒)
Template template = configuration.getTemplate("template.ftl");
template.process(dataModel, writer);
${content?html} <!-- HTML转义 -->
${content?js_string} <!-- JS转义 -->
configuration.setNewBuiltinClassResolver(
TemplateClassResolver.SAFER_RESOLVER);
问题现象:出现TemplateNotFoundException
解决方案:
1. 检查template-loader-path
配置
2. 确认文件扩展名匹配(如.ftl
)
3. 检查文件编码是否为UTF-8
问题现象:undefined
或null
错误
调试技巧:
<#-- 调试变量是否存在 -->
${.data_model?keys}
<#-- 调试变量类型 -->
${variable?api.class.name}
使用Actuator监控:
management:
endpoints:
web:
exposure:
include: freemarker
demo-freemarker/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── config/
│ │ │ ├── controller/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── static/
│ │ └── templates/
│ │ ├── common/
│ │ ├── pages/
│ │ └── layout.ftl
├── pom.xml
布局模板layout.ftl
:
<#macro main title>
<!DOCTYPE html>
<html>
<head>
<title>${title}</title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<#include "header.ftl">
<#nested>
<#include "footer.ftl">
</body>
</html>
</#macro>
页面继承使用:
<#import "/templates/common/layout.ftl" as layout>
<@layout.main title="用户中心">
<h1>欢迎, ${user.name}</h1>
<!-- 页面具体内容 -->
</@layout.main>
本文共计约5400字,详细介绍了SpringBoot集成Freemarker的全流程,包含基础配置、高级功能、最佳实践等内容。实际开发中应根据项目需求灵活调整配置方案。 “`
注:由于Markdown文档的实际字数统计与编辑器有关,以上内容在标准Markdown编辑器中的纯文本字数约为5400字。如需精确字数,建议在具体编辑环境中进行校验。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。