Similar to servlets, portlets are
web components that are deployed inside of a container and generate dynamic
content. On the technical side, a portlet is a class that implements the
javax.portlet.Portlet interface and is packaged and deployed as a .war file
inside of a portlet container.
Portlets are similar to servlets, in that:
- Portlets
are managed by a specialized container.
- Portlets
generate dynamic content.
- A
portlet's life cycle is managed by the container.
- Portlets
interact with web client via a request/response paradigm.
Portlets are different from servlets, in that:
- Portlets
only generate markup fragments, not complete documents.
- Portlets
are not directly URL addressable. You can’t send somebody URL of a
portlet. You can send him the URL of the page containing a portlet.
- Portlets
cannot generate arbitrary content, since the content generated by a
portlet is going to be part of portal page. If a portal server is asking
for html/text, then all portlets should generate text/html content. On the
other hand, if the portal server is asking for WML, then each portlet
should generate WML content.
Portlet
interface:
The
Portlet
interface is used by the portlet container to invoke the portlets. Every
portlet has to implement this interface, either by directly implementing it, or
by using an existing class implementing the Portlet interface.
A portlet is a
Java technology-based web component. It is managed by the portlet container and
processes requests and generates dynamic content as response. Portlets are used
by portals as pluggable user interface components.
The content
generated by a portlet is called a fragment. A fragment is a piece of markup
(e.g. HTML, XHTML, WML) adhering to certain rules and can be aggregated with
other fragments into a complete document. The content of a portlet is normally
aggregated with the content of other portlets into the portal page.
The portlet container instantiates portlets manages their
lifecycle and invoking them to process requests. The lifecycle consists of:
- initializing
the portlet using using the init method
- request
processsing
- taking
the portlet out of service using the destroy method
Request processing is divided into two types:
- action
requests handled through the processAction method, to perform actions
targeted to the portlet
render requests handled through the
render method, to perform the render operation
Called by the portlet container to indicate to a portlet
that the portlet is being placed into service.
The portlet
container calls the init method exactly once after instantiating the portlet.
The init method must complete successfully before the portlet can receive any
requests.
The
portlet container cannot place the portlet into service if the init method
1.
Throws a PortletException
2.
Does not return within a time period
defined by the portlet container
public void processAction(ActionRequest request,ActionResponse response) throws PortletException,java.IOException
Called by the portlet container to allow the portlet to
process an action request. This method is called if the client request was
originated by a URL created (by the portlet) with the RenderResponse.createActionURL()
method.
Typically,
in response to an action request, a portlet updates state based on the
information sent in the action request parameters. In an action the portlet
may:
·
issue a redirect
·
change its window state
·
change its portlet mode
·
modify its persistent state
·
set render parameters
A client
request triggered by an action URL translates into one action request and many
render requests, one per portlet in the portal page. The action processing must
be finished before the render requests can be issued.
public void render (RenderRequest request,
RenderResponse response)throws PortletException,java.io.IOException
Called by the portlet container to allow the portlet to
generate the content of the response based on its current state.
public void
destroy():
Called by
the portlet container to indicate to a portlet that the portlet is being taken
out of service. Before the portlet container calls the destroy method, it
should allow any threads that are currently processing requests within the
portlet object to complete execution. To avoid waiting forever, the portlet
container can optionally wait for a predefined time before destroying the
portlet object.
This method enables the portlet to
do the following:
·
clean up any resources that it holds
(for example, memory, file handles, threads)
·
make sure that any persistent state
is synchronized with the portlet current state in memory.