Portlet

Portlety jsou webové komponenty umožňující integraci webových aplikací a portálů. Používají se jako výměnné komponenty uživatelského rozhraní poskytující prezentační vrstvu pro informační systém. Součinnost portálů a portletů je zajišťována pomocí API, které je definováno v Java Portlet Specification. Díky tomuto API mohou být portlety spuštěny na jakémkoliv portálu založeném na Java EE bez ohledu na jeho implementaci.

Podstata a technologie

[editovat | editovat zdroj]

Portlety jsou miniaplikace, založené na technologii Java a svou podstatou jsou podobné servletům.[1] Stejně jako servlet i portlet spravuje kontejner. Portletový kontejner může někdy být jako nadstavba servletového kontejneru. Portletový kontejner spouští konkrétní portlety, řídí jejich životní cyklus, zajišťuje prostředky potřebné pro běh portletů a poskytuje perzistentní úložný prostor pro jejich nastavení. Portlet přijímá a zpracovává požadavky. Obsah generovaný portletem, také nazývaný „fragment“, je část kódu ve značkovacím jazyce (HTML, XHTML, WML). Jednotlivé fragmenty se pak mohou používat v portálech jako pluginy, které lze libovolně přidávat nebo odebírat.[2]

Schéma vytvoření portálové stránky s portlety

Na portálu může být například portlet zobrazující počasí, portlet pro změnu hesla nebo pro zobrazení mapy České republiky apod. Obsah generovaný jedním konkrétním portletem se může lišit v závislosti na jeho konfiguraci.

Uživatelsky komunikuje webový prohlížeč s portletem pomocí standardního paradigmatu (požadavek/odpověď), kdy požadavek je předán portálem portletu. Zde je zpracován a výsledek (odpověď) se vrací zpět portálu, který ho zobrazí uživateli. Uživatelé tak většinou mohou interagovat s portletem stejným způsobem jako se pohybují po běžných webových stránkách.[3]

Životní cyklus portletu

[editovat | editovat zdroj]

Základ portletu tvoří hlavní třída, JSP stránky a tzv. deployment descriptory (popisné soubory pro portál). V JSP stránce jsou obsaženy základní HTML tagy, ale také speciální tagy nebo části Java kódu, které zpracovává portálový server a poté předá stránku klientovi.

Hlavní třída portletu je vždy potomkem třídyjavax.portlet.GenericPortlet, u které je většinou třeba přepsat metody řídící jeho životní cyklus. Tyto metody jsou:

  • init(PortletConfig config)
  • processAction(ActionRequest request, ActionResponse response)
  • render(RenderRequest request, RenderResponse response)
  • destroy().

Inicializační metoda init(PortletConfig config) se volá jen jednou, a to při nasazení (deploy) portletu do portálu. Parametr PortletConfig přistupuje k inicializačním parametrům a k nastavení lokalizačních balíčků (ResourceBundle), které jsou definovány v popisném souboru portlet.xml.Když při inicializaci nastane chybový stav, vyvolají se výjimkyPortletException,nebo UnavailableException.Portletový kontejner nepokračuje v životním cyklu instance a objekt uvolní. Může se pokusit inicializaci zopakovat.

Metoda processAction(ActionRequest request, ActionResponse response) je volána na podnět od uživatele (například zpracování události jako je „kliknutí myší na odkaz“ nebo „odeslání formuláře“). V prvním parametru třídyActionRequest jsou vstupní požadavky pro akci a typ třídy ActionResponse obsahuje odpověď, například informace pro změnu velikosti okna, módu portletu, přesměrování na jinou URL adresu nebo požadavek na perzistentní uložení vstupních parametrů apod.

Metoda render(RenderRequest request, RenderResponse response) obsahuje pořadavek na vykreslení portletu, následuje po metodě processAction. Obecně se dá říci, že tato metoda generuje obsah založený na aktuálním stavu portletu.

Poslední metodou je metodadestroy()uloží stav portletu a uvolní instanci.[4][2]

Stránka portálu obsahuje respektive zobrazuje tyto tři portlety:

  • Změna hesla
  • Mapa – portlet zobrazující mapu ČR s možností přiblížení
  • Svátek – portlet zobrazující jména, která slaví ten den svátek

Uživatel vyplnil formulář pro změnu hesla a stiskl potvrzení. Portál v té chvíli vyvolá akční fázi v portletu Změna hesla a předá mu vyplněné hodnoty formuláře. Portlet Změna hesla v této akční fázi nastaví nové heslo a připraví odpověď. „Heslo úspěšně změněno.” Po ukončení tohoto portletu, si portál vyžádá obsah všech tří portletů (vyvolá jejich render fáze), aby mohl zobrazit aktualizovanou stránku.

Uživateli se zobrazí nová stránka, kde Změna hesla obsahuje informaci o úspěšné změně hesla. Ostatní portlety zůstaly stejné, pokud nenastal další den, při kterém by Svátek ukázal nové jméno.

Stejně portál pracuje, když uživatel klikne na přiblížení mapy. Nyní akční fáze probíhá pouze u portletu Mapa. Na aktualizované stránce se zobrazí přiblížení na mapě a ostatní portlety se nezmění (není-li nový den).

V tomto příkladu při jednom jednom uživatelském požadavku, vždy proběhne jedna akční fáze a tři render fáze. V akční fázi je vždy pouze jeden portlet.[5]

Standardy Java Portlet Specification

[editovat | editovat zdroj]
  • spolupráce a komunikace mezi jednotlivými portlety,
  • obsluha jiných zdrojů než html (pdf, obrázky, ...),
  • podpora pro tvorbu rámců webových aplikací,
  • AJAX,
  • kvalitnější podpora cache v portálu,
  • portletové filtry.

Další verze Java Portlet Specification 2.0 byla vydána v červnu 2008 a definována normou JSR 286, která byla kompatibilní s verzí JSR 168.[4]

Hlavní vylepšení oproti JSR 168:

  • Události (events)– umožňují portletu odesílat a přijímat události a provádět změny stavu nebo odesílat další události jako výsledek zpracování události,
  • Veřejné parametry vykreslování – umožňuje portletům sdílet parametry s jinými portlety, probíhá obsluha zdrojů ve fázi vykreslování, rozhraní ResourceServingPortlet poskytuje metodu serveResource.
  • Poskytování prostředků – poskytuje portletu možnost obsluhovat prostředky, metoda createResourceUrl vytvoří URL pro přístup k danému zdroji (ten se nastaví jako atribut id v příslušném URL
  • Portletový filtr – umožňuje průběžné transformace informací v požadavku na portlet i v odpovědi z portletu.[6]

K této verzi vznikla implementace pod OpenPortal Project nazvaná OpenPortal nebo referenční implementace od společnosti Apache Pluto.[7]

  1. What is the difference between a portlet and a servlet?. Stack Overflow [online]. [cit. 2023-10-19]. Dostupné online. (anglicky) 
  2. a b BASOVNÍK, Martin. Sada portletů pro správu času [online]. Vysoké učení technické v Brně, Fakulta informačních technologií, Ústav informačních systémů, 2013 [cit. 2023-10-17]. Diplomová práce. Dostupné online. 
  3. BEČKA, Marek. Porovnání open source portálů na platformě J2EE. dk.upce.cz. 2007. Dostupné online [cit. 2023-10-17]. 
  4. a b KUČÍRKOVÁ, Eva. Portlet pro seznam kontaktů. 2010 [cit. 2023-10-17]. Masarykova univerzita, Fakulta informatiky. Dostupné online.
  5. Úvod do světa portletů. BCVlog [online]. 2013-05-31 [cit. 2023-10-20]. Dostupné online. 
  6. Portal Specifications: Difference between JSR 168 and JSR 286 [online]. 2011-01-13 [cit. 2023-10-19]. Dostupné online. (anglicky) 
  7. HARTMAN, František. Vývoj portletů [online]. Brno: Masarykova univerzita, Fakulta informatiky, 2011 [cit. 2023-10-17]. Dostupné online.