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 {
@Override
protected 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
即可看到页面展示