请问freemarker模板引擎原理?

想实现类似freemarker的功能,如下代码:

          <h1>OK-ok-TIME=ZH</h1>
    
      <h2>这是h2</h2>
    
    <h3>欢迎 ${name}</h3>
    
    <#list list as u> 
        <h3>${u.name}</h3>
    </#list>

定义为 ${KEY} 为取值,如:${name} 这种简单的赋值取值,直接读取html文件为字符串,然后用字符串替换就行了。

但是复杂一点的,如上代码: 定义一个循环的命令 #list ,循环生成

标签,里面是u.name。这个要怎么做呢。freemarker 是怎么实现的呢。
我唯一能想到的方法是,把这一整个 #list 里面的内容在后端代码中生成,然后在页面中用 简单取值 ${KEY} 取值,但这样后端代码中又掺杂了前端代码,显然不行。