# Portlet

Los portlets son componentes modulares de las interfaces de usuario gestionadas y visualizadas en un portal web. Los portlets producen fragmentos de código de marcado que se agregan en una página de un portal. Típicamente, siguiendo la metáfora de escritorio, una página de un portal se visualiza como una colección de ventanas de portlet que no se solapan, donde cada una de estas muestra un portlet. Por lo tanto un portlet (o colección de portlets) se asemeja a una aplicación web que está hospedada en un portal. Como por ejemplo, un portlet de aplicación puede ser para el correo, el parte meteorológico, un foro, noticias, etc.
Se pretende que los estándares de los portlets permitan al desarrollador de software crear portlets que puedan ser utilizados en cualquier portal que soporte estos estándares.
Los portlets son similares a los servlets en que:
* Los portlets son manejados por un contenedor especializado
* Los portlets generan contenido dinámicamente
* El ciclo de vida de los portlets es controlado por el contenedor
* Los portlets interactúan con el cliente web mediante el uso del paradigma request/response
Los portlets son diferentes a los servlets en que:
* Los portlets son únicamente generados como fragmento de etiquetado y no como documentos completos.
* Los portlets no están asociados directamente a una URL.
* Los portlets no pueden generar contenido arbitrario, ya que el contenido de los portlets va a estar incluido en la página del portal. Si un servidor de un portal está solicitando text/html, entonces todos los portlets deben ser generados en text/html. Por otro lado si el servidor del portal está solicitando por WML, entonces cada portlet deberá ser generado en contenido WML.

## Funcionalidades adicionales que proporcionan los portlets
### Almacenamiento persistente para las preferencias

Los portlets proporcionan un objeto $PortletPreferences$ para almacenar las preferencias de usuario. Estas preferencias son almacenadas en una base de datos persistente, así se encontrarán disponibles cada vez que el contenedor de portlets se reinicie. Como desarrollador no es necesario preocuparse por la implementación del almacenamiento.

### Procesamiento de solicitudes

Los portlets disponen de una manipulación de peticiones más refinada. Un portlet puede obtener su solicitud cuando el usuario hace alguna acción sobre éste. (Un estado llamado Action phase (Fase de acción)), o porque el usuario adoptó medidas sobre otro portlet y la página necesita ser actualizada. Un portal dispone de diferentes métodos callback para el manejo de ambas situaciones.

### Modos de los portlets

Los portlets usan el concepto de mode para indicar qué está haciendo el usuario. Cuando usamos una aplicación de correo electrónico, puede ser usada para leer, escribir o revisar los mensajes del correo -- Estas se esperan que sean las funcionalidades que posee una aplicación de correo electrónico. Los portlets normalmente proporcionan esto en un modo Vista (VIEW). Pero hay otras actividades, como especificar el tiempo de actualización o la (re-)configuración de datos como el nombre de usuario y la contraseña. Estas actividades permiten al usuario configurar el comportamiento de la aplicación, por lo que se encuentran bajo el modo EDITAR (EDIT). La funcionalidad de ayuda de una aplicación de correo se enmarca sobre el modo de AYUDA (HELP). De esta manera para la lógica de negocio es necesario relacionar lógicamente un método doView para el modo de vista, de igual manera doEdit para la configuración de la aplicación y otro método doHelp para lo relacionado con la ayuda. Esto hace sencillo para el administrador controlar el acceso al portlet, porque todo lo que se tiene que hacer es cambiar los derechos de acceso del portlet y de esta manera establecer qué cosas se permite hacer al usuario.

### Estado de la ventana

El estado de una ventana determina la cantidad de espacio que podría asignársele al contenido generado por un portlet sobre el portal. Si se pulsa en el botón maximizar, el portlet utiliza todo el espacio disponible en la pantalla; de igual forma, si éste pasa a estado minimizado, únicamente se mostrará la barra de título asociada al portlet.

### Información de usuario

Comúnmente, los portlets proporcionan contenido personalizado de acuerdo a los requerimientos del mismo. Para hacer esto efectivamente, es necesario contar con atributos como nombre, correo electrónico, teléfono, etc. El API de portlet dispone para esto el concepto de atributos de usuario (user attributes).

## Estándares de portlets

El propósito del protocolo WSRP (Web Services for Remote Portlets) es suministrar un estándar de servicios web que permita el "plug-and-play" de portlets en ejecución remotos desde fuentes dispares. Muchos sitios web permiten a los usuarios registrados personalizar su vista del sitio web activando o desactivando porciones de la página web, o añadiendo o eliminando características. Esto normalmente se realiza por parte de un conjunto de portlets que juntos forman el portal.
La especificación Java Portlet (JSR-168) permite la interoperabilidad de los portlets entre portales web diferentes. Esta especificación define un conjunto de API para interacción entre el contenedor portlet y el portlet que direcciona áreas de personalización, presentación y seguridad.
Apache Pluto es una implementación de referencia de JSR-168. Otros vendedores suministran implementaciones comerciales del contenedor del portlet. Algunos de los vendedores líderes son IBM, Oracle y BEA Systems. Estos vendedores suministran implementaciones basadas en estándares, así como también extensiones no aprobadas todavía por el cuerpo de estándares. Más aún, un gran número de soluciones de portales open-source soportan JSR-168, tales como Apache Jetspeed-2 Enterprise Portal, JBoss Portal, Liferay Portal y Stringbeans Portal.