建立web项目,拷贝freemarker的jar文件到类路径,其他步骤略。
首先配置web.xml,添加freemarker解析的Servlet配置,内容如下
- <servlet>
- <servlet-name>freemarker</servlet-name>
- <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
- <init-param>
- <param-name>TemplatePath</param-name>
- <param-value>/</param-value>
- </init-param>
- <init-param>
- <param-name>NoCache</param-name>
- <param-value>true</param-value>
- </init-param>
- <init-param>
- <param-name>ContentType</param-name>
- <param-value>text/html;charset=UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>template_update_delay</param-name>
- <param-value>0</param-value>
- </init-param>
- <init-param>
- <param-name>default_encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>number_format</param-name>
- <param-value>0.##########</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>freemarker</servlet-name>
- <url-pattern>*.ftl</url-pattern>
- </servlet-mapping>
添加一个测试用的Servlet,代码如下:
- package test.servlet;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class TestFreemarker extends HttpServlet {
- private static final long serialVersionUID = 1L;
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- String strValue = "this is String";
- Date myDate = new Date();
- Object[] objectArray = new Object[]{1,"str",1.2};
- Set<Object> setData = new HashSet<Object>();
- setData.add("dataValue1");
- setData.add("dataValue2");
- setData.add("dataValue3");
- List<String> strList = new ArrayList<String>();
- strList.add("字符串1");
- strList.add("字符串2");
- strList.add("字符串3");
- Map<String,Object> map = new HashMap<String, Object>();
- map.put("key1", "value1");
- map.put("key2", "value2");
- map.put("key3", "value3");
- req.setAttribute("strValue", strValue);
- req.setAttribute("objectArray", objectArray);
- req.setAttribute("strList", strList);
- req.setAttribute("map", map);
- req.setAttribute("myDate", myDate);
- req.setAttribute("setData", setData);
- req.getRequestDispatcher("/WEB-INF/view/freemarker/test.ftl").forward(req, resp);
- }
- }
配置此Servlet到web.xml中,增加如下内容到web.xml文件中:
- <servlet>
- <servlet-name>test</servlet-name>
- <servlet-class>test.servlet.TestFreemarker</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>test</servlet-name>
- <url-pattern>/test</url-pattern>
- </servlet-mapping>
在/WEB-INF/view/freemarker目录下建立文件test.ftl,内容如下:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
- <head>
- <title>test!</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- </head>
- <body>
- <div>
- 直接显示字符串<br />
- String:${strValue}<br/>
- <hr/>
- </div>
- <div>
- 显示日期
- date:${myDate?date}<br/>
- <hr/>
- 显示时间
- time:${myDate?time}<br/>
- <hr/>
- 显示时间戳
- datetime:${myDate?datetime}<br/>
- <hr/>
- </div>
- <div>
- 访问对象数组
- ObjectArray:
- ${objectArray[0]},${objectArray[1]},${objectArray[2]}
- <br />
- <hr/>
- </div>
- <div>
- 遍历Set中的元素
- SetData:<br />
- <#list setData as value>
- ${value}
- </#list>
- <hr/>
- </div>
- <div>
- 遍历List中的元素
- strList:<br/>
- <#list strList as strValue >
- <#if strValue_index == 0>
- ${strValue} is first element
- <#elseif !strValue_has_next>
- ${strValue} is last element
- <#else>
- ${strValue}
- </#if>
- <br />
- </#list>
- <hr/>
- </div>
- <div>
- 获取map中的值
- <br/>
- map:
- key1=${map.key1},key2=${map.key2},key3=${map.key3}
- <hr/>
- </div>
- <#include "foot.html">
- </body>
- </html>
模板中包含的foot.html,在和test.ftl相同的目录下,文件内容如下
- <div style="margin-top: 50px;text-align: center;font-size: 12px">
- <hr />
- this is foot
- </div>
运行此项目访问/test路径,输出内容如下:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
- <head>
- <title>test!</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- </head>
- <body>
- <div>
- 直接显示字符串<br />
- String:this is String<br/>
- <hr/>
- </div>
- <div>
- 显示日期
- date:2011-3-18<br/>
- <hr/>
- 显示时间
- time:17:21:44<br/>
- <hr/>
- 显示时间戳
- datetime:2011-3-18 17:21:44<br/>
- <hr/>
- </div>
- <div>
- 访问对象数组
- ObjectArray:
- 1,str,1.2
- <br />
- <hr/>
- </div>
- <div>
- 遍历Set中的元素
- SetData:<br />
- dataValue2
- dataValue1
- dataValue3
- <hr/>
- </div>
- <div>
- 遍历List中的元素
- strList:<br/>
- 字符串1 is first element
- <br />
- 字符串2
- <br />
- 字符串3 is last element
- <br />
- <hr/>
- </div>
- <div>
- 获取map中的值
- <br/>
- map:
- key1=value1,key2=value2,key3=value3
- <hr/>
- </div>
- <div style="margin-top: 50px;text-align: center;font-size: 12px">
- <hr />
- this is foot
- </div></body>
- </html>
freemarker的list指令,不能遍历如Object[]类型的对象数组。但可以遍历List和Set