欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

freemaker

程序员文章站 2022-06-10 21:27:26
...

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

效果如下图所示: