Jtpl

Simple template engine for Java

Syntax - Examples - Download - Javadocs

What is it?

Jtpl is a template engine for Java Servlet which allows you to store your HTML code apart from your Java code.

A template engine is a software module which is used to generate HTML pages. The layout of a HTML page is defined within a template file, which can be designed by using a standard HTML editor. At run-time, the application program instructs the template engine to load the template, fill in variable values, repeat blocks and produce the final HTML page.

There are other template engines (like Velocity, WebMacro or Struts) which are huge and use complex syntaxes. Jtpl however uses a very simple template syntax. All processing (loops, if-then-else logic) and variable formatting is done in the Java code, which leads to better separation of layout and code, and no new complex syntax has to be learned.

How to use it?

Jtpl is extremly simple to use, but if you get any concerns or question just leave a message on the Jtpl General Forum.

A simple syntax is used to define variables and blocks in the template file:

Variables

{MY_VARIABLE}

Blocks

<!-- BEGIN: block_name-->
the content of the block
<!-- END: block_name -->

Sample servlet #1

This exemple will print an html page with a "Hello World" message. Samples are also available as unit tests.

sample1.jtpl

<!-- BEGIN: main -->
<html>
<head>
<title>{TITLE}</title>
</head>
<body>
{MESSAGE}
</body>
</html>
<!-- END: main -->

sample1.java

import net.sf.jtpl.Template;

import java.io.File;
import javax.servlet.http.*;
import javax.servlet.*;

public class sample1 extends HttpServlet implements SingleThreadModel {
        Template tpl;

        protected void doGet(HttpServletRequest request,
                        HttpServletResponse response) throws ServletException, IOException {
                PrintWriter out = response.getWriter();
                try {
                        out.print(this.generatePage());
                } catch (Exception e) {
                        e.printStackTrace(out);
                }
        }

        private String generatePage() throws Exception {
                tpl = new Template(new File("C:\\java\\eclipse\\workspace\\jtpl\\sample1.jtpl"));
                tpl.assign("TITLE", "Sample 1");
                tpl.assign("MESSAGE", "Hello World");
                tpl.parse("main");
                return (tpl.out());
        }
}

Sample servlet #2

This exemple will print this output

sample2

sample2.jtpl

<!-- BEGIN: main -->
<html>
<head>
<title>{TITLE}</title>
</head>
<body> 
<table> 
  <!-- BEGIN: line --> 
  <tr> 
    <!-- BEGIN: row --> 
    <td bgcolor="{BGCOLOR}">{VARIABLE}</td> 
    <!-- END: row --> 
  </tr> 
  <!-- END: line --> 
</table> 
</body>
</html>
<!-- END: main -->

sample2.java

import net.sf.jtpl.Template;

import java.io.File;
import javax.servlet.http.*;
import javax.servlet.*;

public class sample2 extends HttpServlet implements SingleThreadModel {
        Template tpl;

        protected void doGet(HttpServletRequest request,
                        HttpServletResponse response) throws ServletException, IOException {
                PrintWriter out = response.getWriter();
                try {
                        out.print(this.generatePage());
                } catch (Exception e) {
                        e.printStackTrace(out);
                }
        }

        private String generatePage() throws Exception {
                tpl = new Template(new File("C:\\java\\eclipse\\workspace\\jtpl\\sample2.jtpl"));
                tpl.assign("TITLE", "Sample 2");
                int line = 10, col = 5, altern = 2, count = 0;
                for (int i = 1; i <= line; i++) {
                        for (int j = 1; j <= col; j++) {
                                if (count % altern == 0) {
                                        tpl.assign("BGCOLOR", "#75D2FF");
                                } else {
                                        tpl.assign("BGCOLOR", "#CCEEFF");
                                }
                                tpl.assign("VARIABLE", "line:" + i + " row:" + j);
                                tpl.parse("main.line.row");
                                count++;
                        }
                        tpl.parse("main.line");
                }
                tpl.parse("main");
                return (tpl.out());
        }
}

How to download it?

Download the latest Jar file from our Sourceforge project page.

Jtpl project lead: Emmanuel Alliel

Current maintainer: Staffan Olsson

For feedback and support please use the forum.