欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

FreeMarker (FTL) Hello World Tutorial With Example

程序员文章站 2024-03-23 13:59:22
...

Today we will create our first Hello World FreeMarker application. To start with our app will be very basic. We define one ftl template and load it in Java using freemarker api. In Java, we create data and pass it to freemarker to render the output. So all in all we get output as a text file as well as on standard output (console). So lets get started.

Things We Need

Before getting started, I would like to highlight tools and technologies used in this project.

We’ll need:

  1. JDK 1.5 or above (download)

  2. Eclipse IDE 3.2.x or above (download)

  3. Freemarker 2.2.8 or above (download)

Ok, we have all what we need. So lets get started.

Hello World FreeMaker

In eclipse create a Java project. Go to File > New > Project… > Java Project. Enter project name as Freemarker_Hello_World and click Finish.

The basic Java Project is created. Now we create a freemarker template file (.ftl) as our base template. We will use this in our hello world example. Create a file helloworld.ftl under src folder. Following is the content:

File: src/helloworld.ftl

FreeMarker Template example: ${message}  

=======================
===  County List   ====
=======================
<#list countries as country>
	${country_index + 1}. ${country}
</#list>

Now create FTLHelloWorld.java class inside source folder. I have created a package net.viralpatel.freemarker and create this class inside it.

File: src/net/viralpatel/freemarker/FTLHelloWorld.java

package net.viralpatel.freemarker;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class FTLHelloWorld {
	
	public static void main(String[] args) {
		
		//Freemarker configuration object
		Configuration cfg = new Configuration();
		try {
			//Load template from source folder
			Template template = cfg.getTemplate("src/helloworld.ftl");
			
			// Build the data-model
			Map<String, Object> data = new HashMap<String, Object>();
			data.put("message", "Hello World!");

			//List parsing 
			List<String> countries = new ArrayList<String>();
			countries.add("India");
			countries.add("United States");
			countries.add("Germany");
			countries.add("France");
			
			data.put("countries", countries);

			
			// Console output
			Writer out = new OutputStreamWriter(System.out);
			template.process(data, out);
			out.flush();

			// File output
			Writer file = new FileWriter (new File("C:\\FTL_helloworld.txt"));
			template.process(data, file);
			file.flush();
			file.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		} catch (TemplateException e) {
			e.printStackTrace();
		}
	}
}

You might get error in Eclipse because of the classpath issue. Add freemarker.jar in lib folder (create a lib folder if it doesn’t exists). Once you have added freemarker.jar and included in your classpath, the error should go.

Below is the project structure once we add all source code files.

FreeMarker (FTL) Hello World Tutorial With Example

Execute the FTLHelloWorld.java class (eclipse shortcut Alt+Shift X, J). Following output will be generated in Console.

FreeMarker Template example: Hello World!

========================
===   Country List =====
========================
	1. India
	2. United States
	3. Germany
	4. France

Also a file will be generated C:\FTL_helloworld.txt with the same output.
FreeMarker (FTL) Hello World Tutorial With Example

Thus note how we passed data from Java to FTL and the same get painted. The ${message} got replaced with the message that we populated in Java. Also notice how we passed a country List<String> through Java and inside FTL we used <#list> </#list> to display its values.

Download Source Code

FreeMarker_helloworld.zip (507 KB)

转载于:https://my.oschina.net/geek4j/blog/291049