FreeMarker Demo

Freemarker是一款模板引擎。

模板 + 数据模型 = 输出

 

从上图不难看出FreeMarker就是将数据模型中的值填充到模板文件中指定的插值处,最后将填充后的文本形式输出。

使用FreeMarker将数据模型中的值合并到模板文件中,一般有以下步骤:
1、创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生产模板实例。
2、使用Configuration实例来生成Template实例,同时需要指定使用的模板文件。
3、填充数据模型,数据模型一般就是一个Map对象。
4、调用Template实例的process()方法完成合并。

**在Java中使用FreeMarker

**
FreeMarkerTest.java

1public class FreeMarkerTest { 2 3 private Configuration cfg = null; 4 5 public static void main(String[] args) throws Exception { 6 FreeMarkerTest maker = new FreeMarkerTest(); 7 maker.init(); 8 maker.process(); 9 } 10 11 //初始化工作 12 public void init() throws Exception { 13 cfg = new Configuration(); 14 //设置模板文件位置 15 cfg.setDirectoryForTemplateLoading(new File("src/template")); 16 } 17 18 //模板 + 数据模型 = 输出 19 public void process() throws Exception { 20 //创建数据模型 21 Map<String, String> rootMap = new HashMap<String, String>(); 22 rootMap.put("name", "FreeMarker"); 23 rootMap.put("message", "FreeMarker For Java Project"); 24 25 //使用Configuration实例加载指定模板 26 Template template = cfg.getTemplate("user.ftl"); 27 //合并处理(模板 + 数据模型) 28 template.process(rootMap, new OutputStreamWriter(System.out)); 29 } 30}

创建的Map对象rootMap作为模板文件的数据模型,该数据模型中的两个Value值会填充到模板(user.ftl)中对应key值的插值处。

user.ftl

${name}, ${message}

Console

FreeMarker, FreeMarker For Java Project

**在Java Web中使用FreeMarker

**大部分时候FreeMarker都用于在Web应用中生成HTML页面。

FreeMarkerServlet.java

1public class FreeMarkerServlet extends HttpServlet { 2 3 private Configuration cfg = null; 4 5 public void init() throws ServletException { 6 cfg = new Configuration(); 7 //设置模板文件位置 8 cfg.setServletContextForTemplateLoading(getServletContext(), "/template"); 9 } 10 11 public void doGet(HttpServletRequest request, HttpServletResponse response) { 12 //建立数据模型 13 Map<String, String> rootMap = new HashMap<String, String>(); 14 rootMap.put("name", "FreeMarker模板"); 15 rootMap.put("message", "FreeMarker For JavaWeb"); 16 17 try { 18 //取得模板文件 19 Template template = cfg.getTemplate("hello.ftl"); 20 response.setContentType("text/html; charset=utf-8 "); 21 Writer out = response.getWriter(); 22 //合并数据模型和模板,并将结果输出到response.getWriter()中 23 template.process(rootMap, out); 24 }catch(IOException e) { 25 e.printStackTrace(); 26 }catch(TemplateException t) { 27 t.printStackTrace(); 28 } 29 } 30}

hello.ftl

1<html> 2 <head> 3 <title>FreeMarker For JavaWeb</title> 4 </head> 5 <body> 6 <h1 style = "color:blue">${name}</h1> 7 <h1 style = "color:red">${message}</h1> 8 </body> 9</html>

访问 http://localhost:8080/FreeMarkerForJavaWeb/FreeMarkerServlet结果页面:

这两个示例的不同之处在于Servlet中加载模板的方法是setServletContextForTemplateLoading(Object o, String s),该方法的第一个参数是本应用的ServletContext实例,第二个参数是模板文件所在的路径。

**在Struts2中使用FreeMarker


**

index.jsp

1<body> 2 <h1>Register Information</h1> 3 <s:form action="login" method="post"> 4 <s:label value="username" /> 5 <!-- name属性和Action中的字段名一致 --> 6 <s:textfield id="username" name="name" /> 7 <s:label value="password" /> 8 <s:password id="password" name="pwd" /> 9 <s:label value="age" /> 10 <s:textfield id="age" name="age" /> 11 <s:label value="register" /> 12 <s:textfield id="register" name="registerDate" /> 13 <s:submit value="submit" /> 14 </s:form> 15 <hr> 16 </body>

LoginAction.java

1public class LoginAction extends ActionSupport { 2 private String name; 3 private String pwd; 4 private int age; 5 private Date registerDate; 6 7 8 9 10 11      省略getter、setter 12 13 @Override 14 public String execute() throws Exception { 15 return SUCCESS; 16 } 17}

struts.xml

1<struts> 2 <package name="FreeMarker For Struts2" extends="struts-default"> 3 <action name="login" class="cn.struts2.action.LoginAction"> 4 <result type="freemarker">/WEB-INF/templates/userlist.ftl</result> 5 </action> 6 </package> 7</struts>

userlist.ftl

1<html> 2 <head> 3 </head> 4 <body> 5 用户名:${name} <br> 6 密码:${pwd} <br> 7 年龄:${age} <br> 8 注册日期:${registerDate} <br> 9 </body> 10</html>

通过 http://localhost:8080/FreeMarkerForStruts2/index.jsp访问

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

springboot2.0结合freemarker生成静态化页面

\TOC\使用freemarker将页面生成html文件,本节测试html文件生成的方法:1、使用模板文件静态化定义模板文件,使用freemarker静态化程序生成html文件。2、使用模板字符串静态化定义模板字符串,使用freemarker静态化程序生成html文件。1\.pom.xml

SpringBoot获取Freemarker模板引擎,生成HTML代码

今天用Ajax异步添加评论,加载Freemarker模板引擎,生成模板模块1.新建Freemarker模板<liid"${comment.oId}"<div<divclass"avatartooltippedtooltippedn"ariala