工作需要,开始接触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"));
分享到:
相关推荐
标题 "第一篇 环境的搭建和Hello World" 暗示了我们将讨论的是一个初学者入门级别的教程,主要涉及编程环境的配置以及编写并运行第一个简单的程序,即经典的"Hello, World!"示例。描述中提到的链接可能是详细教程的...
SpringBoot HelloWorld 示例是一个针对初级Java开发者的学习资源,它利用Spring Boot框架进行基础配置,并展示了如何构建一个简单的应用程序。Spring Boot是Spring生态系统中的一个重要组件,它旨在简化Spring应用的...
通过这个最小必备包,你可以开始学习如何配置Struts2的XML文件,创建第一个动作类,编写Freemarker模板,并观察它们如何协同工作来呈现"Hello, World!"的简单页面。同时,这也会帮助你理解Struts2框架的核心组件及其...
本文将引导你踏上Struts 2的自学之旅,从准备工作开始,逐步介绍如何创建并运行你的第一个“Hello, World!”程序。 ### 1. Struts 2 框架简介 Struts 2是Apache软件基金会的一个开源项目,它是基于MVC(Model-View-...
cap_first:使字符串第一个字母大写 lower_case:将字符串转换成小写 upper_case:将字符串转换成大写 trim:去掉字符串前后的空白字符 下面是集合的常用内建函数 size:获取序列中元素的个数 下面是数字值的常用...
在这个例子中,`IndexOfMethod` 类实现了 `TemplateMethodModel` 接口,并重写了 `exec` 方法,该方法接收两个参数,并返回第一个字符串在第二个字符串中首次出现的位置。如果未找到,则返回 `-1`。 如果将这个方法...
root.put("msg", "您已经完成了第一个FreeMarker的示例"); Template template = cfg.getTemplate("test.ftl"); template.process(root, new OutputStreamWriter(System.out)); } public static void main...
Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中。在本示例中,"struts2完整的Hello Word例子"是帮助开发者理解并熟悉...对于初学者,理解并实践这些步骤是掌握Struts2的第一步。
”,对于初学者来说,这是理解如何编写和运行Java程序的第一步。 5. **FreeMarker** FreeMarker是一个模板引擎,用于生成动态内容,常见于Web应用中。FreeMarkerTest可能展示了如何定义模板,以及如何与Java对象...
本教程将带你一步步了解如何创建并运行WebWork的第一个示例。 首先,让我们理解WebWork的基本概念: 1. **Action**:WebWork的核心组件,它负责处理用户请求,执行业务逻辑,并将结果传递给视图层。Action类通常会...
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...
1. **第一天.rar**:可能包含了Struts2基础的介绍,包括环境搭建、第一个Hello World程序的创建、Action的编写以及简单的请求处理。这部分内容是学习Struts2的入门阶段,帮助开发者熟悉框架的基本用法。 2. **传智...
Freemarker Hellword,这个名字可能源自“Hello World”的变体,是初学者在学习Freemarker模板引擎时经常遇到的第一个示例。 Freemarker是一个强大的、轻量级的、基于Java的模板引擎,常用于Web应用中动态生成HTML、...
实战开发讲解视频入门_源代码\13_struts2hello.zip"同样强调了这是一个MyEclipse 6的编程教学资源,内容涵盖了Struts2的基础应用,通过"13_struts2hello.zip"我们可以推测这是系列教程中的第十三个部分,专注于介绍...
在 **Struts2Demo** 中,`HelloWorld` 示例是初学者接触框架的第一步。它通常包含以下几个部分: - **Action类**:这是一个实现了`Action`接口的Java类,通常包含一个返回结果的`execute()`方法。例如,`...
"HelloWorld"是学习任何新技术的第一步。在Struts2中,创建一个简单的HelloWorld应用涉及创建Action类、配置struts.xml文件并编写相应的JSP页面。通过这个例子,开发者可以了解Action类与视图之间的交互方式。 **第...
"HelloWorld"通常是编程初学者的第一个示例,展示了一个简单的SpringBoot应用程序的创建过程。这可能是一个包含主类的Java项目,主类中有一个`@SpringBootApplication`注解,启动SpringBoot的应用。通过运行这个...
一个简单的HelloWorld示例通常包括一个Action类和对应的视图页面。Action类可能如下所示: ```java public class HelloWorldAction extends ActionSupport { public String execute() { return SUCCESS; } } ```...