freemaker

FreeMaker第一步
转载请注明:来自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为配置的项目虚拟路径)

效果如下图所示:



相关推荐