模板引擎-FreeMarker
发布日期:2021-05-08 20:22:05 浏览次数:25 分类:精选文章

本文共 2400 字,大约阅读时间需要 8 分钟。

模板引擎是前后端分离的重要工具,用于将数据与界面有效解耦。FreeMarker作为一款流行的模板引擎,采用FTL脚本语言,虽然执行效率较低,但在开发效率和扩展性方面表现优异。以下是FreeMarker的使用指南。

FreeMarker创建

首先,下载并引入freemarker-2.3.23.jar包,创建核心配置对象并加载模板。例如:

Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);configuration.setClassForTemplateLoading(Test.class, "");Template template = configuration.getTemplate("freemarker1.ftl");

创建一个数据集合并向模板输出:

Map
map = new HashMap<>();map.put("description", "百度");map.put("url", "http://www.baidu.com/");template.process(map, new OutputStreamWriter(System.out));

创建FreeMarker脚本时,文件名需以.ftl结尾,运行程序即可查看结果。

FTL数据获取

FreeMarker从Map集合获取数据,模板中可通过以下方式访问:

  • ${key}:获取key对应值,支持JavaBean属性或Map键值。
  • ${key!default}:获取默认值,若键不存在则使用default。
  • ${key?string(...)}:格式化输出,适用于日期和金额。

条件判断

使用<#if><#switch>标签进行条件判断:

<#if computer.state == 1>    状态:使用中<#elseif computer.state == 2>    状态:闲置<#elseif computer.state == 3>    状态:已作废

循环迭代

FreeMarker支持List和Map集合的迭代:

  • List循环:
<#list computers as c>    序号:${c_index + 1}    SN:${c.sn}    型号:${c.model}    状态:<#switch c.state>        <#case 1>            使用中        <#case 2>            闲置        <#case 3>            已作废    
用户:<#if c.user??> ${c.user}
采购日期:${c.dop?string("yyyy-MM-dd")} 采购价格:${c.price?string("0.00")}
  • Map循环:
<#list computer_map?keys as k>    ${k}-${computer_map[k].model}    ${computer_map[k].price?string("0.00")}

FreeMarker与Servlet结合开发

web.xml中配置FreeMarkerServlet:

freemarker
freemarker.ext.servlet.FreemarkerServlet
TemplatePath
/WEB-INF/ftl
DefaultEncoding
UTF-8
freemarker
*.ftl

FreeMarkerServlet支持将请求转发给FTL模板,开发时需在Servlet中设置数据并请求转发。

示例开发

创建EmployeeServlet:

@WebServlet(urlPatterns = "/list")public class EmployeeServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        List
list = new ArrayList<>(); list.add(new Employee(7731, "张三", "市场部", "客户代表", 8000f)); req.setAttribute("employees", list); req.getRequestDispatcher("/employee.ftl").forward(req, resp); }}

访问Servlet后,请求会转发至employee.ftl模板,显示员工信息。

上一篇:文件上传-FileUpload
下一篇:监听器-listener

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月09日 00时09分16秒