Moderní a používaný J2EE rámec, který byl pro svoji popularitu přenesen i na jiné platformy (PHP, .NET)
Řeší některé problémy návrhu vzhledu webových aplikací. Řeší problém se stejným HTML kódem, který je uložen ve více stránkách. Příkladem jsou menu, hlavičky, patičky apod.
Založen na šablonovacím systému, kdy výběr určité šablony zavisí na kontextu aplikace
Aplikační rámec umožňující dekorování výsledků HTTP požadavků šablonou. Výdledkem požadavku musí být HTML kód.
Ve skutečnosti filter (javax.Filter), který je aplikován na určitý kontext aplikace
Zpracovává výsledky požadavků a dekoruje je na základě některých vlastností prostředí a definovaných pravidel
Dekorátory mohou být vybírány na základě hlavičky USER-LANGUAGE, na základě cookies, parametru v session či na základě uživatelsky definovaného mapování
<decorator name="skin-pro-administraci" page="edit.jsp"> <pattern>/secure/edit/*</pattern> </decorator>
Příklad 1. Dekorátor
01 <%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %> 02 <html> 03 <head> 04 05 <decorator:head /> 06 07 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 08 </head> 09 <body> 10 <div id="zahlavi">záhlaví</div> 11 <div id="menu">menu</div> 12 13 <decorator:body /> 14 15 <div id="zapati">zápatí</div> 16 </body> 17 </html>
Příklad 2. Stránka
01 <html> 02 <head> 03 <title>Sitemesh</title> 04 </head> 05 <body> 06 <div id="content"> 07 <p>Odstavec 1</p> 08 <p>Odstavec 2</p> 09 </div> 10 </body> 11 </html>
Příklad 3. HTML odezva na požadavek
01 <html> 02 <head> 03 04 <title>Sitemesh</title> 05 06 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 07 </head> 08 <body> 09 <div id="zahlavi">záhlaví</div> 10 <div id="menu">menu</div> 11 12 <p>Odstavec 1</p> 13 <p>Odstavec 2</p> 14 15 <div id="zapati">zápatí</div> 16 </body> 17 </html>
Stejně jako JSP a známého Velocity je i Freemarker šablonovací jazyk
Narozdíl od JSP nejsou šablony Freemarkeru kompilovány. Běh aplikací je tedy relativně rychlejší.
Nutí oddělit prezentační vrstvu od aplikační vrstvy. (Neexistují v něm jazykové konstrukce typu JSP skripletů, i když možnost pracovat přímo v Java kódu tu existuje)
Ve FTL (Freemarker template) lze využít Expresion language pro přístup k vlastnostem objektů uložených v modelu
Je nástroj pro generování textového výstupu (nemusí být pouze HTML) na základě definovaných šablon
Nicméně, Freemarker byl navržen pro generování HTML stránek v J2EE aplikacích navrženýchc podle modelu MVC
Striktně odděluje aplikační logiku od prezentační vrstvy
Freemarker není aplikační rámec. Je navržen pouze pro zobrazení dat v modelu MVC
Umí nativně pracovat s XML dokumenty, které reprezentují model
Jeho velká obliba zapříčinila portaci do prostředí desktopového ve formě Freemarker Preprocesoru
Příklad 4. FTL šablona
01 <html> 02 <head> 03 <title>Freemarker</title> 04 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 05 </head> 06 <body> 07 Ahoj, mé jméno je ${user.jmeno} ${user.prijmeni} 08 </body> 09 </html>
${user.jmeno} a ${user.prijmeni} jsou značky, které umožnují přístup k vlastnostem instance třídy User, který programátor uložil do modelu.
V šabloně lze využít FTL značky pro cykly, podmínky, existenci vlastností apod. Je možno přistoupit k jednotlivým prvkům v polích či přístup k metodám objektů uložených v modelu.
Pro často používané konstrukce lze využít parametrizovatelných maker
Pokud máme nadefinovanou šablonu a připravená data, která umístíme do modelu, musíme vytvořit jednotku Freemarkeru která se postará o zpracování šablony a připravených dat.
import freemarker.template.*; import java.util.*; import java.io.*; public class Test { public static void main(String[] args) throws Exception { Configuration cfg = new Configuration(); //zdroj sablon cfg.setDirectoryForTemplateLoading(new File("cesta/k/adresari/se/sablonami/")); //nastaveni wrapperu pro data pridavana do modelu cfg.setObjectWrapper(new DefaultObjectWrapper()); //nacteni sablony Template temp = cfg.getTemplate("test.ftl"); /* Vytvoreni modelu */ Map root = new HashMap(); root.put("user", "Big Joe"); Map latest = new HashMap(); root.put("latestProduct", latest); latest.put("url", "products/greenmouse.html"); latest.put("name", "green mouse"); /* Zpracování dat v modelu proti sablone */ temp.process(root, out); //vytisteni dat Writer out = new OutputStreamWriter(System.out); out.flush(); } }
Freemarker má v současnosti několik vlastností navíc oproti Velocity 1.2. Zde jsou některé vyjmenované.
Rozšíření webových aplikací na úkor desktopových má své důvody:
Snadnější údržba (opravy či aktualizace verzí pocítíme jako uživatelé, ne jako správci).
Většinou snadnější vývoj díky platformové nezávislosti kombinací HTTP, HTML, grafických formátů (a příp. JavaScriptu).
Vše dobře ladí s centralizací dat a jejich zpracování na serveru.
I starosti se zabezpečením (safety & security) jsou centralizovány.
Tradiční webové aplikace trpěly typickými nedostatky oproti klasickým desktopovým aplikacím:
komunikace klient-server byla vždy inicována ze strany klienta a to většinou akcí uživatele - klikem na odkaz, stiknem tlačítka...
většina operací (aplikační logiky) musela být na serveru (s drobnými výjimkami - validace vstupu, drobné změny v GUI...)
zvyšovalo to zátěž sítě a hlavně ztěžovalo práci
jsou starosti s nekompatibilitou interpretace HTML a zejména skriptů (i JavaScriptu) na různých platformách i prohlížečích.
Koncepce AJAX je vybudována na principech webových aplikací, které generují a používají na straně klienta (tj. v prohlížeči) speciální javascriptové techniky, jež:
Nejznámnějšími místy intenzivně využívajícími principy AJAX jsou služby Google:
Google Suggest (FAQ)- při vyhledávání jsou uživateli nabízeny tipy (klíčová slova), na co se může ptát
Google Gmail (popis)- jsou nabízeny adresy příjemců zpráv, automaticky je aktualizován obsah mailboxu...
Google Maps - při pohybu v mapě se automaticky objevují nové části mapy.
To ale nejsou aplikace jediné, mezi další patří i české:
slovnik.seznam.cz - při vkládání slova pro překlad se objevují tipy, co zadat.
Manuel Kiessling’s open-source ARSC (A Really Simple Chat) - chat založený na HTTP komunikaci
KnowNow’s SpeedReader
AJAX není jednou technologií, ale spočívá v použití kombinace (známých a zavedených) technologií a standardů:
HTML / XHTML a CSS pro prezentaci informací
JavaScript pro modifikaci Document Object Modelu (DOM) na klientovi
XMLHttpRequest pro (asynchronní) výměnu dat se serverem.
Server dev.java.net nabízí v rámci Java BluePrints Solutions Catalog sekci: