FreeMarker
FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具,是一个Java类库。
通常由Java程序准备要显示的数据,交由FreeMarker调用对应的模板生成页面。
FreeMarker不是一个Web应用框架,而适合作为Web应用框架的一个组件。
FreeMarker与容器无关,因为它并不知道HTTP或者Servlet。FreeMarker同样可以应用于非Web应用程序环境。
FreeMarker更适合作为Model2框架(例如Struts、SpringMVC)的视图组件,也可以在模板中使用JSP标记库。
环境搭建
创建基于Maven的Web项目(
maven-archetype-webapp)完善Maven项目目录,添加
java、resources目录在pom中加入FreeMarker依赖
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><!-- FreeMarker依赖 --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency></dependencies>
- FreeMarker的核心是一个Servlet,所以需要在web.xml中配置FreeMarker的Servlet
<servlet><servlet-name>freemarker</servlet-name><!-- FreeMarker的核心Servlet --><servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class><init-param><!-- FreeMarker的.ftl模板文件存放路径 --><param-name>TemplatePath</param-name><param-value>/template</param-value></init-param><init-param><!-- 模板默认编码 --><param-name>default_encoding</param-name><param-value>UTF-8</param-value></init-param></servlet><servlet-mapping><servlet-name>freemarker</servlet-name><!-- 处理所有以.ftl结尾的文件请求。ftl是freemarker的模板文件默认后缀,即 Freemarker Template Language --><url-pattern>*.ftl</url-pattern></servlet-mapping>
示例程序
- 编写一个Servlet,用来向容器中添加数据
@WebServlet("/hello")public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");// 存放数据req.setAttribute("msg", "hello freemarker");// 将请求转发给hello.ftl, 然后便可以走到FreemarkerServlet,FreemarkerServlet会调用hello.ftl模板进行渲染展示req.getRequestDispatcher("hello.ftl").forward(req, resp);}}
在
webapp下创建template文件夹(即servlet中配置的TemplatePath),用于存放ftl模板文件。创建
hello.ftl文件<#-- 展示容器中的msg -->${msg}
- 启动项目,访问
/hello即可看到页面展示
