Freemarker 使用

本文介绍Freemarker模板引擎的应用场景及原理,包括在高并发情况下的使用、与Redis结合的方式,以及如何通过Freemarker实现静态页面的生成。文章还详细展示了Freemarker的基本语法、日期格式化技巧、null值处理方法,并提供了Spring框架下整合Freemarker的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

freemarker使用场景
1.并发量高
2.单纯使用redis不能满足需求
目前企业中主要用Freemarker做静态页面或是页面展示
freemarker是java语言编写的模板引擎,与web容器无关

freemarker原理图
freemarker原理图

FreeMarker语法

  • 1.访问对象
  • ${person.id}
    2.访问list
list <#list persons as p>
              ${p.id}/${p.name}
     </#list>

3.获取当前选代的索引:
<#list persons as p>
${p_index}
</#list>

4.if

 <#list persons as p>       
      <#if p_index%2 != 0 || p_index==0>            
              <span style="color:red">
                index:${p_index}|${p.id}:${p.name}<br>            
              </span>       
      <#else>           
              <span style="color:blue">
                index:${p_index}|${p.id}:${p.name}<br>            
              </span>       
      </#if> 
     </#list>

5.日期类型

 默认格式 1date ${key?date}
                   2:datetime ${key?datetime}  
                   3time ${key?time}
   自定义格式 ${key?string("yyyy-MM-dd HH:mm:ss")}  

6.null处理

   1.${val!}
   2.${val!默认值}
   3.<#if curdate ??> 属性不为空 <#else> 属性为空 <#/if>

7.include

    <#include "/include/head.html">

Spring整合freemarker步骤
1.添加Maven依赖

 <dependency>   
 <groupId>org.springframework</groupId>      
 <artifactId>spring-context-support</artifactId>
    <version>4.1.3.RELEASE</version> </dependency> <dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>      
    <version>2.3.23</version>
   </dependency>

2.配置bean

    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
    <property name="defaultEncoding" value="UTF-8" /> </bean>

3.写模板

4.写Controller

@Controller

public class HtmlGenController {
    @Autowired
    private FreeMarkerConfig freeMarkerConfig;

    @RequestMapping("/genhtml")
    @ResponseBody
    public String genHtml() throws Exception {

        // 生成静态页面
        Configuration configuration = freeMarkerConfig.getConfiguration();
        Template template = configuration.getTemplate("hello.ftl");
        Map data = new HashMap<>();
        data.put("hello", "hello freemarker");
        Writer out = new FileWriter(new File("G:/freemarker/out/test.html"));
        template.process(data, out);
        out.close();
        // 返回结果
        return "OK";
    }
}

运行后生成静态test.html文件

### 使用FreeMarker模板引擎进行Java开发 #### 配置环境 为了使用FreeMarker,在项目中需引入依赖库。对于Maven项目,可以在`pom.xml`文件中加入如下配置: ```xml <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency> ``` #### 初始化Configuration对象 创建并初始化`Configuration`实例来设置模板路径和其他参数。 ```java import freemarker.template.Configuration; import freemarker.template.Template; public class TemplateEngine { private Configuration cfg; public TemplateEngine() throws Exception { // 创建一个新的配置实例 cfg = new Configuration(Configuration.VERSION_2_3_30); // 设置模板加载器,默认从类路径下读取模板文件 cfg.setClassForTemplateLoading(this.getClass(), "/templates/"); cfg.setDefaultEncoding("UTF-8"); cfg.setLocale(Locale.US); cfg.setOutputFormat(HtmlMarkupOutputFormat.INSTANCE); } } ``` #### 加载模板与数据模型处理 通过`cfg.getTemplate()`方法获取指定名称的模板,并准备要传递给模板的数据模型。 ```java Map<String, Object> dataModel = Maps.newHashMap(); dataModel.put("title", "Hello World!"); dataModel.put("message", "Welcome to FreeMarker!"); // 获取名为 'index.html' 的模板 Template temp = cfg.getTemplate("index.html"); Writer out = new OutputStreamWriter(System.out); try { // 将数据渲染到输出流 temp.process(dataModel, out); } finally { out.flush(); } ``` 当访问不存在变量或null值时,FreeMarker会将其视为错误终止执行[^3]。因此建议开发者在编写模板前充分考虑这些情况,可以利用内置函数如`${variable!default_value}`为可能为空的对象提供默认显示内容。 #### 处理HTML资源位置约定优于配置原则 按照惯例而非配置的方式工作意味着框架能够自动识别位于特定目录下的`.html`文档作为视图页面而无需额外设定。例如,如果定义了常量`DEFAULT_PREFIX="classpath:/templates/"` 和 `DEFAULT_SUFFIX=".html"` ,那么只需编辑resources/templates 文件夹内的 HTML 文件即可让Thymeleaf 自动呈现它们[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值