读书人

FreeMarker 小事例

发布时间: 2012-10-09 10:21:45 作者: rapoo

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
  1. package?com.zyg.fm.bean;??
  2. ??
  3. import?java.util.Date;??
  4. ??
  5. public?class?Book?{??
  6. ????private?String?bookId;??
  7. ????private?String?bookName;??
  8. ????private?String?author;??
  9. ????private?Double?price;??
  10. ????private?Date?publishDate;??
  11. ????public?String?getBookId()?{??
  12. ????????return?bookId;??
  13. ????}??
  14. ????public?void?setBookId(String?bookId)?{??
  15. ????????this.bookId?=?bookId;??
  16. ????}??
  17. ????public?String?getBookName()?{??
  18. ????????return?bookName;??
  19. ????}??
  20. ????public?void?setBookName(String?bookName)?{??
  21. ????????this.bookName?=?bookName;??
  22. ????}??
  23. ????public?String?getAuthor()?{??
  24. ????????return?author;??
  25. ????}??
  26. ????public?void?setAuthor(String?author)?{??
  27. ????????this.author?=?author;??
  28. ????}??
  29. ????public?Double?getPrice()?{??
  30. ????????return?price;??
  31. ????}??
  32. ????public?void?setPrice(Double?price)?{??
  33. ????????this.price?=?price;??
  34. ????}??
  35. ????public?Date?getPublishDate()?{??
  36. ????????return?publishDate;??
  37. ????}??
  38. ????public?void?setPublishDate(Date?publishDate)?{??
  39. ????????this.publishDate?=?publishDate;??
  40. ????}??
  41. }??

?

3.?????编写servlet,代码如下:

?

view plain
  1. package?com.zyg.fm.servlet;??
  2. ??
  3. import?java.util.*;??
  4. import?java.io.*;??
  5. import?javax.servlet.*;??
  6. import?javax.servlet.http.*;??
  7. ??
  8. import?com.zyg.fm.bean.Book;??
  9. ??
  10. import?freemarker.template.*;??
  11. ??
  12. /**?
  13. ?*?@author?张燕广?
  14. ?*/??
  15. public?class?BookServlet?extends?HttpServlet??
  16. {??
  17. ????private?Configuration?cfg;???
  18. ??????
  19. ????public?void?init()???
  20. ????{??
  21. ????????//初始化FreeMarker配置??
  22. ????????//创建一个Configuration实例??
  23. ????????cfg?=?new?Configuration();??
  24. ????????//设置FreeMarker模版文件的位置??
  25. ????????cfg.setServletContextForTemplateLoading(getServletContext(),?"WEB-INF/templates");??
  26. ????}??
  27. ??????
  28. ????public?void?service(HttpServletRequest?request,?HttpServletResponse?response)??
  29. ????????throws?ServletException,?IOException??
  30. ????{??????????
  31. ????????//获取数据??
  32. ????????List<Book>?bookList?=?getBookList();??
  33. ??????????
  34. ????????Map?map?=?new?HashMap();??
  35. ????????map.put("bookList",?bookList);????
  36. ????????map.put("message","您好,张燕广");??
  37. ????????//取得模版文件??
  38. ????????Template?t?=?cfg.getTemplate("bookList.ftl");????
  39. ??????????
  40. ????????//?开始准备生成输出??
  41. ????????//?使用模版文件的charset作为本页面的charset??
  42. ????????System.out.println(t.getEncoding());??
  43. ????????response.setContentType("text/html;?charset="+t.getEncoding());??
  44. ????????Writer?out?=?response.getWriter();??
  45. ??????????
  46. ????????//合并数据模型和模版,并将结果输出到out中??
  47. ????????try??
  48. ????????{??
  49. ????????????t.process(map,?out);??
  50. ????????}???
  51. ????????catch?(TemplateException?e)??
  52. ????????{??
  53. ????????????throw?new?ServletException("emplate模版中出现错误!",?e);??
  54. ????????}??
  55. ????}??
  56. ??????
  57. ????/**?
  58. ?????*?模拟从数据库获取数据的操作?
  59. ?????*?@return?
  60. ?????*/??
  61. ????private?List<Book>?getBookList(){??
  62. ????????List<Book>?bookList?=?new?ArrayList<Book>();??
  63. ????????Book?book?=?null;??
  64. ????????for(int?i=0;i<10;i++){??
  65. ????????????book?=?new?Book();??
  66. ????????????book.setBookId(String.valueOf(i+1));??
  67. ????????????book.setBookName("FreeMarker学习之"+(i+1));??
  68. ????????????book.setAuthor("changong"+(i+1));??
  69. ????????????book.setPrice(new?Double(100/(i+1)));??
  70. ????????????book.setPublishDate(new?Date());??
  71. ????????????bookList.add(book);??
  72. ????????}??
  73. ????????return?bookList;??
  74. ????}??
  75. }??

?

?

4.在WEB-INF下创建存放FreeMarker文件的目录:templates,在该目录下载FreeMarker模板文件:bookList.ftl,其代码如下:

?

view plain
  1. <html>??
  2. <head>??
  3. ??<title>书籍列表</title>??
  4. </head>??
  5. <body>??
  6. ??<center>??
  7. ??????<font?color="blue">??
  8. ????????${message}!?这是FreeMarker学习小例子!!!?<br>??
  9. ??????<hr>??
  10. ??????<h1>??????
  11. ????????书籍列表??
  12. ??????</h1>??
  13. ??????</font>??
  14. ??</center>??
  15. ??<table?border="1"?width="100%"?align="center">??
  16. ??<tr?align="center">??
  17. ????<td>书号</td>??
  18. ????<td>书名</td>??
  19. ????<td>作者</td>??
  20. ????<td>价格</td>??
  21. ????<td>出版日期</td>??
  22. ??</tr>??
  23. ??<#list?bookList?as?book>??
  24. ??<#if?book_index%2==0>??
  25. ????<tr?style="color:red"?mce_style="color:red"?align="center"?id="tr_${book_index}">??
  26. ??<#else>??
  27. ????<tr?style="color:blue"?mce_style="color:blue"?align="center"?id="tr_${book_index}">??
  28. ??</#if>??
  29. ????<td>${book.bookId}</td>??
  30. ????<td>${book.bookName}</td>??
  31. ????<td>${book.author}</td>??
  32. ????<td>${book.price?string.currency}</td>??
  33. ????<td>${book.publishDate?string("yyyy年MM月dd日")}</td>??
  34. ???</tr>??
  35. ??</#list>??
  36. ??</table>??
  37. </body>??
  38. </html>???

?

5.修改web.xml文件,修改后的配置代码如下:

?

?

view plain
  1. <?xml?version="1.0"?encoding="ISO-8859-1"?>??
  2. ??
  3. <!DOCTYPE?web-app??
  4. ????PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"??
  5. ????"http://java.sun.com/dtd/web-app_2_3.dtd">??
  6. ??
  7. <web-app>??
  8. ????<servlet>??
  9. ????????<servlet-name>book</servlet-name>??
  10. ????????<servlet-class>com.zyg.fm.servlet.BookServlet</servlet-class>??
  11. ????</servlet>??
  12. ????<servlet-mapping>??
  13. ????????<servlet-name>book</servlet-name>??
  14. ????????<url-pattern>/book</url-pattern>??
  15. ????</servlet-mapping>??
  16. ????<welcome-file-list>??
  17. ????????<welcome-file>index.jsp</welcome-file>??
  18. ????</welcome-file-list>??
  19. </web-app>??

?

?

6.访问示例代码,在浏览器地址栏输入http://localhost:8080/fmq/book(fmq为配置的项目虚拟路径)

效果如下图所示:

FreeMarker 小事例

?

读书人网 >编程

热点推荐