Učebnice Java s webovými příklady na třídě Element

31. 5. 2022 12:38 (aktualizováno) Pavel Ponec

Úvodem bych rád poděkoval redakci portálu Root.cz za zveřenění zprávy o zahájení předprodeje učebnice jazyka Java a děkuji také čtenářům za všechny komentáře, které mě přiměly k napsání tady tohoto blogu. 

Ukázkové příklady k připravované knize tvoří servlety jednoho Maven projektu, který se spouští příkazem jako webová aplikace na kontejneru Jetty. Pro eliminaci textových řetězců s HTML kódem se využívá třída Element z webového modulu volně šiřitelné knihovny Ujorm. Protože však použití třídy Element pro stavbu webové stránky není úplně typické, pokusím se její význam obhájit. Proč je tedy použití třídy Element výhodné právě pro začátečníky? Na prvním místě stojí za zmínku jednoduché API.  Jakmile totiž získáme kořenový element modelu, tak pro sestavení zbytku HTML stránky stačí znát pouze pouze tři jeho metody:

  1. setAttribute() – metoda přiřadí aktuálnímu elementu atribut s hodnotou (poznámka: název celé metody jsem doplnil dodatečně na podnět v diskuzi).

  2. addElement() – metoda do objektu přidá nový element s názvem prvního argumentu a jeho instanci vrátí zpět. Další argumenty mohou obsahovat seznam tříd CSS stylů nového elementu.

  3. addText() – metoda přidá do těla elementu libovolný text a ošetří zápis speciálních znaků. Pro zápis surového textu (například pro vložení těla Javascriptu) je k dispozici alternativní metoda addRawText().

Pomocí uvedených metod lze vytvořit prakticky libovolnou HTML stránku se správně uzavřenými tagy – aniž by uživatel musel věnovat velkou pozornost tvorbě HTML hlavičky a dalším formalitám. Po sestavení objektového modelu se zavolá na kořenovém elementu metoda close(), která odešle obsah do PrintWriteru. Protože třída Element implementuje rozhraní Closeable ze standardní Java knihovny, stačí ji obalit blokem try().

Jaké jsou další benefity třídy Element?

  1. Třída Element nabízí předchystané metody (API) pro vkládání vybraných HTML elementů, jako jsou například: nadpis, odstavec, formulář, tabulka a několik dalších.

  2. Kořenový element (HtmlElement) obsahuje výchozí (miminalistický) obsah HTML hlavičky a metodu pro zápis těla HTML stránky. Element výchozí hlavičky získáme metodou getHead() a element těla metodou getBody().

  3. Vnitřní elementy výsledného HTML kódu se automaticky odsazují mezerami.

  4. Většinu překlepů odhalí už kompilátor, platnost použitých HTML elementů však zůstává na odpovědnosti vývojáře.

  5. Uzavírání vnitřních elementů sice není povinné, ale jejich případné zavírání konstrukcí try-with-resources vede ke struktuře zdrojového Java kódu, který připomíná zápis formátovaného HTML/XML.

Ukázka sestavení HTML stránky s nadpisem a jednoduchou tabulkou (pro 64 buněk):

Má třída Element nějaké další zajímavosti?

  1. Ve skutečnosti výchozí (defaultní) implementace je obálka nad třídou PrintWriter a tak všechny texty zapsané do Elementu se posílají rovnou do toho writeru. Metoda close() pak uzavře otevřené tagy a vyprázdní buffer. Výhodou takového řešení je dobrá performance a minimální paměťová náročnost při sestavování objemných stránek.

  2. Pokud však potřebujeme plnohodnotný paměťový model, lze ho aktivovat změnou konfigurace při sestavení kořenového elementu. Smysl to může mít v případech, kdy se chystáme doplňovat do modelu dodatečné (zpětně) nějaké další elementy. Sestavení původních elementů přitom zůstane beze změny.

  3. Pomocí konfigurace lze změnit také znaky pro odsazování vnořených elementů, zalamovat řádky, nastavovat národní prostředí stránky, znakovou sadu a několik dalších vlastností. Od verze 2.03 přibyla podpora uživatelského formátování datových typů, výchozí implementace používá metodu toString().

  4. Při sestavení kořenového elementu dochází (mimo jiné) k nastavení nezbytných vlastností PrintWriteru, jako je kódová hlavičky odpovědi nebo potlačení cache internetového prohlížeče.

  5. Třída Element však může najít své uplatnění i mimo servlety – například v REST implementaci s výstupem typu: „text/html“.

Z výše uvedených důvodů se domnívám, že použití třídy Element  významně zjednodušuje tvorbu HTML stránek nejen začínajícím čtenářům.  Závěrem bych rád připomněl, že použití třídy Element není cíl, ale pouze prostředek ke snadnému zobrazení dat v internetovém prohlížeči. Pojetí třídy Element má blízko k frameworku Dom4j, ale existují i jiné alternativy. Pro inspiraci přikládám odkaz na zajímavý článek porovnávající různé přístupy k sestavení HTML nejen z pohledu performance.

Odkazy:

Sdílet