FreeMarker

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

FreeMarker je šablonovací systém pro Javu. Je navržen s ohledem na čistotu návrhu podle vzoru MVC. Používá se především pro pohled (view) v prostředí Java Servlets, ale může být použit pro generování textů v libovolném prostředí - např. generování statických webových stránek, konfiguračních souborů, e-mailů…

FreeMarker na rozdíl od JavaServer Pages neumožňuje přímé vkládání Java kódu do šablon a šablony jsou interpretovány až za běhu (nejsou předkompilovány do Java bajtkódu). FreeMarker umožňuje automatický výběr šablony podle zvoleného jazyka - např. +more při požadavku na stránku index. ftl pro jazyk cs_CZ se postupně hledají šablony index_cs_CZ. ftl, index_cs. ftl a index. ftl. FreeMarker rovněž umožňuje používat jakýsi systém dědičnosti šablon. Např. v následující struktuře souborů se při vložení (include) obsahu souboru */menu. ftl do souborů /index. ftl a /aktuality. index. ftl vloží soubor /menu. ftl, do souboru /e-shop/index. ftl se ale vloží /e-shop/menu. ftl: /index. ftl /menu. ftl /aktuality/index. ftl /aktuality/menu. ftl /e-shop/index. ftl /e-shop/menu. ftl.

Ve FreeMarkeru lze vytvářet knihovny šablon, které je následně možné naimportovat do jiné šablony. Při importu je určen jmenný prostor knihovny, takže při importu více knihoven s prvky se shodnými názvy nedochází ke konfliktu jmen.

Příklad

Šablona ve FreeMarkeru:

Ahoj světe! Tito ${lide?size} lidé zdraví svět:

[#list lide as osoba] ${osoba.jmeno} ${osoba.prijmeni} (${osoba.vek} let) z obce ${osoba.obec} [/#list]

Model - Java objekty:

public class Osoba { public Osoba(String jmeno, String prijmeni, int vek, String obec) public String getJmeno { … } public String getPrijmeni { … } public int getVek { … } public String getObec { … } }

List osoby = new LinkedList; osoby. add(new Osoba("Marie", "Černá", 32, "Ostrava")); osoby. +moreadd(new Osoba("František", "Novák", 54, "Brno")); osoby. add(new Osoba("Natálie", "Zajícová", 72, "České Budějovice"));.

Map root = new HashMap; root.put("lide", osoby); //root je předáno FreeMarkeru jako datový model

Po spojení šablony a datového modelu je vygenerován výstup:

Ahoj světe! Tito 3 lidé zdraví svět:

Marie Černá (32 let) z obce Ostrava František Novák (54 let) z obce Brno Natálie Zajícová (72 let) z obce České Budějovice

Datový model - Java

Datový model pro šablonu FreeMarkeru může obsahovat tři typy objektů - skalár (text, číslo, datum a čas, logická hodnota), sekvenci (seřazený seznam objektů) nebo mapu (klíče a odpovídající hodnoty). Skaláry je možné přímo vypisovat do výstupu, případně je formátovat (získat část řetězce, formátovat datum a čas nebo číslo). +more Sekvenci je možné procházet pomocí příkazu [#list seznam as položka]…[/#list]. Mapy je možné procházet pomocí tečkové notace mapa. klíč. FreeMarker poskytuje mapování ze standardních Javovských objektů (řetězce, čísla, logické hodnoty, datum a čas) na skaláry, kolekce mapuje na sekvence a mapy a JavaBeany mapuje na mapy - názvy vlastností (properties) JavaBeanu jsou mapovány jako klíče mapy. Toto mapování může programátor předefinovat a přidat mapování vlastních objektů - takto je např. ve FreemarkerServletu mapován kontext atributů HTTP požadavku, HTTP session a aplikace (servlet kontextu) mapován na mapu Freemarkeru. Jako datový model šablony se Freemarkeru předává mapa objektů.

Šablony

Šablony FreeMarkeru umožňují vypisovat a formátovat skalární hodnoty (pomocí konstrukce ${skalár}). Dále mohou obsahovat podmíněné příkazy, příkaz pro procházení sekvence, vytváření maker (opakujících se částí šablony), importovat knihovny maker z jiných souborů a vkládat jiné šablony. +more Do šablon není možné psát Java kód, příkazy šablon jsou orientovány pouze na prezentační logiku.

Použití v prostředí Java servletů

Při použití v prostředí Java servletů je možné používat knihovny tagů pro JSP (taglibs). Freemarker také poskytuje rozšiřitelný FreemarkerServlet, který je možné namapovat například na vzor *. +moreftl. Všechny soubory s koncovkou . ftl jsou pak zpracovány jako FreeMarker šablony, jako datový model je jim předán sloučený kontext HTTP požadavku, session a aplikace - zadané jméno (např. ${osoba}) se postupně hledá jako atribut v HttpServletRequest, HttpSession a ServletContext. Díky tomu je možné použít FreeMarker jako hotovou knihovnu (bez dalšího rozšiřování), v servletu naplnit potřebné hodnoty (model) do atributů požadavku, session nebo aplikace a následně požadavek předat na soubor s koncovkou . ftl.

Příklad

Šablonu z předchozího příkladu uložíme jako soubor /lide.ftl v kořenovém adresáři webové aplikace. Ve web.xml nakonfigurujeme FreemarkerServlet pro zpracování souborů s příponou .ftl:

Freemarker freemarker.ext.servlet.FreemarkerServlet

TemplatePath /

ContentType text/html

auto_import */freemarker/common.ftl as c

tag_syntax square_bracket

template_update_delay 0

default_encoding UTF-8

1

Freemarker *.ftl

Řídící servlet:

… public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOexception, ServletException { List osoby = new LinkedList; osoby. add(new Osoba("Marie", "Černá", 32, "Ostrava")); osoby. +moreadd(new Osoba("František", "Novák", 54, "Brno")); osoby. add(new Osoba("Natálie", "Zajícová", 72, "České Budějovice"));.

request.setAttribute("lide", osoby); request.getServletContext.getRequestDispatcher("/lide.ftl").forward; } …

Požadavek na tento servlet vygeneruje stejný výstup, jako úvodní příklad.

Odkazy

Související články

JSP * Apache Velocity

Externí odkazy

[url=http://freemarker.org]FreeMarker[/url] *[url=http://fmpp.sourceforge.net]FMPP[/url] preprocesor souborů založený na FreeMarkeru

Kategorie:Software v Javě Kategorie:Šablonovací systémy

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top