Creación de portlets y proyectos de Struts

Los proyectos de portlet Struts comparten algunas características comunes con los proyectos Struts y portlet estándar, aunque hay algunas diferencias que hay que tener en cuenta. La estructura de los proyectos de portlet Struts y los recursos relacionados vienen dictados por el soporte de la Infraestructura portlet Struts (SPF) proporcionada por WebSphere Portal e incluida en Rational Software Development Platform.

Los proyectos portlet de Struts se crean utilizando el asistente Proyecto de portlet nuevo o Proyecto de portlet nuevo (JSR 168). En el proceso de creación del proyecto, se añadirá un portlet habilitado por Struts predeterminado y, opcionalmente, un archivo de diagrama Web. El asistente genera automáticamente archivos de configuración de portlet Struts y realiza las actualizaciones necesarias de los archivos web.xml y portal.xml; además, añade al proyecto todos los archivos JAR y las bibliotecas de códigos SPF, en la estructura de directorios adecuada.

Los tipos de recursos siguientes, definidos mediante la Infraestructura portlet Struts, se incluirán en el proyecto:
Tipo de recurso Archivos Directorio de destino Notas
TLDs
Portlet API de IBM
Todos los archivos *.tld de SPFLegacyBlank.war.
Portlet API JSR 168
Todos los archivos *.tld de SPFStandardBlank.war.
WEB-INF  
JARs
Portlet de API de IBM
Todos los archivos *.jar, excepto Blank.jar de SPFLegacyBlank.war.
Portlet de API JSR 168
Todos los archivos *.jar, excepto Blank.jar de SPFStandard.war.
WEB-INF/lib  
Archivos de configuración
  • struts-config.xml
  • struts-config-modalidad.xml (para distintas modalidades/marcaciones)
WEB-INF

El elemento <controller>, que define la clase Petición de procesador (Request processor), se genera automáticamente en el archivo de configuración de Struts.

Descriptores de despliegue
  • portlet.xml
  • web.xml
WEB-INF

Portlet API de IBM

En el archivo web.xml estándar se realizan las modificaciones siguientes:

  • Se añade el servlet com.ibm.wps.portlets.struts.WpsStrutsPortlet.
  • Los símbolos Web-app, servlet y servlet-mapping tienen atributos de id con valores de cadena, con un sufijo que consiste en un identificador único, para evitar conflictos con otros portlets.
  • WpsStrutsPortlet se configura utilizando la correlación basada en prefijo, con una correlación de servlet basada en extensión definida en el parámetro de inicio struts-servlet-mapping del servidor. Cuando se incluyan enlaces Struts, se debería utilizar una correlación basada en extensión. Si desea ejecutar este proyecto de portlet Struts como una aplicación autónoma, cambie la entrada servlet-mapping de una correspondencia de servlet basada en extensión (*.do) a una correspondencia basada en prefijo (por ejemplo, un patrón URL como /app/*).
    Nota: en un proyecto Web y una aplicación de portlet no se puede utilizar la misma configuración.
  • La correlación basada en extensión es necesaria y se define en el parámetro inicial para WpsStrutsPortlet, en el parámetro struts-servlet-mapping.
  • Se utilizan las definiciones de biblioteca de códigos de portlet Struts.
  • La información de configuración de modalidad portlet se incluye en portlet.xml. Ya que la modalidad y la marcación (para SPF) se tratan como módulos Struts, dichos módulos también se definen como parte del parámetro inicial para WpsStrutsPortlet.
  • Se proporciona soporte para lista de archivo de Bienvenida para modalidades de Struts.
  • Se proporcionan valores init-param relativos al portlet Struts.
     

Portlet de API JSR 168 (estándar)

En el archivo portlet.xml se incluyen los elementos siguientes:

  • Se añade el portlet com.ibm.portal.struts.portlet.StrutsPortlet. Tenga en cuenta que no es una entrada de servlet; se define únicamente en portlet.xml
  • Los portlets se identifican de forma exclusiva con un código incluido en la definición para evitar conflictos con otros portlets.
  • La correlación basada en extensión (como *.do) es obligatoria, y se define en el parámetro inicial para StrutsPortlet, struts-servlet-mapping.
  • La información de configuración de modalidad portlet se incluye en portlet.xml. Dado que la modalidad y la marcación (para SPF) se tratan como módulos Struts, dichos módulos también se definen como parte del parámetro inicial para StrutsPortlet.
  • Se proporcionan valores init-param relativos al portlet Struts.
  • La página inicial para las modalidades de Struts soportadas se definen en portlet.xml como parte de las preferencias de portlet para este portlet. Por ejemplo:
    <portlet-preferences>
      <preference>
        <name>com.ibm.struts.portal.page.view.html</name>     <value>index.jsp</value>
      </preference>
      <preference>
        <name>com.ibm.struts.portal.page.edit.html</name>     <value>html/edit/index.jsp</value>
      </preference>
    </portlet-preferences>

Las definiciones de la biblioteca de códigos de portlet Struts adecuadas para JSR 168 SPF y la lista de archivos de bienvenida soportados para las modalidades de Struts se incluyen en el archivo web.xml.

Convenios de portlet API de IBM

Los fragmentos del archivo descriptor de despliegue y de la configuración de ejemplo que se muestran a continuación muestran los códigos representativos que se utilizan en los proyectos de portlet Struts:

struts-config.xml
El apartado de controlador siguiente se añade a todos los archivos de configuración struts:
<controller processorClass="com.ibm.wps.portlets.struts.WpsRequestProcessor">
</controller>
web.xml
Muestra un servlet portlet Struts de ejemplo añadido a web.xml. (Los valores específicos de portlet Struts están en negrita.):
<servlet id="Struts_Unique_Servlet_Name">
     <servlet-name>Struts</servlet-name>
     <display-name>Struts Portlet</display-name>
     <servlet-class>com.ibm.wps.portlets.struts.WpsStrutsPortlet</servlet-class>

   <!-- Configuración de Struts -->
     <init-param>
       <param-name>config</param-name>
       <param-value>/WEB-INF/struts-config.xml</param-value>
     </init-param>
     <init-param>
       <param-name>struts-servlet-mapping</param-name>
       <param-value>*.do</param-value>
     </init-param> 
	 <!-- Fin de configuración de Struts -->
</servlet>
Nota: el parámetro config anterior constituye la forma estándar de definir módulos y un archivo de configuración Struts. Un portlet Struts utiliza el parámetro struts-servlet-mapping para definir qué debe utilizar como correlación de acciones Struts a fin de que las vías de acceso que deban tratarse como acciones Struts puedan reconocerse. Se utiliza de la misma forma que el valor "servlet-mapping" al configurar un servlet Struts de Apache. Se recomienda encarecidamente utilizar la correlación de extensiones para param-value.
A continuación hay un ejemplo de correlación de servlets para un servlet de portlet Struts. Se ha definido de forma que haga referencia al portlet Struts, ya que este portlet es también un servlet.
<servlet-mapping id="ServletMapping_exclusivo_Struts">
      <servlet-name>Struts</servlet-name>
      <url-pattern>/Struts/*</url-pattern>
</servlet-mapping>
Éste es un ejemplo de bibliotecas de códigos adicionales que pueden añadirse a web.xml:
<taglib>
    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
portlet.xml
Este es un ejemplo de un portlet abstracto definido en portlet.xml:
<portlet-app uid="Un_ID_exclusivo:1" versión-mayor="1" versión-menor="0">
	<portlet-app-name>Struts Portlet Application</portlet-app-name>
	<portlet id="Portlet_1" 
href="WEB-INF/web.xml#Nombre_exclusivo_servlet_Struts"
versión-mayor="1" versión-menor="0">
		<portlet-name>Struts Portlet</portlet-name>
		<cache>
			<expires>0</expires>
			<shared>NO</shared>
		</cache>
		<allows>
			<maximized/>
			<minimized/>
		</allows>
            <supports>
               <markup name="html">
                  <view/>
               </markup>
            </supports>
	</portlet>
</portlet-app>
Este es un ejemplo de un portlet concreto definido en portlet.xml:
<concrete-portlet-app uid="Un_ID_exclusivo:1.1">
	<portlet-app-name>Struts Blank Application</portlet-app-name>
	<concrete-portlet href="#Portlet_1">
		<portlet-name>Struts Portlet</portlet-name>
		<default-locale>en</default-locale>
		<language locale="en">
			<title>Struts Portlet</title>
			<title-short>Struts Portlet</title-short>
			<description>Struts Portlet</description>
			<keywords>WPS, Struts</keywords>
		</language>
        <config-param>
           <param-name>FilterChain</param-name>
           <param-value>StrutsTranscoding</param-value>
        </config-param>
        <!-- any additional Struts related config-param values added here -->
	</concrete-portlet>
</concrete-portlet-app>
Nota: El parámetro <config-param> de FilterChain no está disponible en WebSphere Portal v5.1.

Convenios de portlet de API JSR 168 (estándar)

Los fragmentos del archivo descriptor de despliegue y de la configuración de ejemplo que se muestran a continuación muestran los códigos representativos que se utilizan en los proyectos de portlet Struts:

struts-config.xml
El apartado de controlador siguiente se añade a todos los archivos de configuración Struts:
<controller processorClass="com.ibm.portal.struts.portlet.WpRequestProcessor">
</controller>
web.xml
Este es un ejemplo de bibliotecas de códigos adicionales a añadir a web.xml:
<taglib>
    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
portlet.xml
Muestra un portlet Struts de ejemplo añadido a portlet.xml:.
<portlet>
     <portlet-name>StrutsPortletProject</portlet-name>
     <display-name>StrutsPortletProject portlet</display-name>
		<portlet-class>
			  com.ibm.portal.struts.portlet.StrutsPortlet
    </portlet-class>

   <!-- Configuración de Struts -->
     <init-param>
       <param-name>config</param-name>
       <param-value>/WEB-INF/struts-config.xml</param-value>
     </init-param>
     <init-param>
       <param-name>struts-servlet-mapping</param-name>
       <param-value>*.do</param-value>
     </init-param> 
	 <!-- Fin de configuración de Struts -->

     <!-- Este es un ejemplo de inicialización de modalidad de edición: -->
     <init-param>
       <param-name>config/html/edit</param-name>
       <param-value>/WEB-INF/struts-html-edit.xml</param-value>
     </init-param>

     <!-- La API de portlet genera los fragmentos de código siguientes. -->
     <expiration-cache>0</expiration-cache>
     <supports>
       <mime-type>text/html</mime-type>
       <portlet-mode>view</portlet-mode>
       <portlet-mode>edit</portlet-mode>
     </supports>
     <supported-locale>en</supported-locale>
     <resource-bundle> strutsportletjsr168.nl.StrutsPorltetJSR168PortletResource	</resource-bundle>
       <portlet-info>
           <title>StrutsPortletJSR168 portlet</title>
       </portlet-info>

   <portlet-preferences> 

   <!-- Ejemplo de establecimiento de la primera página de la modalidad de vista html --> 
     <preference> 
       <name>com.ibm.struts.portal.page.view.html</name> 
       <value>index.jsp</value> 
     </preference> 

   <!-- Ejemplo de establecimiento de la primera página de la modalidad de edición html -->
     <preference> 
       <name>com.ibm.struts.portal.page.edit.html</name>
       <value>html/edit/index.jsp</value>
     </preference>

   </portlet-preferences>

	</portlet>
Nota: el parámetro config anterior constituye la forma estándar de definir módulos y un archivo de configuración Struts.
Conceptos relacionados
Aplicaciones de portlet Struts
Infraestructura portlet Struts
Trabajo con descriptores de despliegue de portlet
Creación de aplicaciones Web de acceso a datos utilizando Struts
Herramientas de Struts para el desarrollo de aplicaciones
Tareas relacionadas
Creación de portlets Struts
Creación de archivos JSP portlet Struts
Creación de aplicaciones de Struts
Referencia relacionada
Diferencias entre las clases de biblioteca de códigos Struts 1.1 y SPF

(C) Copyright IBM Corporation 2002, 2005. Reservados todos los derechos.