小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Java Web開發(fā)——FreeMarker模板使用方法講解

FreeMarker簡介

FreeMarker模板文件主要由如下4個部分組成:

1,文本:直接輸出的部分

2,注釋:<#-- ... -->格式部分,不會輸出

3,插值:${...}#{...}格式的部分,將使用數(shù)據(jù)模型中的部分替代輸出

4,FTL指令:FreeMarker指定,HTML標記類似,名字前加#予以區(qū)分,不會輸出

 

下面是一個FreeMarker模板的例子,包含了以上所說的4個部分

<html><br>

<head><br>

<title>Welcome!</title><br>

</head><br>

<body><br>

<#-- 注釋部分 --><br>

<#-- 下面使用插值 -->

<h1>Welcome ${user} !</h1><br>

<p>We have these animals:<br>

<u1><br>

<#-- 使用FTL指令 -->

<#list animals as being><br>

   <li>${being.name} for ${being.price} Euros<br>

<#list><br>

<u1><br>

</body><br>

</html>

 

java程序中使用FreeMarker

FreeMarker的模板就是一個.ftl文本文件,在該文件中使用了一些FreeMarker的特別標記,這些標記會動態(tài)顯示,或者控制程序輸出,如下面的模板文件代碼:

${name},你好!${msg}

這里類似于${}的就是動態(tài)的內(nèi)容,稱作"插值".

為了使用FreeMarker來將數(shù)據(jù)模型中的值合并到模板文件中,可按如下步驟進行:

1,創(chuàng)建Configuration實例,該實例負責管理FreeMarker的模板加載路徑,負責生成模板實例

2,使用Configuration實例來生成Template實例,同進需要指定使用的模板文件

3,填充數(shù)據(jù)模型,數(shù)據(jù)模型就是一個Map對象

4,調(diào)用Template實例的process方法完成合并.

 

下面是一個使用FreeMarker創(chuàng)建輸出的Java程序,程序源代碼如下:

package lee;

import java.util.*;

import java.io.*;

import freemarker.template.*;

 

public class HelloFreeMarker

{

    private Configuration cfg;

    public void init() throws Exception

{

        //初始化FreeMarker配置

        //創(chuàng)建一個Configuration實例

        cfg = new Configuration();

        //設置FreeMarker的模版文件位置

        cfg.setDirectoryForTemplateLoading(new File("templates"));

    }

   

public void process()throws Exception

{

        Map root = new HashMap();

        root.put("name", "FreeMarker!");

   root.put("msg" , "您已經(jīng)完成了第一個FreeMarker的示例");

        Template t = cfg.getTemplate("test.ftl");

        t.process(root, new OutputStreamWriter(System.out));

 

}

 

public static void main(String[] args)throws Exception

{

   HelloFreeMarker hf = new HelloFreeMarker();

   hf.init();

   hf.process();

}

}

上面的代碼創(chuàng)建了一個Map實例,這個Map將作為模板文件的數(shù)據(jù)模型,我們要使用FreeMarker必須導入freemarker.jar文件,FreeMarker的官網(wǎng)是http://freemarker./,雖然FreeMarker可以在Java程序中使用,但大部分時候還是用來生成HTML頁面.

 

Web應用中使用FreeMarker

 

Web應用中使用FreeMarker跟在Java程序中使用并沒有太大的區(qū)別.下面是一個在Web中使用的例子,用來生成HTML頁面的模板文件內(nèi)容如下:

<html>

<head>

<title>FreeMarkerHelloWorld</title>

</head>

<body>

${message}

</body>

</html>

我們在Web應用中使用FreeMarker,應該讓Servlet來合并模板和數(shù)據(jù),因此,Servlet負責創(chuàng)建Configuration實例,并負責合并模板和數(shù)據(jù),下面是Servlet源代碼:

package lee;

import java.util.*;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import freemarker.template.*;

 

public class HelloServlet extends HttpServlet

{

    private Configuration cfg;

    public void init()

{

        //初始化FreeMarker配置

        //創(chuàng)建一個Configuration實例

        cfg = new Configuration();

        //設置FreeMarker的模版文件位置

        cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates");

    }

   

    public void service(HttpServletRequest request, HttpServletResponse response)

        throws ServletException, IOException

{       

        //建立數(shù)據(jù)模型

        Map root = new HashMap();

        root.put("message", "Hello FreeMarker!");    

        //取得模版文件

        Template t = cfg.getTemplate("test.ftl");       

        // 開始準備生成輸出

        // - 使用模版文件的charset作為本頁面的charset

        // - 使用text/html MIME-type

        response.setContentType("text/html; charset=" + t.getEncoding());

        Writer out = response.getWriter();

       

        //合并數(shù)據(jù)模型和模版,并將結(jié)果輸出到out

        try

   {

            t.process(root, out);

        }

   catch (TemplateException e)

   {

            throw new ServletException("處理Template模版中出現(xiàn)錯誤", e);

        }

    }

}

可以看到這個Servlet類的代碼與普通的Java程序中使用FreeMarker大致一樣,區(qū)別有兩個:1,設置FreeMarker加載模板的方法不一樣,Servlet中設置加載的方法是setServletContextForTemplateLoading,第一個參數(shù)是本web應用的ServletContext,第二個參數(shù)是模板文件的路徑.;2,結(jié)果必須輸出到HttpServletResponse,才能被瀏覽器加載.

配置Servletweb.xml文件中的代碼如下:

<web-app>

<servlet>

   <servlet-name>hello</servlet-name>

   <servlet-class>lee.HelloServlet</servlet-class>

</servlet>

<servlet-mapping>

   <servlet-name>hello</servlet-name>

   <url-pattern>/hello</url-pattern>

</servlet-mapping>

</web-app>

 

轉(zhuǎn)載請注明出處: 程序員之家  http://www.

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多