第一个FreeMarker HelloWorld程序

工作需要,开始接触FreeMarker,Google了半天,看了些07年 08年的博客文章,感觉都比较适合入门。但太深入的没有几篇。

当然,现在已经是2010年,刚开始接触FreeMarker。熟悉了下FreeMarker例子运行的大概流程,遇到些问题。但也都迎刃而解。还需要时间和精力读完官方的指导文档。还是从开发者指南部分开始读吧。免得浪费时间。

FreeMarkerServlet.java

package com.golfetrip.freemarker;





import java.io.File;


import java.io.IOException;


import java.io.OutputStreamWriter;


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.DefaultObjectWrapper;


import freemarker.template.Template;


import freemarker.template.TemplateException;





public class FreeMarkerServlet extends HttpServlet {


	Configuration cfg;





	@Override


	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {


		Map root = new HashMap();


		root.put("user", "Big Joe");


		Map latest = new HashMap();


		root.put("latestProduct", latest);


		latest.put("url", "products/greenmouse.html");


		latest.put("name", "green mouse");


		


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


		


		Writer out = new OutputStreamWriter(System.out);


		


		try {


			temp.process(root, out);


		} catch (TemplateException e) {


			e.printStackTrace();


		}


		


		out.flush();


	}





	@Override


	public void init() throws ServletException {


		cfg = new Configuration();


		try {


			//System.out.println(new File(getServletContext().getRealPath("/") + "/templates"));


			//cfg.setDirectoryForTemplateLoading(new File(getServletContext().getRealPath("/") + "/templates"));


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


			cfg.setObjectWrapper(new DefaultObjectWrapper());


		} catch (IOException e) {


			e.printStackTrace();


		}


	}


	


}


 web.xml

<?xml version="1.0" encoding="UTF-8"?>


<web-app version="2.4" 


	xmlns="http://java.sun.com/xml/ns/j2ee" 


	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 


	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 


	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


	


	<servlet>


		<servlet-name>FreeMarkerServlet</servlet-name>


		<servlet-class>com.golfetrip.freemarker.FreeMarkerServlet</servlet-class>


	</servlet>


	<servlet-mapping>


		<servlet-name>FreeMarkerServlet</servlet-name>


		<url-pattern>/FreeMarkerServlet</url-pattern>


	</servlet-mapping>


  <welcome-file-list>


    <welcome-file>index.jsp</welcome-file>


  </welcome-file-list>


</web-app>

 WebRoot下的templates文件夹中的test.ftl

<html>


<head><title>My First FreeMarker Application!</title></head>


<body>


Hi,${user}!


The latest product is <a href="${latestProduct.url}">${latestProduct.name}</a>.


</body>


</html>
 

最基本的运行文件也就这三个,当然别忘记freemarker.jar。

在FreeMarkerServlet.java中,这里用的是一个servlet,方便在web环境中测试。

其中init方法中首先实例化了一个freemarker必要的Configuration实例,通过下面语句获取ftl文件加载目录,当然没有实际意义的后缀而已,完全可以用html或其他代替。

之后在service方法中设定模板文件。获取writer对象,最后在process方法中将模板和数据模型融合在一起,返回给客户端。

此例结果是在后台打印出来。

 

看似以上的编码都没有什么问题,但在运行的时候会报出找不到模板错误。

这里主要是因为路径的问题。new File("/templates");实际是在当前磁盘的根目录下查找templates文件夹。

解决方法是修改service方法中相关代码为

cfg.setDirectoryForTemplateLoading(new File(getServletContext().getRealPath("/") + "/templates"));

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值