El API Struts

Para construir una distribuci�n fuente, o instalar una distribuci�n binaria de Struts, necesitaremos adquirir e instalar otros varios paquetes de software:

  • Java Development Kit - Debemos descargar e instalar una implementaci�n del JDK de Java (versi�n 1.2 o superior) para nuestra plataforma de sistema operativo. Un punto de partida para localizar las distribuciones del JDK es http://java.sun.com/j2se.
  • Servlet Container - Debemos descargar e instarlar un contenedor de sevlets que sea compatible con la especificaci�n del API Servlet, versi�n 2.2 o posterior, y la especificaci�n JavaServer Pages (JSP), versi�n 1.1 o posterior. Una elecci�n popular es Tomcat de Apache (versi�n 3.1 o posterior, recomendamos la versiones 3.2 o posteriores).
  • Ant Build System - Si est�mos construyendo Struts desde la distribuci�n fuente, debemos descargar e instalar una versi�n 1.3 o posterior de Ant. Este paquete tambi�n es altamente recomendado para usarlo en el desarrollo de nuestras aplicaciones Web basadas en Struts.
    • Si est�mos usando la versi�n 1.3 de Ant, necesitaremos descargar el fichero "optional.jar" que contiene la implementaci�n del comando <style> de Ant.
    • Nos aseguramos de que los scripts "ant" y "ant.bat" son ejecutables, a�adiendo el directorio $ANT_HOME/bin a nuestra variable de entorno PATH.
  • Servlet API Classes - Para poder compilar el propio Struts, o las aplicaciones que usan Struts, necesitaremos un fichero servlet.jar que contenga las clases de los APIs Servelt y JSP. La mayor�a de los contenedores de servlets incluyen este fichero JAR. Si no es as�, podemos obtener la distribuci�n de estas clases desde aqu�.
  • JDBC 2.0 Optional Package Classes - Struts soporta una implementaci�n opcional de javax.sql.DataSource, por eso requiere que se compile el API de clases. Se pueden descargar desde http://java.sun.com/products/jdbc/download.html.
  • XML Parser - Struts requiere la presencia de un analizador XML que sea compatible con la especificaci�n del API Java para XML Parsing (JAXP), 1.0 o posterior. Podemos descargar e instalar la implementaci�n de referencia del API JAXP, que es requerido para construir la distribuci�n fuente de Struts. En aplicaciones web basadas en Struts, podr�amos reemplazar las clases de la implementaci�n de referencia con cualquier otro analizador compatible con JAXP, como Xerces.
  • Xalan XSLT Processor - Si estamos construyendo Struts desde la distribuci�n fuente, debemos descargar e instalar la versi�n 1.2 (se han reportado problemas con la versi�n 2.0 de Xalan) del procesador XSLT Xalan (que tambi�n incluye el analizador XML Xerces), o usar la versi�n de Xalan incluida en la versi�n 1.1 de JAXP. Este procesador es usado para convertir la documetnaci�n de Struts de su formato interno basado en XML al formato HTML que se presenta en la documentaci�n de la aplicaci�n Struts.

.�Construir Struts desde el C�digo Fuente

Primero descargamos una distribuci�n fuente de Struts siguiendo las instrucciones de aqu�. Despu�s debemos asegurarnos de haber descargado e instalado todos los paquetes de software de la secci�n prerequisitos

Para construir Struts, necesitaremos personalziar el proceso de construcci�n con los detalles de nuestro entorno de desarrollo seg�n lo siguiente:

  • La distribuci�n fuente de Struts usa un fichero llamado build.properties ( en el directorio de m�s alto nivel de la distribuci�n) para identificar la localizaci�n de componentes externos de los que depende Struts.
  • No hay un fichero build.properties incluido con la distribuci�n fuente. Sin embargo, hay un fichero de ejemplo llamado build.properties.example que podemos copiar como build.properties y luego personalizarlo.
  • Las propiedades que debemos configurar en build.properties son:
    • catalina.home - Pathname al directorio de nuestra disribuci�n binaria de Tomcat 4.0 (requerido s�lo si deseamos usar la fuente deploy.catalina).
    • servletapi.home - Pathname al directorio de nuestra distribuci�n binaria de las clases del API Servlet.
    • tomcat.home - Pathname al directorio de la distribuci�n binaria de Tomcat 3.2 (s�lo si deseamos utilizar la fuente deploy.tomcat).
    • xerces.home - Pathname al directorio de la distribuci�n binaria del analizador Xerces, versi�n 1.2 o 1.3 (requerido s�lo si deseamos usar la fuente deploy.catalina).
  • Si somos un desarrollador Struts con acceso de escritura al repositorio CVS, nos aseguramos de no marcarlo en la copia del fichero build.properties, ya que ser� diferente para cada desarrollador individual.

Para construir una versi�n "distribuci�n" de Struts, primero cambiamos nuestro directorio actual al directorio en el que hemos desempaquetado la distribuci�n fuente de Struts, y (si es necesario) creamos o personalizadmos el fichero build.properties como se describre arriba. Luego tecleamos:

        ant dist

Este comando crear� una distribuci�n binaria de Struts, en un directorio llamado dist (en relaci�n a desde donde lo compilamos). Este directorio contiene una r�plica exacta de los ficheros incluidos en la distribuci�n binaria de Struts.

NOTA IMPORTANTE: El fichero struts.jar debe estar en nuestro classpath cuando compilemos Struts. El build.xml hace esto autom�ticamente. Si usamos nuestra m�quina de desarrollo para probar localmente la aplicaci�n Struts, debemos asegurarnos de que stuts.jar no est� en nuestro classpath cuado se ejecute el contenedor.

.�Instalar un Distribuci�n Binaria de Struts

Primero descargamos una distribuci�n fuente de Struts siguiendo las instrucciones de aqu�. Despu�s debemos asegurarnos de haber descargado e instalado todos los paquetes de software de la secci�n prerequisitos

Desempaquetamos la distribuci�n binaria de Struts dentro de un directorio conveniente. (Si construimos Struts desde la distribuci�n fuente, el resultado ya est�ra en una distribuci�n binaria desempaquetada). La distribuci�n consta de los siguientes contenidos:

  • lib/struts.jar - Este fichero JAR contiene las clases Java incluidas en Struts. Deber�a copiarse en el directorio WEB-INF/lib de nuestra aplicaci�n Web.
    CUIDADO: - Si vamos a hospedar m�ltiples apliaciones basadas en Struts en el mismo contenedor de servlets, podr�amos vernos tentados a poner el fichero struts.jar en el repositorio compartido sportado por nuestro contenedor. Debemos estar avisados de que hacer esto causar� que nos encontremos problemas de ClassNotFoundException a menos que todas las clases de las aplicaciones est�n almacenadas en el mismo repositorio compartido.
  • lib/struts*.tld - Estos son ficheros "descriptores de librer�as de etiquetas" que describen las etiquetas personalizadas en las distintas librer�as de Struts. Deber�an copiarse en el directorio WEB-INF de nuestra aplicaci�n web.
  • webapps/struts-blank.war - Este es un simple fichero "web application archive" que contiene un punto de entrada b�sico para construir nuestras aplicaciones basadas en Struts.
  • webapps/struts-documentation.war - Es un fichero "web application archive" que contiene toda la documentaci�n sobre Struts encontrada en la web site de Struts (incluyendo est�s p�ginas). Podemos instalar esta aplicaci�n web sobre cualquier contenedor Servlet compatible con el API Servlet 2.2 o posterior.
  • webapps/struts-example.war - Este es un ejemplo de aplicaci�n web que usa un gran porcentaje de las caracter�sticas de Struts. Podemos instalar esta aplicaci�n web en cualquier contenedor servlet compatible con las especificaciones Servlet 2.2 (o posterior) y JSP 1.1 (o posteriores). Si no tenemos disponible ning�n analizador XML para las aplicaciones Web en nuestro contenedor, necesitaremos a�adir uno al directorio WEB-INF/lib de esta aplicaci�n web.
  • webapps/struts-exercise-taglib.war - una aplicaci�n web que contiene p�ginas de prueba para varias etiquetas personalizadas soportadas por Struts. Esta pensado para su uso por desarrolladores que quieren ampliar las librer�as personalizadas de Struts, pero podr�a ser �til como un simple ejemplo del uso de varias etiquetas Struts.
  • webapps/struts-template.war - Esta aplicaci�n web presenta y desmuestra las etiquetas de plantillas de Struts.
  • webapps/struts-upload.war - Esta aplicaci�n web es un r�pido ejemplo para subir ficheros usando el marco de trabajo Struts.

Para usar Struts en nuestra aplicaci�n, necesitamos seguir estos pasos:

  • Copiar el fichero lib/struts.jar desde la disribuci�n de Struts al directorio WEB-INF/lib de nuestra aplicaci�n web.
  • Copiar todos los ficheros que correspondan con lib/struts*.tld desde la distribuci�n de Struts al directorio WEB-INF de nuestra aplicaci�n web.
  • Modificar el fichero WEB-INF/web.xml de nuestra aplicaci�n web para incluir un elemento <servlet> que defina el servlet controlador, y un elemento <servlet-mapping> que establezca que URIs solicitadas ser�n mapeadas a este servlet, Usamos el fichero WEB-INF/web.xml del ejemplo de aplicaci�n Struts para ver la sintaxis requerida.
  • Modificar el fichero WEB-INF/web.xml de nuestra aplicaci�n para incluir las siguientes declaraciones de librer�as de etiquetas:
    <taglib>
      <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    </taglib>
    
    <taglib>
      <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
    </taglib>
    
    <taglib>
      <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
    </taglib>
    
    <taglib>
      <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-template.tld</taglib-location>
    </taglib>
    
  • Crear un fichero WEB-INF/struts-config.xml que defina los mapeos de action y otras caracter�sticas de nuestra aplicaci�n. Podemos usar el fichero struts-config.xml del ejemplo de aplicaci�n Struts para ver la sintaxis requerida.
  • Al principio de cada p�gina JSP que use las etiquetas personalizadas de Struts, a�adimos las l�neas declarando las librer�as Struts a utilizar en esa p�gina particular, como esta:
    <@ taglib uri="/WEB-INF/struts-bean.tld" prefix="struts-bean" %>
    <@ taglib uri="/WEB-INF/struts-html.tld" prefix="struts-html" %>
    <@ taglib uri="/WEB-INF/struts-logic.tld" prefix="struts-logic" %>
    <@ taglib uri="/WEB-INF/struts-template.tld" prefix="struts-template" %>
    
  • Cuando compilemos las clases Java que comprenden nuestra aplicaci�n, debemos asegurarnos de incluir el fichero struts.jar (copiado anteriormente) en el CLASSPATH que es enviado al compilador.

.�Instalar Struts con nuestro Contenedor de Servlets

CUIDADO: - NO debemos a�adir el fichero struts.jar al classpath de nuestro contenedor de servlets en un intento de evitar situarlo en el directorio /WEB-INF/lib individual de cada aplicaci�n. Hacer esto causar� que nos encontremos problemas de ClassNotFoundException.

Para la mayor�a de los contenedores, s�lo necesitaremos:

  • Copiar los ficheros WAR en nuestro directorio /webapp Struts al directorio webapps de nuestro contenedor.
  • En algunos casos, necesitaremos reiniciar nuestro contenedor si se est� ejecutando.

A contiuaci�n podremos ver el estado de varios contenedores.

.�Bluestone Universal Business Server 7.2

  • Necesitamos UBS versi�n 7.2 para ejecutar ficheros de aplicaci�n war. Aqu� puedes encontrar la versi�n de evaluaci�n de UBS 7.2.2.

    Si estamos usando la versi�n, 7.2.1, necesitaremos descarga el patch de ficheros WAR, localizado aqu�

  • Despu�s de la instalaci�n de la correcta versi�n y/o patch de UBS 7.2, necesitamos modificar el fichero apserver.txt para que apunte al directorio correcto de nuestros ficheros war de aplicaciones. Busca la secci�n que dice algo similar a esto:
      
    [SaServletEngine.class]
      session_affinity=1
      type=1
      program=/SaServletEngine.class
      file_path=f:\webapps
      host=localhost:20000
    
  • Usamos el directorio especificado por la variable "file_path", o lo modificamos para apuntar a nuestro directorio webapp personalizado. Copiamos los ficheros struts-documention.war y struts-example.war dentro del directorio webapp, y arrancamos UBS. Nuestras aplicaciones web son ahora accesibles desde las siguientes URLs:
    http://localhost/<PLUGIN>/SaServletEngine.class/struts-example/
    http://localhost/<PLUGIN>/SaServletEngine.class/struts-documentation/
    
  • Nota: <PLUGIN> representa el pluging que hemos usado para nuestro servidor web especifico. Para Apache sobre Winodws, podr�a ser "cgi-bin/SaCGI.exe", para IIS sobre Windows, podr�a ser "scripts/SaCGI.exe" o "scripts/ISAPI.dll". Consulta la documentaci�n de UBS para m�s informaci�n.

.�Borland Application Server 4.5

No requiere pasos adicionales.

.�iPlanet Application Server

Se recomienda el Service Pack 2.

Observa que el objeto de base de datos de la aplicaci�n de ejemplo de Struts no es compatible con este contenedor.

.�iPlanet Web Server

Se recomienda el Service Pack 2.

Nota: Por el momento, la aplicaci�n de ejemplo Struts todav�a usa un atributo de contexto servlet no-serializable, y no se ejecutar� en un entorno que los requeirea, como iPlanet Application Server.

iPlanet Web Server 4.2

Aqu� est�n los problemas que me he encontrado cuando mov�a mis aplicaciones basadas en Struts desde Tomcat (que soporta WebApps y WAR) a iWS 4.1 (que NO soporta Webapps y WAR).

Webapps y WAR se soportar�n en iWS 5.0, como se menciona en el iWS5.0 roadmap.

  • Problemas de Classpath:

    Esta bastante correcto. Como no hay noci�n de WEB-INF/lib y WEB-INF/classes el classpath debe seleccionarse expl�citametne en $SERVER_ROOT/config/jvm12.conf.

  • Paths relativos al contexto:

    Todas las URLs deber�an ser visibles desde el documento ra�z. En mi caso s�lo cree un enlace simb�lico desde $DOCROOT/myapp hacia webapps/myapp.

  • Mapeos de Extensi�n:

    El fichero de configuraci�n $SERVER_ROOT/config/rules.properties tiene un mecanismo similar a web.xml.

    Yo tengo esto en mi rules.properties lo que reenvia todas las URLs que terminan en "do" al servlet cuyo nombre l�gico es action.

    ####
        @.*[.]do$=action
    ####
    

.�iPortal Application Server

Probado con: Windows 2000

Nota importante:
Por el momento, iPAS 1.3 no es totalmente compatible con la especificaci�n JSP 1.1/1.2

Espec�ficamente, no se han implementado la conversi�n autom�tica de tipos para par�metros de etiquetas personalizadas.

Mientras tanto, las p�ginas JSP que hacen uso de las librer�as de etiquetas Struts cuyos par�metros requieren conversi�n (como los booleanos) no se compilar�n bajo iPAS. Esto incluye la aplicaci�n de ejemplo se Struts. Itentar ejecutar la aplicaci�n de ejemplo resultar� en el lanzamiento de una excepci�n similar a esta:

/struts-example/index.jsp:

Compilation failed [IT_Builder:1000]
 at com.iona.j2ee.builder.JavaBuilder.build(JavaBuilder.java:84)
 at com.iona.j2ee.builder.JspBuilder.build(JspBuilder.java:51)
 at com.iona.j2ee.builder.WarBuilder.build(WarBuilder.java:111)
 at com.iona.j2ee.builder.EarBuilder.build(EarBuilder.java:99)
 at com.iona.j2ee.builder.EarBuilder.main(EarBuilder.java:223)
 at iportal.build.main(build.java:14)
 ocale(boolean) in org.apache.struts.taglib.html.HtmlTag
   cannot be applied to (java.lang.String)
       _x0.setLocale("true");
            ^
 1 error

Las siguientes instrucciones describen c�mo instalar la aplicaci�n de ejemplo de Struts bajo iPAS 1.3.

Las siguientes instrucciones asumen que:

  • Se ha instalado iPortal Application Server 1.3.
  • Tanto las librer�as Struts como del Parser XML est�n en nuestro classpath.

Instalar la aplicaci�n de ejemplo Struts

  • Arrancamos iPAS Services pulsando sobre el �tem de men� [Start iPAS Services].
  • Arrancampos el iPortal Application Server pulsando sobre el �tem de men� [iPortal Application Server].
  • Arrancamos un shell de l�nea de comandos. Cambiamos al $INSTALLDIR\IONA y ejecutamos el fichero setenvs.bat.
  • Creamos un directorio llamado jars.

Ahora ejecutamos la herramienta EARSCO. Tecleamos java iportal.earsco y en los prompts hacemos:

  • Next
  • Tecelamos el nombre de la aplicaci�n struts-example y pulsamos next.
  • En el paso tres pulsamos el check box e introducimos el nombre del fichero WAR struts-example. Luego pulsamos next.
  • Pulsamos sobre Finish.

Ahora debemos copiar los contenidos de struts-example war dentro de la estructura de directorio EARSCO como sigue:

Bajo $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war copiamos los contenidos de los siguientes directorios: etc, lib, src y web.

  • Copiamos todos los ficheros del directorio ra�z
    $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example\WEB-INF
    en el directorio earsco
    $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\etc
    No copiamos en los directorios classes o lib.
  • Copiamos el directorio
    $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example\WEB-INF\lib
    dentro del directorio earsco
    $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\lib
  • Copiamos el directorio
    $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example\WEB-INF\classes
    dentro del directorio earsco
    $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\src
  • Copiamos el directorio
    $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example
    dentro del directorio earsco
    $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\web
  • Luego modificamos el application.xml en el directorio
    $INSTALLDIR\IONA\jars\struts-examples\etc a esto:
         <application>
    
         <!-- Add display name -->
               <display-name>Struts Example</display-name>
       .......
    
  • Por �ltimo actualizamos el fichero cc.xml del directorio
    $INSTALLDIR\IONA\jars\struts-examples de esta forma:
         <configuration>
           <web-app>
             <context-root>struts-example</context-root>
           </web-app>
         </configuration>
    

Ahora estamos listos para compilar y desplegar struts-example.

Para compilar el c�digo fuente de $INSTALLDIR\IONA\jars\struts-examples tecleamos:

java iportal.build

Luego tecleamos:

java iportal.deploy

La primera vez que despleguemos se nos pedir� que suministremos las localizaciones de los ficheros struts-example.ear y cc.xml. Una vez satisfechos ambos elementos continuamos hasta el bot�n finish y lo puslamos. El fichero EAR se deber�a desplegar satisfactoriamente.

Probamos la aplicaci�n de ejemplo usando la siguiente URL en el navegador:

http://hostname:9000/struts-example/index.jsp 

El fichero struts-documentation.war se puede instalar usando el mismo procedimiento.

Parchear la aplicaci�n de ejemplo de Struts

Como se mencion� al principio de estas notas, la aplicaci�n de ejemplo de Struts no funciona bajo iPAS 1.3 sin modificarla. Necesitamos hacer los siguientes cambios_

  • index.jsp, logon.jsp: Cambiamos <html:html locale="true"> a <html:html locale=<%= true %>>
  • registration.jsp, subscription.jsp: Cambiamos todos los ejemplares de filter="true" a filter=<%= true %>

.�Jetty Java HTTP Servlet Server

Jetty es un peque�o servidor HTTP puro Java y de c�digo abierto que soporta las especificaciones Servlet 2.2 y JSP 1.1. Jetty puede descargarse desde http://www.mortbay.com/jetty.

Los ficheros WAR de Struts funcionan casi perfectametne cuando los situamos en el directorio webapps de Jetty. El �nico paso adicional necesario es a�adir una entrada a cada fichero WAR para que el fichero de configuraci�n del servidor Jetty pueda mapear las solicitudes de paths apropiadadas a las aplicaciones web Struts (usando "<Call name="addWebApplication">...").

Por eso por ejemplo, si hemos copiado los ficheros WAR que vienen con la distribuci�n binaria de Struts en un subdirectorio de "%JETTY_HOME%/webapps" llamado "%JETTY_HOME%/webapps/struts" por eso que

- %JETTY_HOME%/webapps/struts/struts-documentation.war
- %JETTY_HOME%/webapps/struts/struts-example.war
- %JETTY_HOME%/webapps/struts/struts-exercise-taglib.war
- %JETTY_HOME%/webapps/struts/struts-template.war
- %JETTY_HOME%/webapps/struts/struts-upload.war
- %JETTY_HOME%/webapps/struts/struts-blank.war

y si queremos ejecutar Jetty usando el fichero de configuraci�n demo.xml que viene con Jetty, s�lo tenemos que a�adirle los siguientes bloques en cualquier lugar despu�s de que se declaren los Listeners.

<!-- Jetty config for Struts BEGIN -->

  <Call name="addWebApplication">
    <Arg>/struts/struts-documentation/*</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/webapps/struts/struts-documentation.war</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/etc/webdefault.xml</Arg>
    <Arg type="boolean">false</Arg> <!-- if true,
        expand war in temp dir -->
  </Call>

  <Call name="addWebApplication">
    <Arg>/struts/struts-example/*</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/webapps/struts/struts-example.war</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/etc/webdefault.xml</Arg>
    <Arg type="boolean">true</Arg> <!-- if true,
        expand war in temp dir -->
  </Call>

  <Call name="addWebApplication">
    <Arg>/struts/struts-exercise-taglib/*</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/webapps/struts/struts-exercise-taglib.war</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/etc/webdefault.xml</Arg>
    <Arg type="boolean">false</Arg> <!-- if true,
        expand war in temp dir -->
  </Call>

  <Call name="addWebApplication">
    <Arg>/struts/struts-template/*</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/webapps/struts/struts-template.war</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/etc/webdefault.xml</Arg>
    <Arg type="boolean">true</Arg> <!-- if true,
        expand war in temp dir -->
  </Call>

  <Call name="addWebApplication">
    <Arg>/struts/struts-upload/*</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/webapps/struts/struts-upload.war</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/etc/webdefault.xml</Arg>
    <Arg type="boolean">true</Arg> <!-- if true,
        expand war in temp dir -->
  </Call>

  <Call name="addWebApplication">
    <Arg>/struts/struts-blank/*</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/webapps/struts/struts-blank.war</Arg>
    <Arg><SystemProperty name="jetty.home"
        default="."/>/etc/webdefault.xml</Arg>
    <Arg type="boolean">true</Arg> <!-- if true,
        expand war in temp dir -->
  </Call>

<!-- Jetty config for Struts END -->

.�JRUN 3.0 SP2A, VERSION 3.02A.11614 -- Probado con Microsoft IIS 5.0, Windows 2000

Nota importante:
Por el momento, JRUN no es totalmente compatible con la especificaci�n JSP 1.1/1.2

Espec�ficamente, no se han implementado la conversi�n autom�tica de tipos para par�metros de etiquetas personalizadas.

Mientras tanto, las p�ginas JSP que hacen uso de las librer�as de etiquetas Struts cuyos par�metros requieren conversi�n (como los booleanos) no se compilar�n bajo JRun. Esto incluye la aplicaci�n de ejemplo se Struts. Itentar ejecutar la aplicaci�n de ejemplo resultar� en el lanzamiento de una excepci�n similar a esta:

/struts-example/index.jsp:

javax.servlet.ServletException: Compilation error occured: 

allaire.jrun.scripting.DefaultCFE: 

Errors reported by compiler:
c:/JRun/servers/default/Struts 
  Example/WEB-INF/jsp/jrun__index2ejspa.java:41:1:41:27: 

Error: No match was found for method "setLocale(java.lang.String)".

Las siguientes instrucciones describen c�mo instalar la aplicaci�n de ejemplo de Struts bajo JRun.

Las instrucciones asumen que:

  • JRun ha sido instalado e integrado con el servidor web de nuestra elecci�n.
  • $APP_SERVER_NAME es el nombre del servidor de aplicaci�n usado para hospedar la aplicaci�n (Cuando JRun se instal� por primera vez, creo un servidor de aplicaciones llamando JRun Default Server).
  • $APP_SERVER_DIR es el directorio usado para contener las aplicaciones hospedadas por $APP_SERVER_NAME. Para el JRun Default Server, el directorio es $JRUN_HOME/servers/default donde $JRUN_HOME es el directorio donde est� instalado JRun.

Instalar la aplicaci�n de ejemplo de Struts

  • Entramos en la consola de control de JRun.
  • En el panel izquierdo, seleccionamos $APP_SERVER_NAME. Una p�gina mostrar� el estado actual del servidor en el panel derecho.
  • En el panel derecho, pulsamos sobre el enlace WAR Deployment. Se mostrar� una p�gina que contiene una lista de aplicaciones Web desplegadas actualmente.
  • En el panel dereco, pulsamos sobre Deploy an Application. Completamos el formulario Web Application Information de esta forma:
    • Servlet War File or Directory: Introducimos el path completo donde se encuentra struts-example.war o pulsamos sobre Browse para seleccionar el path.
    • JRun Server Name: $APP_SERVER_NAME
    • Application Name: StrutsExample.
    • Application Hosts: All Hosts.
    • Application URL: /struts-example.
    • Application Deploy Directory: por defecto ser� $APP_SERVER_NAME/Struts Example (o el nombre especificado para Application Name).
  • Una vez completado el formulario, pulsamos el bot�n Deploy.
  • Si el despliegue tiene �xito, reiniciamos el servidor de aplicaciones pulsando sobre $APP_SERVER_NAME en el panel izquierdo. Se mostrar� una p�gina con el estado actual del servidor en el panel derecho. Pulsamos sobre el bot�n Restart Server para reiniciar el servidor.
  • Probamos la aplicaci�n de ejemplo usando la siguiente URL en el navegador:
    http://hostname/struts-example/index.jsp
    

La aplicaci�n struts-documentation.war puede instalarse usando el mismo procedimiento.

Instalar Aplicaciones Web Desempaquetadas

Los pasos de arriba deber�an seguirse para aplicaciones desplegadas como ficheros *.war.

Para aplicaciones Web desempaquetadas, la configuraci�n implica los siguientes pasos:

  • Desde la Consola de Control de JRun, seleccionamos $APP_SERVER_NAME (en el panel izquierdo) y pulsamos sobre WAR Deployment (en el panel derecho).
  • En el panel derecho, pulsamos sobre Create an Application y completamos el fomulario Web Application Information de esta forma:
    • JRun Server Name: $APP_SERVER_NAME.
    • Application Name: myApplication.
    • Application Hosts: All Hosts.
    • Application URL: /myApplication.
    • Application Deploy Directory: por defecto ser�
      $APP_SERVER_NAME/myApplication
  • Pulsamos sobre Create para enviar el formulario.
  • Una vez creada la aplicaci�n, instalamos y configuramos los componentes Struts (struts.jar, Struts*.tld, etc.) para la aplicaci�n Web bajo $APP_SERVER_NAME/myApplication/WEB-INF.
  • Instalamos el resto de los componentes de la aplicaci�n: ficheros .class, p�ginas JSP, ficheros .properties etc, seg�n sean necesarios.
  • Para configurar el mapeo de extensi�n de la URI solicitada (por ejemplo, *.do) al servlet action, expandimos $APP_SERVER_NAME en el panel izquierdo, en el mismo panel, expandimos la rama Web Applications y pulsamos sobre myApplication. El panel derecho mostrar� las opciones de configuraci�n para myApplication. Pulsamos sobre Servlet URL Mappings. Se mostrar� una lista de mapeos existentes. Pulsamos sobre el bot�n Edit y creamos la siguiente entrada:
    • Virtual Path/Extension: *.do
    • Servlet Invoked: action.
  • Pulsamos sobre el bot�n Update para grabar los campos.
  • Reiniciamos el servidor de aplicaciones.
  • Ahora la aplicaci�n deber�a ser accesible desde el navegador.

El servidor de aplicaciones JRun debe reiniciarse cada vez que se hace uno de estos cambios en la aplicaci�n Web:

  • Se modifican los ficheros .class o .jar.
  • Se modifican los ficheros .properties.
  • Se modifican los ficheros .xml.

Parchear la aplicacion de ejemplo Struts

Como se mencion� al principio de estas notas, la aplicaci�n de ejemplo de Struts no funciona bajo JRun sin modificarla. Necesitamos hacer los siguientes cambios:

  • index.jsp, logon.jsp: Cambiamos <html:html locale="true"> a <html:html locale=<%= true %>>
  • registration.jsp, subscription.jsp: Cambiamos todos los ejemplares de filter="true" a filter=<%= true %>

.�Orion Application Server

En los siguientes pasos, $ORION_HOME se refiere al directorio en el que hemos instalado Orion, y $STRUTS_HOME es el directorio en el que hemos desempaquetado la distribuci�n binaria de Struts

  • Modificamos el fichero $ORION_HOME/config/application.xml para definir las dos nuevas aplicaciones, a�adiendo las siguientes declaraciones inmediatamente despu�s de la directiva web-module para la aplicaci�n Web por defecto:
    <web-module id="strutsDoc"
    path="$STRUTS_HOME/webapps/struts-documentation.war"/>
    <web-module id="strutsExample"
    path="$STRUTS_HOME/webapps/struts-example.war"/>
    
  • Modificamos el fichero $ORION_HOME/config/default-web-site.xml (o el fichero de configuraci�n para cualquier otra web site Orion) para incluir las siguientes declaraciones:
    <web-app application="default" name="strutsDoc"
      root="/struts-documentation"/>
    <web-app application="default" name="strutsExample"
      root="/struts-example"/>
    
  • Despu�s de arrancar Orion, deber�amos poder acceder a estas aplicaciones (asumiendo que no hemos cambiado el n�mero de puerto por defecto: 80 ) en
    http://localhost/struts-documentation
    http://localhost/struts-example
    
  • Las versiones de Orion hasta la 1.0.3 tiene un bug relacionado con llamadas a ServletContext.getResource() que evita que la aplicaci�n de ejemplo de Struts funcione sin modificaciones. Esto se manifiesta como un error JSP cuando intentamos acceder a la aplicaci�n de ejemplo, con el siguiente mensaje:
    javax.servlet.jsp.JspException: Missing 
      resources 
      attributeorg.apache.struts.action.MESSAGE
    

    seguido por seguimietno de error. Tambi�n habr� un mensaje de error de inicializaci�n en el fichero de log ORION_HOME/log/global-application.log. Para evitar este probelma, podemos seguir estos pasos:

    • Vamos al directorio $STRUTS_HOME/webapps, donde observamos que Orion ha expandido autom�ticamente cada aplicaci�n web en una estructura de directorios descomprimida.
    • Vamos al directorio $STRUTS_HOME/webapps/struts-example/WEB-INF, y copiamos el fichero struts-config.xml un directorio m�s arriba (es decir, dentro de $STRUTS_HOME/webapps/struts-example).
    • Modificamos el fichero $STRUTS_HOME/webapps/struts-example/WEB-INF/web.xm, cambiando el valor del par�metro "config" (para el servlet action) de /WEB-INF/struts-config.xml a /action.xml.
    • Reiniciamos Orion, y deber�amos poder acceder a la aplicaci�n de ejemplo.
    • Observa que este atajo tiene un efecto colateral negativo con respecto al a seguridad: nuestro fichero struts-conifig.xml ahora puede ser recuperado por clientes remotos en la siguiente URL:
      http://localhost/struts-example/struts-config.xml

      Por lo tanto, deber�amos asegurarnos de no guardar informaci�n sensible (como passwords de bases de datos) en este fichero.

.�Resin 1.2+ "standalone"

No requiere pasos adicionales.

.�SilverStream 3.7.1 y posteriores

  • Arrancamos el Servidor de Aplicaciones SilverStream.
  • Creamos un plan de despliegue XML para la aplicaci�n "struts-example.war". Llamamos al fichero "struts-example-depl-plan.xml". Podemos usar los siguientes contenidos para el fichero:
    ----- cut here -----
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE warJarOptions PUBLIC
      "-//SilverStream Software, Inc.//DTD J2EE WAR Deployment Plan//EN"
      "deploy_war.dtd">
    <warJarOptions>
    <warJar>
    <warJarName>struts-example.war</warJarName>
    <isEnabled>true</isEnabled>
    <urls><el>struts-example</el></urls>
    </warJar>
    </warJarOptions>
    
    ----- cut here -----
    
  • Creamos un plan de despliegue XML para la aplicaci�n "struts-documentation.war". Llamamos al fichero "struts-documentation-depl-plan.xml". Podemos usar los siguientes contenidos para el fichero:
    ---- cut here -----
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE warJarOptions PUBLIC
      "-//SilverStream Software, Inc.//DTD J2EE WAR Deployment Plan//EN"
      "deploy_war.dtd">
    <warJarOptions>
    <warJar>
    <warJarName>struts-documentation.war</warJarName>
    <isEnabled>true</isEnabled>
    <urls><el>struts-documentation</el></urls>
    </warJar>
    </warJarOptions>
    
    ----- cut here -----
    
  • Ejecutamos los siguientes comandos "SilverCmd DeployWAR" para desplegar las aplicaciones. Podemos cambiar 'localhost' por el servidor en el que estemos desplegando. Tambi�n podemos cambiar 'Silvermaster' por la base de datos que estamos desplegando:
    SilverCmd DeployWar localhost Silvermaster 
      Struts-example.war -f Struts-example-depl-plan.xml 
      
    SilverCmd DeployWar localhost Silvermaster 
      Struts-documentation.war -f Struts-documentation-depl-plan.xml 
    

.�Tomcat 3.1 y Anteriores

No recomendados, usar Tomcat 3.2.1 o posteriores.

.�Tomcat 3.2.1 con Apache

Observa que las instrucciones para Tomcat 4 ser�n diferentes de las de Tomcat 3, pero el conector web de Tomcat 4.0 todav�a est� en desarrollo. Las versiones de Tomcat anteriores a la 3.2.1 no se recomiendan para su uso com Struts.

Estas instrucciones asumen que hemos integrado perfectamente Tomcat con Apache de acuerdo a la documentaci�n de Tomcat.

  • Copiamos "struts-documentation.war" y "struts-example.war" a nuestro directorio $TOMCAT_HOME/webapps.
  • Reniciamos Tomcat si se estaba ejecutando.
  • Tomcat generar� un fichero $TOMCAT_HOME/conf/tomcat-apache.conf que ser� usado por Apache. Este fichero se regenera cada vez que arrancamos Tomcat, por eso copiamos este fichero a un lugar seguro (como en nuestro directorio de configuraci�n de Apache; sobre sistemas UNIX normalmente es /usr/local/apache/conf.
  • Si est�mos ejecutando Tomcat 3.1, no generar� las entradas para nuestras nuevas aplicaciones. A�adimos las siguientes l�neas al fichero tomcat-apache.conf que hemos grabado, reemplazando $TOMCAT_HOME con el path de nuestro directorio home de Tomcat:
    Alias /struts-documentation "$TOMCAT_HOME/webapps/struts-documentation
      <Directory "$TOMCAT_HOME/webapps/struts-documentation>
        Options Indexes FollowSymLinks
      </Directory>
        ApJServMount /struts-documentation/servlet /struts-documentation
      <Location "/struts-documentation/WEB-INF/">
        AllowOverride None
        deny from all
      </Location>
    Alias /struts-example "$TOMCAT_HOME/webapps/struts-example"
      <Directory "$TOMCAT_HOME/webapps/struts-example>
        Options Indexes FollowSymLinks
      </Directory>
        ApJServMount /struts-example/servlet /struts-example
      <Location "/struts-example/WEB-INF/">
        AllowOverride None
        deny from all
      </Location>
    
  • El fichero generado arriba no sabe nada sobre los mapeos de extensi�n definidos en un fichero web.xml, por eso, las URIs "*.do" que vayan al servlet controlador no ser�n reconicidas. Para corregir esto, a�adimos la siguiente l�nea a la versi�n grabada de "tomcat-apache.conf", depu�s de la l�nea correspondiente a la extensi�n .jsp:
    AddHandler jserv-servlet .do
    
  • Nos aseguramos de que la versi�n grabada de "tomcat-apache.conf" es referenciada en nuestro fichero de configuraci�n de Apache httpd.conf. Un uso t�pico ser�a tener la siguiente l�nea en la parte inferior de httpd.conf:
    Include 
      /usr/local/apache/conf/tomcat-apache.conf
    
  • Para poder reconocer index.jsp como la p�gina por defecto para aplicaciones web, buscamos en nuestro httpd.conf una directiva DirectoryIndex. Si tenemos una. a�adimos index.jsp al final de la lista, que se podr�a parecer a esta:
    DirectoryIndex 
      index.html index.jsp
    

    Si no tenemos dicha entrada, a�adimos una como esta:

    DirectoryIndex index.jsp
    
  • Reiniciamos Apache para hacer que tenga en cuenta las nuevas aplicaciones. Ahora deber�amos poder acceder a las aplicacioens desde un navegador con estas URLs:
    http://localhost/struts-documentation
    
    http://localhost/struts-example
    

.�Tomcat 3.2.1 + "standalone"

No requiere pasos adicionales.

.�Tomcat 4.0

No requiere pasos adicionales.

.�Weblogic 5.1 (Service Pck 8)

  1. Obtener e instalar el analizador XML Xerces (se han reportado problemas con la implementaci�n de referencia de Sun). Poner xerces.jar en el path de nuestro sistema WebLogic.
  2. Obtener y despempaquetar la distribuci�n binaria de Struts (esto procedimiento asume que se ha extra�do en c:\jakarta-struts).
  3. a�adir una entrada la fichero weblogic.properties por cada aplicaci�n web Struts que queramos configurar. Por ejemplo, para hacer disponible la aplicaci�n struts-example a�adimos la siguiente l�nea a weblogic.properties:
    weblogic.httpd.webApp.strutsexample=
        c:/jakarta-struts/webapps/struts-example.war
    
  4. No necesitamos incluir struts.jar o cualquier de las clases espec�ficas de la aplicaci�n en el classpath de WebLogic, ya que se esto se har� autom�ticamente (a menos que despleguemos un archivo web desempaquetado).
  5. Arrancamos el Servidor WebLogic y apuntamos nuestro navegador web a la aplicaci�n Struts. Por ejemplo, para conectar con el aplicaci�n de ejemplo a�adida en el paso anterior:
    http://localhost:7001/strutsexample
  6. Esta aplicaci�n de ejemplo depende de que est� presente el fichero de recursos espec�ficos de Struts ApplicationResources.properties en el classpath. Sin embargo, WebLogic, s�lo extrae los ficheros *.class desde el archivo por eso este fichero no ser� encontrado, resultando en un error la primera vez que sea necesitado-- algo similar a:
     
      javax.servlet.ServletException: runtime failure in custom tag 
      'message'. 
    
  7. Extraemos el fichero ApplicationResources.properties desde el fichero *.war, y lo copiamos manualmente en el directorio _tmp_war_ WebLogic creado para esta aplicaci�n. De nuevo, refiriendose a la aplicaci�n struts-example, esto ser�a:
    c:\jakarta-struts\webapps\WEB-INF\_tmp_war_strutsexample
  8. Reiniciamos webLogic. Ahora podemos ejecutar la aplicaci�n:
    http://localhost:7001/strutsexample

Los pasos de arriba se deber�an seguir para aplicaciones desplegadas como ficheros *.war. Para aplicaciones web desempaquetadas, la configuracion implica a�adir struts.jar y /WEB-INF/classes al claspath de WebLogic. Por esta razon, sugiero desplegar las aplicaciones como ficheros war en WebLogic. Sin embargo la misma aplicaci�n de ejemplo puede desplegarse satisfactoriamente en formato expandido modificando weblogic.properties (asumiendo que el fichero war fue estra�do al directorio webapps/struts-example):

weblogic.httpd.webApp.strutsexample=
    c:/jakarta-struts/webapps/struts-example/ 

Y arrancado WebLogic con el classpath actualizado. Por ejemplo:

c:\jdk1.3\bin\java -ms16m -mx64m
    -classpath c:\weblogic\lib\weblogic510sp8boot.jar;

Recomendaciones Adicionales

  • Se deber�a desactivar la recarga de Servlets y JSP. Primero, lo pagamos con una bajada de rendimiento. Dependiendo del n�mero de JSPs, el n�mero de solicitudes y el intervalo de chequeo configurado, el servidor ir� m�s lento. Segundo, con la recarga de JSP y servlets, uno abre la puerta de varios problemas de los cargadores de clases WebLogic, que son d�ficiles de diagnosticar, d�ficiles de manejar y frecuentemente acaban con la perdida de sesiones HTTP.
  • Seleccionamos el nombre de la sessionid a JSESSIONID, si se usan las cookies para el seguimiento de sesi�n y a jsessionid, si las sesiones est�n basadas en URL. (Hay problemas adicionales relacionados con las sesiones basadas en URL, cuasados por la forma en que BEA codifica el id de la sesi�n (incompatible con J2EE). Especialmente <bean:include> no funcionar� con sesiones basadas en URL. Sin embargo, usar el nombre de sesi�n correcto resolver� alguno de estos problemas).
  • Configuramos el registro JSP-Servlet en weblogic.properties para una compatibilidad m�xima con J2EE y/o un rendimiento m�ximo.

El JSP-Servlet soporta algunos par�metros de inicializaci�n que pueden ser personalizados para obtener un mejor rendimiento, o una mejor depuraci�n:

weblogic.httpd.initArgs.*.jsp=\
       pageCheckSeconds=-1,\
        setEmptyStrings=false,\
         compileCommand=./_jspCompiler_.cmd,\
             workingDir=/weblogic/myserver/tmp_classfiles,\
          keepgenerated=true,\
    debug=true,\
  verbose=true

En el ejemplo de arriba, el fichero batch (_jspCompiler_.cmd) invoca a jikes lo que resulta en un tiempo de arrancada mucho m�s r�pido (jikes es como tres veces m�s r�pido que javac). El fichero batch contiene una s�la l�nea

@jikes -g -nowarn %*

Se podr�a utilizar las siguiente configuraci�n cuando se hayan hecho todos los test y una velocidad mayor sea primordial:

  
  weblogic.httpd.initArgs.*.jsp=\
       pageCheckSeconds=-1,\
        setEmptyStrings=false,\
         compileCommand=./_jspCompiler_.cmd,\
             workingDir=/weblogic/myserver/tmp_classfiles,\
          keepgenerated=false,\
    debug=false,\
  verbose=false

... junto con ...

@jikes -O -nowarn %*

Weblogic soporta selecciones similares a trav�s de <context-params> en web.xml (Por favor lee los detalles en la �ltima documentaci�n en la site de BEA).

.�WebLogic 6.0+

No requiere pasos adicionales.

.�WebSphere Application Server 3.5 FixPack 2

  • En los pasos de abajo, $WAS_HOME se refiere al directorio en que hemos instalado el servidor de aplicaciones WebSphere, y $STRUTS_HOME es el directorio donde hemos desempaquetado la distribuci�n binaria de Struts.
  • WebSphere anteriores a 3.5.2 no soportaban JSP 1.1 y Servlet 2.2, lo que hac�a dificil obtener las funcionalidades de Struts sin masivos cambios de c�digo. Por favor actualiza a 3.5.2 (3.5 con FixPack 2) antes de intentar usar Struts. Puedes ver en http://www.ibm.com/software/webservers/appserv/efix.html como descargar e instalar FixPack 2 para WebSphere 3.5.
  • Aviso: Struts no funcionar� con WebSphere 3.5.2 sin modificaciones. Se espera que se hagan las correcciones en WebSphere 3.5.3. Sin embargo, podemos hacer que WebSphere 3.5.2 funcione con Struts.
  • Nos aseguramos de que est� arrancado WebSphere Application Server. Bajo Windows NT/2000, es el servicio "IBM WS AdminServer".
  • Arrancamos la Consola Administrativa de WebSphere.
  • Una vez arrancada, seleccionamos Convert a War File de la opci�n de la barra de tareas, o desde el men� Console->Tasks. Esto har� que se muestre un di�logo del Wizard Convert War File.
  • Seleccionamos un Servlet Engine para hospedar la aplicaci�n Web que resultar� de la conversi�n del fichero War, por ejemplo, Default Servlet Engine, expandiendo el �rbol de control bajo los nodos; y pulsamos el bot�n Next.
  • Seleccionamos un Host virtual para asociarlos con la aplicaci�n web resultante, por ejemplo, default host. Pulsamos el bot�n Next.
  • Pulsamos el bot�n Browse y elegimos el $STRUTS_HOME/webapps/struts-example.war. Pulsamos el bot�n Next.
  • Seleccionamos un directorio de destino para la aplicaci�n web resultante, por ejemplo $WAS_HOME/hosts/default_host. Pulsamos el bot�n Next.
  • Introducimos un Web Application Web Path, por ejemplo, struts-example, y un Web Application Name, por ejemplo, struts-example. Pulsamos el bot�n Finish.
  • Despu�s de una ligera pausa, deber�amos obtener un mensaje con el texto Command "convert war file" completed successfully. Pulsamos Ok.
  • Ahora necesitamos a�adir jaxp.jar y un analizador compatible jaxp, por ejemplo, parser.jar desde JAXP 1.0.1 al directorio del a aplicaci�n web, por ejemplo, $WAS_HOME/AppServer/hosts/default_host/struts-example/servlets.
  • En este punto, si WAS 3.5.2 implementara correctamente Servlet 2.2, todo ir�a bien. Sin embargo, WAS 3.5.2 devuelve null para las llamadas a ServletContext.getResource(String) o ServletContext.getResourceAsStream(String). Esto se manifiesta como una excepci�n en la salida del servidor de aplicaci�n, por ejemplo default_server_stdout.log..
  • Cuidado, creamos en el hecho de que la aplicaci�n web arranca satisfactoriamente desde la Consola de Administraci�n. Realmente no lo hace. La consola de Administraci�n est� mintiendo. Si intentamos acceder a webapp por ejemplo, http://localhost/struts-example/ fallar�.
  • En este punto, necesitamos parchear el c�digo fuente de Struts, Hay tres lugares donde se llama a getResourceAsStream:
        ResourceTag.doStartTag()
        ActionServlet.initMapping()
        PropertyMessageResources.loadLocale(String)
    

    de estos, ActionServlet es el m�s importante.

  • Cambiamos la fuente de
     
        // Acquire an input stream to our configuration resource
        InputStream input = getServletContext().getResourceAsStream(config);
    

    a

        // Acquire an input stream to our configuration resource
        InputStream input = new 
          java.io.FileInputStream(getServletContext().getRealPath(config));
     
  • Hacemos cambios similares para las otras clases si es necesario.
  • Recompilamos ActionServlet y copiamos el fichero .class a
    $WAS_HOME/AppServer/hosts/default_host/struts-example/servlets/
       org/apache/struts/action/ActionServlet.class
    
  • Otro bug con el cargador de clases de WAS 3.5.2 es que la clase Class.getResource() no carga un recurso desde un jar, por eso debemos copiar $STRUTS_HOME/lib/struts-config_1_0.dtd a $WAS_HOME/AppServer/hosts/default_host/struts-example/servlets/org/apache/struts/resources/struts-config_1_0.dtd o conectar a Internet para obtener el dtd desde la web site de jakarta.
  • Arrancamos nuestro webapp en la Consola de Administraci�n.
  • Probamos la aplicaci�n de ejmplo cargando la siguiente URL en nuestra navegador:
    http://localhost/struts-example/
    

.�WebSphere - Pasos para la Aplicaci�n de Ejemplo

Servidor: Windows 2000 Server con WebSphere 3.5.3 Advanced

  1. Arrancamos el adminserver.
  2. Arrancamos la Consola de Administraci�n.
  3. Usamos la tarea Convert War file para convertir el struts-example.war.
  4. Lo convertimos a default_server, el motor servlet por defecto y el directorio de instalaci�n est�ndard (c:\websphere\appserver\hosts\default_host).
  5. Creamos un directorio WEB-INF en el directorio servlets y copiamos struts-config.xml, database.xml y web.xml dentro de el (mantener WEB-INF con todas las TLD's bajo web - ambos directorios WEB-INF deben estar presentes).
  6. Copiamos jaxp 1.0.1' (No 1.1.1's) jaxp.jar y parser.jar al directorio servlets de la aplicaci�n strut-example.
  7. En el directorio Servelts, abrimos struts.jar con WinZip. Extraemos los tres DTDs (struts-config_1_0.dtd, web-app_2_2.dtd y web-app_2_3.dtd) dentro del directorio servlets asegur�ndonos de que usamos nombres de carpetas (para que los ficheros se extraigan a servlets/org/apache/struts/resources).
  8. Pulsamos sobre struts-example en la Consola de Administraci�n bajo Default Server/Default Servlet Engine y pulsamos la pesta�a advanced en el lado derecho de la pantalla.
  9. Debajo de donde dice Default Error Page, introducimos /ErrorReporter y pulsamos Apply.
  10. Arrancamos el Default Server mediante la Consola de Administraci�n. Deber�amos ver un mensaje de ActionServlet en el fichero default_host_stdout.log sin ninguna excepcion.
  11. Mediante un navegador accedemos a la aplicaci�n usando: http://localhost/struts-example/index.jsp.
  12. Si devuelve Application not Available volvemos a la consola de administraci�n, pulsamos con el bot�n derecho sobre struts-example y seleccionamos Restart WebApp.
  13. Una vez que veamos el informe de �xtio, vamos de nuevo a la URL de arriba y lo intentamos de nuevo -- deber�a funcionar sin problemas.

Por alguna raz�n, a algunas instalaciones no les gustan los ficheros XML que referencian DTDs p�blicas -- si miramos el fichero default_host_stdout.log veremos errores sobre referencias a URL p�blicas inv�lidas durante los registros DTD, o si nuestra p�gina dice cannot find //logon o //saveRegistration (por ejemplo mapeos de acciones) hacemos los siguiente:

  1. Paramos el servidor por defecto.
  2. Vamos a servlets\WEB-INF\ y editamos web.xml y struts_config.xml.
  3. En la declaraci�n DOCTYPE, cambiamos la palabra PUBLIC por SYSTEM y eliminamos completamente la l�nea que dice:
     -//Sun Microsystems,Inc.//DTD Web Application 2.2//EN
    de web.xml y
    -//Apache Software Foundation//DTD Struts Configuration 1.0//EN
    de struts-config.xml.
  4. Grabamos estos ficheros y vamos de nuevo al paso 10 de arriba.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP