`
野狼杰克
  • 浏览: 14236 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类

第一个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
分享到:
评论
1 楼 By2011 2012-06-14  
 

相关推荐

    第一篇 环境的搭建和Hello World

    标题 "第一篇 环境的搭建和Hello World" 暗示了我们将讨论的是一个初学者入门级别的教程,主要涉及编程环境的配置以及编写并运行第一个简单的程序,即经典的"Hello, World!"示例。描述中提到的链接可能是详细教程的...

    springboot-helloworld.rar

    SpringBoot HelloWorld 示例是一个针对初级Java开发者的学习资源,它利用Spring Boot框架进行基础配置,并展示了如何构建一个简单的应用程序。Spring Boot是Spring生态系统中的一个重要组件,它旨在简化Spring应用的...

    struts2 HelloWorld最小必备包

    通过这个最小必备包,你可以开始学习如何配置Struts2的XML文件,创建第一个动作类,编写Freemarker模板,并观察它们如何协同工作来呈现"Hello, World!"的简单页面。同时,这也会帮助你理解Struts2框架的核心组件及其...

    Struts 2 自学之路: 1 准备工作及helloworld

    本文将引导你踏上Struts 2的自学之旅,从准备工作开始,逐步介绍如何创建并运行你的第一个“Hello, World!”程序。 ### 1. Struts 2 框架简介 Struts 2是Apache软件基金会的一个开源项目,它是基于MVC(Model-View-...

    freemarker总结

    cap_first:使字符串第一个字母大写 lower_case:将字符串转换成小写 upper_case:将字符串转换成大写 trim:去掉字符串前后的空白字符 下面是集合的常用内建函数 size:获取序列中元素的个数 下面是数字值的常用...

    freemarker自学笔记

    在这个例子中,`IndexOfMethod` 类实现了 `TemplateMethodModel` 接口,并重写了 `exec` 方法,该方法接收两个参数,并返回第一个字符串在第二个字符串中首次出现的位置。如果未找到,则返回 `-1`。 如果将这个方法...

    freeMaker的应用

    root.put("msg", "您已经完成了第一个FreeMarker的示例"); Template template = cfg.getTemplate("test.ftl"); template.process(root, new OutputStreamWriter(System.out)); } public static void main...

    struts2完整的Hello Word例子。

    Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中。在本示例中,"struts2完整的Hello Word例子"是帮助开发者理解并熟悉...对于初学者,理解并实践这些步骤是掌握Struts2的第一步。

    个人的一些Java例子

    ”,对于初学者来说,这是理解如何编写和运行Java程序的第一步。 5. **FreeMarker** FreeMarker是一个模板引擎,用于生成动态内容,常见于Web应用中。FreeMarkerTest可能展示了如何定义模板,以及如何与Java对象...

    webwork第一个例子

    本教程将带你一步步了解如何创建并运行WebWork的第一个示例。 首先,让我们理解WebWork的基本概念: 1. **Action**:WebWork的核心组件,它负责处理用户请求,执行业务逻辑,并将结果传递给视图层。Action类通常会...

    Java Web程序设计教程

    2.4项目实战——第一个javaee应用:helloworld 28 2.4.1开始创建第一个javaee应用 28 2.4.2熟悉helloworld框架结构 29 本章小结 32 课后练习 32 第3章jsp和servlet 33 3.1开发第一个jsp+servlet应用 33 3.1.1...

    struts2第一源代码及说明

    1. **第一天.rar**:可能包含了Struts2基础的介绍,包括环境搭建、第一个Hello World程序的创建、Action的编写以及简单的请求处理。这部分内容是学习Struts2的入门阶段,帮助开发者熟悉框架的基本用法。 2. **传智...

    freemark hellword

    Freemarker Hellword,这个名字可能源自“Hello World”的变体,是初学者在学习Freemarker模板引擎时经常遇到的第一个示例。 Freemarker是一个强大的、轻量级的、基于Java的模板引擎,常用于Web应用中动态生成HTML、...

    struts2很好的入门级ppt

    开发第一个Struts2应用时,你通常会创建一个简单的Action类,如HelloWorldAction,实现execute方法,返回一个字符串结果,这将决定展示哪个视图。视图可以是FreeMarker模板或JSP页面,根据配置中的结果类型确定。...

    MyEclipse.6.实战开发讲解视频入门_源代码\13_struts2hello.zip

    实战开发讲解视频入门_源代码\13_struts2hello.zip"同样强调了这是一个MyEclipse 6的编程教学资源,内容涵盖了Struts2的基础应用,通过"13_struts2hello.zip"我们可以推测这是系列教程中的第十三个部分,专注于介绍...

    Struts2Demo

    在 **Struts2Demo** 中,`HelloWorld` 示例是初学者接触框架的第一步。它通常包含以下几个部分: - **Action类**:这是一个实现了`Action`接口的Java类,通常包含一个返回结果的`execute()`方法。例如,`...

    Struts2_基础

    "HelloWorld"是学习任何新技术的第一步。在Struts2中,创建一个简单的HelloWorld应用涉及创建Action类、配置struts.xml文件并编写相应的JSP页面。通过这个例子,开发者可以了解Action类与视图之间的交互方式。 **第...

    SpringBoot(入门篇)资料.rar

    "HelloWorld"通常是编程初学者的第一个示例,展示了一个简单的SpringBoot应用程序的创建过程。这可能是一个包含主类的Java项目,主类中有一个`@SpringBootApplication`注解,启动SpringBoot的应用。通过运行这个...

    webwork学习笔记(全)

    一个简单的HelloWorld示例通常包括一个Action类和对应的视图页面。Action类可能如下所示: ```java public class HelloWorldAction extends ActionSupport { public String execute() { return SUCCESS; } } ```...

Global site tag (gtag.js) - Google Analytics