博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FreeMarker Demo
阅读量:6162 次
发布时间:2019-06-21

本文共 3050 字,大约阅读时间需要 10 分钟。

hot3.png

Freemarker是一款模板引擎。
模板 + 数据模型 = 输出
 
从上图不难看出FreeMarker就是将数据模型中的值填充到模板文件中指定的插值处,最后将填充后的文本形式输出。
使用FreeMarker将数据模型中的值合并到模板文件中,一般有以下步骤:
1、创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生产模板实例。
2、使用Configuration实例来生成Template实例,同时需要指定使用的模板文件。
3、填充数据模型,数据模型一般就是一个Map对象。
4、调用Template实例的process()方法完成合并。
在Java中使用FreeMarker
FreeMarkerTest.java
public class FreeMarkerTest {	private Configuration cfg = null;		public static void main(String[] args) throws Exception {		FreeMarkerTest maker = new FreeMarkerTest();		maker.init();		maker.process();	}		//初始化工作	public void init() throws Exception {		cfg = new Configuration();		//设置模板文件位置		cfg.setDirectoryForTemplateLoading(new File("src/template"));	}		//模板 + 数据模型 = 输出	public void process() throws Exception {		//创建数据模型		Map
rootMap = new HashMap
(); rootMap.put("name", "FreeMarker"); rootMap.put("message", "FreeMarker For Java Project"); //使用Configuration实例加载指定模板 Template template = cfg.getTemplate("user.ftl"); //合并处理(模板 + 数据模型) template.process(rootMap, new OutputStreamWriter(System.out)); }}
创建的Map对象rootMap作为模板文件的数据模型,该数据模型中的两个Value值会填充到模板(user.ftl)中对应key值的插值处。
user.ftl
${name}, ${message}
Console
FreeMarker, FreeMarker For Java Project
在Java Web中使用FreeMarker
大部分时候FreeMarker都用于在Web应用中生成HTML页面。
FreeMarkerServlet.java
public class FreeMarkerServlet extends HttpServlet {	private Configuration cfg = null;		public void init() throws ServletException {		cfg = new Configuration();		//设置模板文件位置		cfg.setServletContextForTemplateLoading(getServletContext(), "/template");	}		public void doGet(HttpServletRequest request, HttpServletResponse response) {		//建立数据模型		Map
rootMap = new HashMap
(); rootMap.put("name", "FreeMarker模板"); rootMap.put("message", "FreeMarker For JavaWeb"); try { //取得模板文件 Template template = cfg.getTemplate("hello.ftl"); response.setContentType("text/html; charset=utf-8 "); Writer out = response.getWriter(); //合并数据模型和模板,并将结果输出到response.getWriter()中 template.process(rootMap, out); }catch(IOException e) { e.printStackTrace(); }catch(TemplateException t) { t.printStackTrace(); } }}
hello.ftl
			FreeMarker For JavaWeb				

${name}

${message}

访问 结果页面:
这两个示例的不同之处在于Servlet中加载模板的方法是setServletContextForTemplateLoading(Object o, String s),该方法的第一个参数是本应用的ServletContext实例,第二个参数是模板文件所在的路径。
在Struts2中使用FreeMarker
index.jsp
    

Register Information


LoginAction.java
public class LoginAction extends ActionSupport {	private String name;	private String pwd;	private int age;	private Date registerDate;	         省略getter、setter	@Override	public String execute() throws Exception {		return SUCCESS;	}}
struts.xml
/WEB-INF/templates/userlist.ftl
userlist.ftl
					用户名:${name} 
密码:${pwd}
年龄:${age}
注册日期:${registerDate}
通过 访问

转载于:https://my.oschina.net/xiaomaoandhong/blog/100785

你可能感兴趣的文章
使用addChildViewController手动控制UIViewController的切换
查看>>
Android Fragment应用实战
查看>>
SQL Server查询死锁并KILL
查看>>
内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]...
查看>>
委托到Lambda的进化: ()=> {} 这个lambda表达式就是一个无参数的委托及具体方法的组合体。...
查看>>
apache 伪静态 .htaccess
查看>>
unity3d 截屏
查看>>
ASP.NET MVC学习之控制器篇
查看>>
MongoDB ServerStatus返回信息
查看>>
分析jQuery源码时记录的一点感悟
查看>>
程序局部性原理感悟
查看>>
UIView 动画进阶
查看>>
Spring如何处理线程并发
查看>>
linux常用命令(用户篇)
查看>>
获取组件的方式(方法)
查看>>
win2008 server_R2 自动关机 解决
查看>>
我的友情链接
查看>>
在C#调用C++的DLL简析(二)—— 生成托管dll
查看>>
Linux macos 常用终端操作
查看>>
企业网络的管理思路
查看>>