概述

英文文档:https://freemarker.apache.org/
中文文档翻译:http://freemarker.foofun.cn/

FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具,是一个Java类库。
FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,将视图从业务逻辑中抽离处理,业务中不再包括视图的展示,而是将视图交给 FreeMarker 来输出。
FreeMarker - 图1
虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMarker 生成页面,通过模板显示准备的数据。
FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件。FreeMarker与容器无关,因为它并不知道HTTP或Servlet。FreeMarker同样可以应用于非Web应用程序环境。

简单使用

1、引入相关依赖 pom.xml:

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.freemarker</groupId>
  4. <artifactId>freemarker</artifactId>
  5. <version>2.3.30</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>javax.servlet</groupId>
  9. <artifactId>javax.servlet-api</artifactId>
  10. <version>4.0.1</version>
  11. <scope>provided</scope>
  12. </dependency>
  13. </dependencies>
  14. <build>
  15. <finalName>freemarker</finalName>
  16. <!-- 插件地址
  17. tomcat:http://tomcat.apache.org/maven-plugin.html
  18. jetty:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html
  19. -->
  20. <plugins>
  21. <plugin>
  22. <groupId>org.apache.maven.plugins</groupId>
  23. <artifactId>maven-war-plugin</artifactId>
  24. <version>3.3.1</version>
  25. </plugin>
  26. </plugins>
  27. </build>

2、修改 web 配置 web.xml:

  1. <!-- FreeMarker的Servlet配置 -->
  2. <servlet>
  3. <servlet-name>freemarker</servlet-name>
  4. <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
  5. <init-param>
  6. <!-- 模板路径 -->
  7. <param-name>TemplatePath</param-name>
  8. <!-- 默认在webapp目录下查找对应的模板文件 -->
  9. <param-value>/</param-value>
  10. </init-param>
  11. <init-param>
  12. <!-- 模板默认的编码:UTF-8 -->
  13. <param-name>default_encoding</param-name>
  14. <param-value>UTF-8</param-value>
  15. </init-param>
  16. </servlet>
  17. <servlet-mapping>
  18. <servlet-name>freemarker</servlet-name>
  19. <!-- 处理所有以.ftl结尾的文件;ftl是freemarker默认的文件后缀 -->
  20. <url-pattern>*.ftl</url-pattern>
  21. </servlet-mapping>

3、编写Servlet:

  1. @WebServlet("/free01")
  2. public class DemoController extends HttpServlet {
  3. @Override
  4. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  5. // 添加数据
  6. request.setAttribute("msg","Hello FreeMarker!");
  7. // 请求转发跳转到ftl文件中
  8. request.getRequestDispatcher("templates/free01.ftl").forward(request, response);
  9. }
  10. @Override
  11. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. this.doGet(request, response);
  13. }
  14. }

4、在 webapp/ 下创建 templates/ 文件夹,同时创建 free01.ftl:

  1. <!-- html注释语法,浏览器查看源码可见 -->
  2. <#-- freemarker注释语法:浏览器中查看源码可见
  3. 且在freemarker中,html所有标签以及cssjs均适用
  4. -->
  5. ${msg}

5、配置tomcat,在浏览器访问:http://localhost:8080/free01