A Java Portlet Specification definiálja a portlet konténer és a portletek közötti szerződést és egy kényelmes programozási modellt nyújt a Java portlet fejlesztők számára.
A portletek webportálokba építhető UI-komponensek, melyek a portál konténerben futnak.
Egy webportál általában több portletet is tartalmaz, a leggyakrabban alkalmazottak a következők: e-mail kliens, időjárás-előrejelzés, hírek. Egy portlet a felépítéséből adódóan könnyen testre szabható, a felhasználó által átrendezhető, módosítható.A különböző gyártók által elkészített portletek száma rohamos növekedésnek indult, ami komoly nehézséget okozott a webportálok üzemeltetőinek és felhasználóinak egyaránt, hiszen a különböző gyártók különféle interfészeket alkalmaztak. E problémák megoldására született először a JSR (Java Specification Request) 168, a Portlet specifikáció, amely lehetővé teszi a különböző portletek együttműködését, összehangolását. Ezt több változat követte: a 2.0 és legújabban 3.0.
A JSR 168 a portletet Java alapú komponensenként definiálja, amely egy megjelenítési réteget ad az információs rendszereknek.
A JSR 168 céljai a következők:
A számítástechnikai iparág többnyire elfogadta a JSR 168-at. Többek között a következő vállalatok tagjai a JSR 168 csoportnak: Apache, ATG, Boeing, Fujitsu, IBM, Novell és Oracle.
A portlet specifikáció újabb változata a 2.0-s (JSR-286), több képességgel is felruházza a portleteket. Ilyen például az IPC (inter-portlet-communication), ami a portletek közti kommunikációt teszi lehetővé üzenetekkel és nyilvános render paraméterekkel. Akár két külön portlet konténer között is lehetséges a kommunikáció. Dinamikusan generált erőforrások (serveResource), valamint dinamikusan generált Axaj és JSON adatok kiszolgálását is lehetővé teszi. Itt vezették be a portletfiltereket és a listenereket is.
A portlet specifikáció harmadik változatának készítése 2013 elején kezdődött meg, és a következőket tartalmazza:.[1]
Egy szabványos JSR 168 portlet életciklusa:
Minden portletnek implementálnia kell a java.portlet.Portlet interfészt, vagy öröklődnie kell egy ilyen osztályból. Egy portlet interfész a következő metódusokból áll:
java.portlet.Portlet
A JSR 168 a következő 3 megjelenítési módot definiálja:
Azonban ezek kiterjeszthetőek.
import java.io.PrintWriter; import java.io.IOException; import javax.portlet.GenericPortlet; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import javax.portlet.PortletException; public class HelloWorldPortlet extends GenericPortlet { /** * A portlet a következő szöveget jeleníti meg: "Hello, World" */ public void render(RenderRequest request, RenderResponse response) throws PortletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello, World"); } }
<?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"+ "http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0"> <portlet> <portlet-name>HelloWorldPortlet</portlet-name> <portlet-class>org.jboss.portlet.hello.HelloWorldPortlet</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> </supports> <portlet-info> <title>HelloWorld Portlet</title> </portlet-info> </portlet> </portlet-app>
Referencia implementáció:
Kereskedelmi implementációk a főbb java szállítóktól:
Nyílt forráskódú implementációk: