Java *** 作FreeMarker模板引擎的基本用法示例小结

Java *** 作FreeMarker模板引擎的基本用法示例小结,第1张

概述FreeMarker是一个采用Java开发的模版引擎,是一个基于模版生成文本的通用工具。它被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序。虽然使用FreeMarker需要具有一些编程的能力,但通常由Java程序准备要显示

FreeMarker 是一个采用 Java 开发的模版引擎,是一个基于模版生成文本的通用工具。 它被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序。虽然使用FreeMarker需要具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMarker 生成页面,并通过模板显示准备的数据。
http://freemarker.org/

public voID process(String template,Map<String,?> data) throws Exception {   Configuration cfg = new Configuration();   cfg.setDirectoryForTemplateLoading(new file("ftl"));   cfg.setobjectWrapper(new DefaultObjectWrapper());      //设置字符集   cfg.setdefaultencoding("UTF-8");      //设置尖括号语法和方括号语法,默认是自动检测语法   // 自动 auto_DETECT_TAG_Syntax   // 尖括号 ANGLE_BRACKET_TAG_Syntax   // 方括号 SQUARE_BRACKET_TAG_Syntax   cfg.setTagSyntax(Configuration.auto_DETECT_TAG_Syntax);    Writer out = new OutputStreamWriter(new fileOutputStream(file_DIR + template + ".txt"),"UTF-8");   Template temp = cfg.getTemplate(template);   temp.process(data,out);   out.flush(); } 

0、使用freemarker制作HelloWord web页面
新建一个WEB工程,并导入freemarker.jar,在WEB-INF下新建文件夹templates用于存放模版文件,在templates下新建test.ftl,这是示例模版文件。内容就是HTML内容,里面带有一个标记符,用于将来进行变量替换,内容如下:

<HTML>  <head>     <Title>freemarker测试</Title>   </head>   <body>     <h1>${message},${name}</h1>   </body> </HTML> 

 
新建一个Servlet,用于请求设置变量,并处理模版的输出:

package com.test.servlet; import java.io.IOException; import java.io.Writer; import java.util.HashMap; import java.util.Map; import javax.servlet.servletexception; import javax.servlet.http.httpServlet; import javax.servlet.http.httpServletRequest; import javax.servlet.http.httpServletResponse; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; @SuppressWarnings("serial") public class HelloFreeMarkerServlet extends httpServlet {   // 负责管理FreeMarker模板的Configuration实例   private Configuration cfg = null;   public voID init() throws servletexception {     // 创建一个FreeMarker实例     cfg = new Configuration();     // 指定FreeMarker模板文件的位置     cfg.setServletContextForTemplateLoading(getServletContext(),"/WEB-INF/templates");   }   @SuppressWarnings("unchecked")   public voID doPost(httpServletRequest request,httpServletResponse response)       throws servletexception,IOException {     // 建立数据模型     Map root = new HashMap();     root.put("message","hello world");     root.put("name","java小强");     // 获取模板文件     Template t = cfg.getTemplate("test.ftl");     // 使用模板文件的Charset作为本页面的charset     // 使用text/HTML MIME-type     response.setContentType("text/HTML; charset=" + t.getEnCoding());     Writer out = response.getWriter();     // 合并数据模型和模板,并将结果输出到out中     try {       t.process(root,out); // 往模板里写数据     } catch (TemplateException e) {       e.printstacktrace();     }   }   public voID doGet(httpServletRequest request,IOException {     doPost(request,response);   }   public voID destroy() {     super.destroy();   } } 

 
注意要在你的web.xml中配置该Servlet:

<?xml version="1.0" enCoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">   <servlet>     <servlet-name>hello</servlet-name>     <servlet-class>       com.test.servlet.HelloFreeMarkerServlet     </servlet-class>   </servlet>   <servlet-mapping>     <servlet-name>hello</servlet-name>     <url-pattern>/hello</url-pattern>   </servlet-mapping>   <welcome-file-List>     <welcome-file>index.Jsp</welcome-file>   </welcome-file-List> </web-app> 

 
为了方便测试,访问工程直接跳转到Servlet,对主页index.Jsp做一个简单修改:

<%@ page language="java" import="java.util.*" pageEnCoding="UTF-8"%> <% String path = request.getcontextpath(); String basePath = request.getScheme()+"://"+request.getServername() +":"+request.getServerPort()+path+"/"; %> <HTML>  <body>   <%   String mypath = "hello";   response.sendRedirect(basePath + mypath);   %>  </body> </HTML> 

 
部署工程到Tomcat,启动并访问http://localhost:8080/f ,这里我建立的工程名称就是 f 。

1、计算式

<#-- 1、算术运算 -->[BR] ${3 + 4} <#-- 2、内建函数 -->[BR] ${"rensanning"?upper_case} 


2、输出一个值

HashMap t2root = new HashMap<String,String>(); t2root.put("user","RenSanNing"); ${user},Welcome!


3、输出一个列表

Map<String,Object> t3root = new HashMap<String,Object>(); List<Food> menu = new ArrayList<Food>(); menu.add(new Food("iText in Action",98)); menu.add(new Food("iBATIS in Action",118)); menu.add(new Food("Lucene in Action",69)); t3root.put("menu",menu); <#List menu as food> ${food.name} ${food.price?string.currency} </#List> 


4、逻辑判断(IF,SWITCH)

Map<String,Object> t4root = new HashMap<String,Object>(); t4root.put("x",2); t4root.put("y","medium"); 
<1>if,else,elseif: <#if x == 1>  x is 1 <#elseif x == 2>  x is 2 <#elseif x == 3>  x is 3 <#elseif x == 4>  x is 4 <#else>  x is not 1 nor 2 nor 3 nor 4 </#if> <2>switch,case,default,break: <#switch y>  <#case "small">    This will be processed if it is small    <#break>  <#case "medium">    This will be processed if it is medium    <#break>  <#case "large">    This will be processed if it is large    <#break>  <#default>    This will be processed if it is neither </#switch> <3>List,break: <#assign seq = ["winter","spring","summer","autumn"]> <#List seq as x>  ${x_index + 1}. ${x}<#if x_has_next>,</#if> </#List> 


5、自定义函数

<#function fact n>  <#if n == 0>   <#return 1 />  <#else>   <#return fact(n - 1) * n />  </#if> </#function> <#List 0..10 as i>  ${i}! => ${fact(i)} </#List> 


6、定义变量

<#-- 1、本地变量 -->[BR] <#function partg n lst>  <#local ans = []>  <#List lst as x>   <#if (x >= n)>    <#local ans = ans + [x]>   </#if>  </#List>  <#return ans> </#function> <#assign ls = [10,2,4,5,8,1,3]> <#List partg(4,ls) as x>${x} </#List> <#-- 2、变量域测试 -->[BR] <#macro test>   03. ${x}   <#global x = "global2">   04. ${x}   <#assign x = "assign2">   05. ${x}   <#local x = "local1">   06. ${x}   <#List ["循环1"] as x>     07. ${x}     <#local x = "local2">     08. ${x}     <#assign x = "assign3">     09. ${x}   </#List>   10. ${x} </#macro> <#global x = "global1" /> 01. ${x} <#assign x = "assign1" /> 02. ${x} <@test /> 11. ${x} 


7、定义宏macro

<#-- 1、无参数 -->[BR] <#macro greet> Welcome! </#macro> <@greet /> <#-- 2、有参数 -->[BR] <#macro greet user> ${user},Welcome! </#macro> <@greet user="RenSanNing"/> <#-- 3、有多个参数 -->[BR] <#macro table cols rows>  <table>   <#List 1..rows as row>    <tr>     <#List 1..cols as col>      <td>${row},${col}</td>     </#List>    </tr>   </#List>  </table> </#macro> <@table cols=3 rows=2 /> <#-- 4、中间跳出 -->[BR] <#macro out>  显示文字  <#return>  不显示文字 </#macro> <@out /> <#-- 5、嵌套 -->[BR] <#macro lprint lst>  <#List lst as item>  ・${item}<#nested item />  </#List> </#macro> <@lprint 1..3; x>^2 = ${x * x}</@lprint> <@lprint 1..3; x>^3 = ${x * x * x}</@lprint> <@lprint ["Let's go","to the","land of Medetai"] /> 


8、include

<#include "T108include.ftl"> ${url} <@greet name="rensanning" /> 

T108include.ftl
<#macro greet name> ${name},Welcome! </#macro> <#assign url="http://www.baIDu.com/"> 


9、名字空间

<#import "T109include.ftl" as my> <#assign url="http://www.Google.com/"> ${my.url} <@my.greet name="rensanning" /> ${url} 

T109include.ftl

<#macro greet name> ${name},Welcome! </#macro> <#assign url="http://www.baIDu.com/"> 


10、自定义指令Directive

public class SystemDateDirective implements TemplateDirectiveModel {      public voID execute(Environment env,Map params,TemplateModel[] loopVars,TemplateDirectiveBody body) throws TemplateException,IOException {     Calendar cal = Calendar.getInstance();     SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");     env.getout().append(sdf.format(cal.getTime()));   }  } public class TextCutDirective implements TemplateDirectiveModel {   public static final String ParaM_S = "s";   public static final String ParaM_LEN = "len";   public static final String ParaM_APPEND = "append";    @SuppressWarnings("unchecked")   public voID execute(Environment env,IOException {     String s = getString(ParaM_S,params);     Integer len = getInt(ParaM_LEN,params);     String append = getString(ParaM_APPEND,params);     if (s != null) {       Writer out = env.getout();       if (len != null) {         out.append(textCut(s,len,append));       } else {         out.append(s);       }     }   } 

        
        .... 

Map<String,Object> t10root = new HashMap<String,Object>(); t10root.put("systemdate",new SystemDateDirective()); t10root.put("text_cut",new TextCutDirective()); 
总结

以上是内存溢出为你收集整理的Java *** 作FreeMarker模板引擎的基本用法示例小结全部内容,希望文章能够帮你解决Java *** 作FreeMarker模板引擎的基本用法示例小结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1149637.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存