Hlavní navigace

Apache Struts 1.1: plugin Tiles a systém logování

27. 5. 2003
Doba čtení: 4 minuty

Sdílet

V závěrečném dílu našeho seriálu se věnujeme pluginu Tiles a systému logování. Nakonec si něco přečtete o budoucnosti systému Struts a jeho vztahu k projektu JSF (Java Server Faces).

Když se webová aplikace rozroste natolik, že ji používá mnoho uživatelů, většinou se přejde k portálovému systému. Uživatelé se do aplikace nahlásí a mají možnost si modifikovat vzhled. Účetní chce například na první stránce posledních dvacet operací na pokladně a manažer by na úvodní stránce měl raději na očích odkazy na nejnovější články z oboru. Díky Tiles je tohle všechno hračkou.

Plugin Tiles dokonale využil tří základních značek systému Struts pro vytváření šablon a značně je rozšířil. Základní myšlenka spočívá v tom, že si vytvoříte tzv. kousky (tiles), které pak naskládáte na stránku. Tyto kousky mohou využít jednoduché dědičnosti, takže nad jejich vzhledem získáváte flexibilní kontrolu.

Typickým příkladem může být menu, které se obvykle vyskytuje nahoře či vlevo na stránce. Do základní šablony (layout) vložíte tedy kousek nazvaný mainmenu. Jednotlivé sekce portálu pak mohou implementovat mainmenu a dodat některé položky navíc. Tiles lze také přidělovat stránkám dynamicky. Můžete tak jednoduše vytvořit průvodce (wizardy), okna s oušky (tabs) či umožnit uživateli kompletně přizpůsobit vzhled.

Samozřejmostí je podpora lokalizace. Jednotlivé kousky mohou být na serveru ve více jazykových verzích a aplikace (resp. uživatel) může rozhodnout, kterou předložit ke zobrazení. Tiles nabízí mnoho předdefinovaných kousků pro různé účely. Za všechny bych rád jmenoval například Rss Channel, který umožňuje s minimálním úsilím zobrazit na portálu RSS kanál (například serveru root.cz). Zájemcům doporučuji prozkoumat domovskou stránku projektu, kde je k nalezení také on-line demo.

Pokud jste již někdy programovali webovou aplikaci, jistě jste narazili na věčný problém – logování (ve smyslu manipulace a zapisování ladících a chybových informací – nebudu překládat). Ať tedy chcete ladit, nebo sledovat nasazenou aplikaci, musíte většinou vymýšlet nějaký způsob, jak toho dosáhnout. Problém logování byl již v Javě mnohokrát řešen. Existuje několik projektů, které se logováním zabývají a asi nejznámější knihovnou je LOG4J(OpenSource projekt, který byl dokonce úspěšně portován i na jiné jazyky, jako jsou C++, C# a Python). Máte také možnost použít logovací API, která se nacházejí v Javě 1.4 a vyšší.

Ačkoliv se logovací knihovny zabývají poměrně jednoduchou problematikou, mohou se zdát poněkud složité. Proto vývojáři Struts doporučují využít jednoduchou knihovnu z projektu Commons, která nese název commons-logging (dále jen CL). CL je podprojektem Jakarty (ta je součástí Apache) zastřešujícím několik (desítek) skutečně malých řešení (knihovniček), která jsou obvykle nesmírně užitečná. CL se nalézá také v binární distribuci projektu Struts.

O co jde? Místo toho, abyste používali přímo nějaké konkrétní API, používáte CL jako most mezi aplikací a logovacím systémem (CL zvládne například LOG4J nebo JDK1.4 Logging). Použití je skutečně přímočaré a jasné a díky snadné konfiguraci (pomocí systémové proměnné nebo speciálního souboru commons-logging.properties, který musí být v adresáři WEB-INF/classes) si můžete vybrat, kterou implementaci hodláte používat. Právě v tom je síla, protože se můžete bez jakékoliv změny nebo rekompilace kódu rozhodnout, zda chcete logování vypnout, ukládat do souboru, či něco jiného. Součástí CL je také třída, která vypisuje všechny zprávy na konzoli, a třída, která všechny záznamy zahazuje (obdoba /dev/null), takže pro začátek ani nemusíte žádnou jinou implementaci instalovat. Můžete si také vytvořit vlastní implementaci a zapisovat např. do databáze či posílat SMS.

Tabulka č. 435
Log log = LogFactory.getLog("cz.root.test");

log.debug("Počet objednávek" + orders.length());

if (log.isInfoEnabled()){
  StringBuffer buf = new StringBuffer();
  buf.append("Přihlášený uživatel: ");
  buf.append("Jméno: " + user.getGivename());
  buf.append("Příjmení: " + user.getSurname());
  buf.append("Email: " + user.getEmail());
  log.info(buf.toString());
}

Příklad použití commons-logging API

Na příkladu je vidět, jak se CL používá. Vytvoříte si instanci loggeru a pak do něj zapisujete (co jiného). Každou instanci si pojmenujete, abyste mohli informace třídit, a můžete využít následujících stupňů vážnosti: debug, error, fatal, info, trace, warn.Všimněte si, že pokud hodláte do logu zapsat větší množství informací, jejichž sestavení trvá déle, je vhodnější nejprve zjistit, zda je logování zapnuto (metody isXxxEnabled), aby se zbytečně nevolala metoda pro vložení záznamu, která by stejně nic neudělala. Logovat můžete i výjimky, což bude asi vhodné. Na závěr paragrafu bych rád podotknul, že tuto knihovnu můžete využívat kdekoliv, což vřele doporučuji.

A co budoucnost? Na programu je sjednocení s JSF (Java Server Faces). Vývojáři (nejen) u Sunu si totiž všimli, že konkurenční technologie (např. ASP.NET) umožňuje přehledně generovat (renderovat) HTML pomocí speciálních XML značek. Tyto značky lze navíc komfortně „naklikat“ v různých IDE prostředích tak, jako by stránky byly formuláře v jazyce Visual Basic. Což o to, ono to s technologií JSP jde, jak jsme se přesvědčili v tomto seriálu. Jenže pro Struts žádný GUI editor není (myslím, že firma Borland v tomto podniká jisté kroky) a je zde potřeba tyto značky sjednotit. Proto se připravuje projekt, který by se měl stát součástí standardní instalace JSP kontejnerů a to je právě JSF.

CS24 tip temata

Díky JSF budou mít vývojáři jednotné JSP značky pro tvorbu HTML komponent (textbox, listbox, tlačítko, imagemap…) tak, jak je tomu u Struts již nyní. Specifikace bude samozřejmě promyšlena do nejmenších detailů. JSF bude též nabízet přepínání mezi cílovou technologií (WAP, HTML…). Vývojáři Struts slibují, že jakmile vyjde finální specifikace JSF, Struts budou tyto značky podporovat a doporučovat pro nové projekty. Vizuálním GUI nástrojům pro rychlou tvorbu webových aplikací pak nic nebude stát v cestě.

http://jakarta­.apache.org/strut­s/

Seriál: Apache Struts

Autor článku