FreeMarker 小例子
转载请注明:来自http://blog.csdn.net/M_ChangGong/?作者:张燕广
?
FreeMarker是什么?
?FreeMarker是一个”模板引擎”,是一个基于模板技术的生成文本输出的一个通用工具,是一个JAVA的包,是一个JAVA程序员可以使用的类库。
FreeMarker不是什么?
?FreeMarker不是一个对最终用户的应用程序.,不是一个WEB应用程序框架.。
FreeMarker能做什么?
FreeMarker是设计为可以生成WEB PAGES.它是基于SERVLET遵循MVC模式的致力于降低、分离网页设计人员和程序员的耦合。
作为WEB应用框架的一个组件,FREEMARKER引擎本身并不了解HTTP或者SERVLETS,它只不过是利用模板加上数据生成文本页面而已,也可以在FreeMarker模板中使用JSP标签。
下面编写一个简单的FreeMarker例子。
1.?????创建一个web工程,在类路径下加入FreeMarker的jar文件:freemarker.jar。
???Freemarker下载地址为:http://www.freemarker.org/index.html
2.?????编写bean类Book,代码如下:
?
view plain- package?com.zyg.fm.bean;??
- ??
- import?java.util.Date;??
- ??
- public?class?Book?{??
- ????private?String?bookId;??
- ????private?String?bookName;??
- ????private?String?author;??
- ????private?Double?price;??
- ????private?Date?publishDate;??
- ????public?String?getBookId()?{??
- ????????return?bookId;??
- ????}??
- ????public?void?setBookId(String?bookId)?{??
- ????????this.bookId?=?bookId;??
- ????}??
- ????public?String?getBookName()?{??
- ????????return?bookName;??
- ????}??
- ????public?void?setBookName(String?bookName)?{??
- ????????this.bookName?=?bookName;??
- ????}??
- ????public?String?getAuthor()?{??
- ????????return?author;??
- ????}??
- ????public?void?setAuthor(String?author)?{??
- ????????this.author?=?author;??
- ????}??
- ????public?Double?getPrice()?{??
- ????????return?price;??
- ????}??
- ????public?void?setPrice(Double?price)?{??
- ????????this.price?=?price;??
- ????}??
- ????public?Date?getPublishDate()?{??
- ????????return?publishDate;??
- ????}??
- ????public?void?setPublishDate(Date?publishDate)?{??
- ????????this.publishDate?=?publishDate;??
- ????}??
- }??
?
3.?????编写servlet,代码如下:
?
view plain- package?com.zyg.fm.servlet;??
- ??
- import?java.util.*;??
- import?java.io.*;??
- import?javax.servlet.*;??
- import?javax.servlet.http.*;??
- ??
- import?com.zyg.fm.bean.Book;??
- ??
- import?freemarker.template.*;??
- ??
- /**?
- ?*?@author?张燕广?
- ?*/??
- public?class?BookServlet?extends?HttpServlet??
- {??
- ????private?Configuration?cfg;???
- ??????
- ????public?void?init()???
- ????{??
- ????????//初始化FreeMarker配置??
- ????????//创建一个Configuration实例??
- ????????cfg?=?new?Configuration();??
- ????????//设置FreeMarker模版文件的位置??
- ????????cfg.setServletContextForTemplateLoading(getServletContext(),?"WEB-INF/templates");??
- ????}??
- ??????
- ????public?void?service(HttpServletRequest?request,?HttpServletResponse?response)??
- ????????throws?ServletException,?IOException??
- ????{??????????
- ????????//获取数据??
- ????????List<Book>?bookList?=?getBookList();??
- ??????????
- ????????Map?map?=?new?HashMap();??
- ????????map.put("bookList",?bookList);????
- ????????map.put("message","您好,张燕广");??
- ????????//取得模版文件??
- ????????Template?t?=?cfg.getTemplate("bookList.ftl");????
- ??????????
- ????????//?开始准备生成输出??
- ????????//?使用模版文件的charset作为本页面的charset??
- ????????System.out.println(t.getEncoding());??
- ????????response.setContentType("text/html;?charset="+t.getEncoding());??
- ????????Writer?out?=?response.getWriter();??
- ??????????
- ????????//合并数据模型和模版,并将结果输出到out中??
- ????????try??
- ????????{??
- ????????????t.process(map,?out);??
- ????????}???
- ????????catch?(TemplateException?e)??
- ????????{??
- ????????????throw?new?ServletException("emplate模版中出现错误!",?e);??
- ????????}??
- ????}??
- ??????
- ????/**?
- ?????*?模拟从数据库获取数据的操作?
- ?????*?@return?
- ?????*/??
- ????private?List<Book>?getBookList(){??
- ????????List<Book>?bookList?=?new?ArrayList<Book>();??
- ????????Book?book?=?null;??
- ????????for(int?i=0;i<10;i++){??
- ????????????book?=?new?Book();??
- ????????????book.setBookId(String.valueOf(i+1));??
- ????????????book.setBookName("FreeMarker学习之"+(i+1));??
- ????????????book.setAuthor("changong"+(i+1));??
- ????????????book.setPrice(new?Double(100/(i+1)));??
- ????????????book.setPublishDate(new?Date());??
- ????????????bookList.add(book);??
- ????????}??
- ????????return?bookList;??
- ????}??
- }??
?
?
4.在WEB-INF下创建存放FreeMarker文件的目录:templates,在该目录下载FreeMarker模板文件:bookList.ftl,其代码如下:
?
view plain- <html>??
- <head>??
- ??<title>书籍列表</title>??
- </head>??
- <body>??
- ??<center>??
- ??????<font?color="blue">??
- ????????${message}!?这是FreeMarker学习小例子!!!?<br>??
- ??????<hr>??
- ??????<h1>??????
- ????????书籍列表??
- ??????</h1>??
- ??????</font>??
- ??</center>??
- ??<table?border="1"?width="100%"?align="center">??
- ??<tr?align="center">??
- ????<td>书号</td>??
- ????<td>书名</td>??
- ????<td>作者</td>??
- ????<td>价格</td>??
- ????<td>出版日期</td>??
- ??</tr>??
- ??<#list?bookList?as?book>??
- ??<#if?book_index%2==0>??
- ????<tr?style="color:red"?mce_style="color:red"?align="center"?id="tr_${book_index}">??
- ??<#else>??
- ????<tr?style="color:blue"?mce_style="color:blue"?align="center"?id="tr_${book_index}">??
- ??</#if>??
- ????<td>${book.bookId}</td>??
- ????<td>${book.bookName}</td>??
- ????<td>${book.author}</td>??
- ????<td>${book.price?string.currency}</td>??
- ????<td>${book.publishDate?string("yyyy年MM月dd日")}</td>??
- ???</tr>??
- ??</#list>??
- ??</table>??
- </body>??
- </html>???
?
5.修改web.xml文件,修改后的配置代码如下:
?
?
view plain- <?xml?version="1.0"?encoding="ISO-8859-1"?>??
- ??
- <!DOCTYPE?web-app??
- ????PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"??
- ????"http://java.sun.com/dtd/web-app_2_3.dtd">??
- ??
- <web-app>??
- ????<servlet>??
- ????????<servlet-name>book</servlet-name>??
- ????????<servlet-class>com.zyg.fm.servlet.BookServlet</servlet-class>??
- ????</servlet>??
- ????<servlet-mapping>??
- ????????<servlet-name>book</servlet-name>??
- ????????<url-pattern>/book</url-pattern>??
- ????</servlet-mapping>??
- ????<welcome-file-list>??
- ????????<welcome-file>index.jsp</welcome-file>??
- ????</welcome-file-list>??
- </web-app>??
?
?
6.访问示例代码,在浏览器地址栏输入http://localhost:8080/fmq/book(fmq为配置的项目虚拟路径)
效果如下图所示:

?