什么是freemarker?
FreeMarker是一种模板引擎,它可以用于生成各种类型的文档,比如HTML、XML、PDF、Word等。它可以通过简单的模板语法和数据模型来生成文档内容。与传统的JSP相比,FreeMarker的语法更加简洁和易读,并且可以很好地与前端框架结合使用。同时,FreeMarker还提供了一些高级功能,如国际化支持、条件语句、循环语句等,使得模板的编写更加方便和灵活。FreeMarker是一个开源的项目,使用Java语言编写,可以在不同的平台上运行。
springboot+freemarker配置文件
spring:
freemarker:
#freemarker和get一样会有缓存,如果为false那么就是清楚缓存。
cache: false
# 页面编码
charset: UTF-8
# 文档类型
content-type: text/html;charset=UTF-8
enabled: true
# 模板后缀
suffix: .ftl
# 模板加载路径
template-loader-path: classpath:/views/
# 配置模板里从哪里可以直接取request的属性 request是别名 request-context-attribute: request
request-context-attribute: request
# 配置将request和session中的键值添加到AbstractTemplateView类的renderMergedOutputModel方法中的model这个Map参数中 expose-request-attributes: true
expose-spring-macro-helpers: true
# 配置模板里是否可以直接取session的属性 true 是允许
expose-session-attributes: true
settings:
tag_syntax: auto_detect # 配置标签语法为自动,页面可以将 <> 改为
#[],为了区别 html 标签
template_update_delay: 0 # 模板更新时间,单位秒
default_encoding: UTF-8 # 默认编码字符集
output_encoding: UTF-8 # 模板输出编码字符集
locale: zh_CN # 本地化配置
date_format: yyyy-MM-dd # 日期格式化
time_format: HH:mm:ss # 时间格式化 datetime_format: yyyy-MM-dd HH:mm:ss # 日期时间格式化 number_format: #.## # 数字格式化
boolean_format: true,false # boolean格式化 # ignore,debug,html_debug,rethrow
# 1.TemplateExceptionHandler.IGNORE_HANDLER简单地压制所有异常
# 它对处理异常没有任何作用,也不会重新抛出异常,页面可以正常渲染,后台抛异常
# 2.TemplateExceptionHandler.DEBUG_HANDLER打印堆栈信息和重新抛出异常。这是默认的异常控制器
# 3.TemplateExceptionHandler.HTML_DEBUG_HANDLER和DEBUG_HANDLER相同 # 但是可以格式化堆栈跟踪信息,HTML页面,建议使用它而不是DEBUG_HANDLER
# 4.TemplateExceptionHandler.RETHROW_HANDLER简单重新抛出所有异常而不会做其他的 事情
# 5.使用自定义异常类实现TemplateExceptionHandler重写handleTemplateException方 法
template_exception_handler: html_debug
这里使用了freemarker模板引擎,他会自动配置视图解析器
视图解析器的prefix
就是template-loader-path,他的suffix就是suffix
。因此我们在Controller页面中返回String的时候视图解析器会自动配置。
@Controller
public class ControllerTest {
@RequestMapping("/{page}")
public String testDo(@PathVariable String page) throws IOException {
System.out.println(page);
return page;
}
}
返回的实际上是 /views/{page}.ftl
<#assign ctx=request.contextPath/>
这是FreeMarker模板语法的一个示例代码,其中assign指令可以用来创建模板变量,ctx是变量名,request.contextPath是变量的值。request是FreeMarker默认提供的一个全局变量对象,可以用来获取HTTP请求相关的信息。在这段示例代码中,我们使用request对象的contextPath属性来获取请求的上下文路径,并将其赋值给ctx变量。通过这种方式,我们可以在模板中使用ctx变量来引用上下文路径
,而不必在每个需要使用上下文路径的地方都重复编写该代码。
不是基于
因此他需要
jsp中base标签:
他走的是全路径。协议://服务器名:服务器端口号/上下文路径/
<%
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
但这个base是基于的意思,已知根路径在webapps下,那么这个base就是截止到webapps,因此在webapps下的路径照样还是写
<#include “文件名.ftl”/>
这个和sql的 <include refid="Base_Column_List" />
效果一样,只不过这个是sql,标题的是文件而已,也就是公用模板的提取。