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工程,在类路径下加入FreeMarkerjar文件:freemarker.jar

   Freemarker下载地址为:http://www.freemarker.org/index.html

2.     编写beanBook,代码如下:

 

  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,代码如下:

 

  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,其代码如下:

 

  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文件,修改后的配置代码如下:

 

 

  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/bookfmq为配置的项目虚拟路径)

效果如下图所示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值