FreeMarker
# FreeMarker

Apache FreeMarker è un motore di template gratuito basato su Java, inizialmente incentrato sulla generazione di pagine Web dinamiche con il pattern architetturale MVC. Attualmente è un motore di template generico, senza dipendenza da servlet, HTTP o HTML, e viene spesso utilizzato per generare codice sorgente, file di configurazione o e-mail.

## Storia

FreeMarker ha avuto una storia alquanto frenetica fino a circa il 2004 causata da cambi di paradigma e altre modifiche significative in più occasioni. FreeMarker 1 (ora noto come FreeMarker Classic, un progetto separato) è stato originariamente scritto da Benjamin Geer e Mike Bayer. Dal 2002 il nuovo responsabile del progetto è stato Jonathan Revusky, che ha rilasciato FreeMarker 2 ed ha avviato una sequenza di numerosi cambiamenti sostanziali. L'obiettivo principale delle modifiche era rendere il linguaggio di template più rigoroso, ovvero rilevare il maggior numero possibile di errori di battitura e altri errori tipici. Inoltre, è stato introdotto il wrapping automatico degli oggetti, così come l'avanzamento graduale del sistema di tipi del linguaggio di template. Il linguaggio ha acquisito molte funzionalità per utenti esperti, come maggiori capacità di programmazione macro e namespace. Il linguaggio ha raggiunto uno stato abbastanza stabile con la versione 2.3, rilasciata nel terzo trimestre del 2004. A partire dal 2016, il prodotto è rimasto compatibile con le versioni precedenti. Non sono previste per il futuro modifiche significative incompatibili con le versioni precedenti nella serie FreeMarker 2.

Alla fine del 2015, FreeMarker è stato concesso alla Apache Software Foundation, dove è entrato a far parte dell'Apache Incubator, e il 21-03-2018 è diventato un progetto Apache pienamente accettato.

## Esempio

Il seguente template:

elaborato da FreeMarker produrrà qualcosa come:

Variabili come "name" e "messages" provengono fuori del template, quindi l'autore del template deve occuparsi solo della parte di presentazione. Il template rimane lo stesso indipendentemente dal fatto che queste variabili provengano da un database, da un cookie o calcolate in qualsiasi altro modo. Anche l'esatta API Java (e quindi la classe) dei valori può essere nascosta in FreeMarker usando una tecnica chiamata object wrapping. Ad esempio, "messages" sembra essere un elenco o un array di JavaBean che hanno le proprietà "from" e "body", ma potrebbe anche essere qualcosa di molto diverso e il template non ne risente (purché venga usato un wrapper appropriato).

