FreeMarker is a "template engine"; a
generic tool to generate text output (anything from HTML to
autogenerated source code) based on templates. It's a
Java package, a class library for Java programmers. It's not an
application for end-users in itself, but something that
programmers can embed into their products.
FreeMarker is designed to be practical for the generation of
HTML Web pages,
particularly by servlet-based applications following the
MVC (Model View Controller) pattern. The idea behind
using the MVC pattern for dynamic Web pages is that you
separate the designers (HTML authors) from the programmers.
Everybody works on what they are good at. Designers can change
the appearance of a page without
programmers having to change or recompile code, because the
application logic (Java programs) and page design
(FreeMarker templates) are
separated. Templates do not
become polluted with complex program fragments. This separation
is useful even for projects where the programmer and the HTML
page author is the
same person, since it helps to keep the application clear and
easily maintainable.
Although FreeMarker has some programming capabilities, it is
not a full-blown programming language like PHP. Instead,
Java programs prepare the data to be displayed (like issue SQL
queries), and FreeMarker just generates textual pages that display
the prepared data using templates.