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.
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]
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]
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:
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]
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:
ResourceServingPortlet
poskytuje metodu serveResource
.K této verzi vznikla implementace pod OpenPortal Project nazvaná OpenPortal nebo referenční implementace od společnosti Apache Pluto.[7]