ContenidoPrefacio
Organización
Convenciones utilizadas en este libro
Utilizar los ejemplos de código
Capítulo 1. Introducción
Breve historia de la Web
¿Qué son los servlets Java?
JavaServer Pages
Arquitecturas JSP Modelo 1 y Modelo 2
¿Por qué el patrón de Modelo-Vista-Controlador es tan importante?
El Modelo de MVC
La Vista de MVC
El Controlador de MVC
¿Qué es un marco de trabajo?
Creación del marco de trabajo Struts
Contribución al proyecto Struts
Alternativas a Struts
Construir su propio marco de trabajo
Barracuda
Cocoon
Expresso
Freemarker, Velocity y WebMacro
Maverick
SiteMesh
Jakarta Turbine
WebWork
Spring
JavaServer Faces
Capítulo 2. Dentro del nivel Web
Visión de conjunto de una arquitectura
El nivel cliente
El nivel Web
El nivel medio
El nivel EIS
¿Dónde encaja Struts?
La fase de petición/respuesta HTTP
La petición HTTP
La respuesta HTTP
HTTP vs HTTPS
Struts y ámbito
Ámbito de petición
Ámbito de sesión
Ámbito de aplicación
Ámbito de página
Utilizar parámetros URL
Reenviar vs redirigir
Utilizar un redireccionamiento
Utilizar un reenvío
¿Qué es lo mejor para Struts?
Capítulo 3. Visión de conjunto del marco de trabajo Struts
Un ejemplo de una cuenta bancaria
Examinar la visión de conjunto
Los paquetes de componentes de Struts
Componentes de controlador Struts
La ActionServlet de Struts
Clases Action de Struts
Mapear las acciones
Determinar la siguiente vista
Componentes del modelo Struts
Componentes de vista de Struts
Utilizar ActionForm de Struts
Utilizar JSP para la presentación
Utilizar librerías de etiquetas personalizadas
Utilizar paquetes de recursos de mensaje
Soporte de múltiples aplicaciones
Resumen
Capítulo 4. Configurar aplicaciones Struts
La aplicación "Storefront"
¿Qué es una aplicación Web?
Elementos de una aplicación Web
La estructura de directorio de la aplicación Web
Archivos WAR
El descriptor de despliegue de aplicación Web
DTD de descriptor de despliegue de aplicación Web
Configurar el archivo web.xml para Struts
Mapear la ActionServlet de Struts
Mapear peticiones a servlets
Especificar múltiples módulos de aplicación
Declarar los parámetros de inicialización
Utilizar múltiples archivos de configuración Struts
Configurar las librerías de etiquetas
Establecer la lista de archivo de bienvenida
Utilizar una acción Struts en la lista de archivo de bienvenida
Configurar gestión de error en web.xml
El archivo de configuración Struts
Configurar múltiples módulos de aplicación
El paquete org.apache.struts.config
La clase ApplicationConfig
La DTD de configuración de Struts
El elemento data-sources
El elemento form-beans
El elemento global-exceptions
El elemento global-forwards
El elemento action-mappings
El elemento controller
El elemento message-resources
El elemento plug-in
Un archivo struts-config.xml completo
Utilizar múltiples módulos de aplicación
Especificar un elemento DOCTYPE
El componente Digester
La herramienta Consola de Struts
Recargar los archivos de configuración
Capítulo 5. Componentes del controlador Struts
El mecanismo del controlador
La clase ActionServlet
Ampliar la clase ActionServlet
Proceso de inicialización de Struts
La clase RequestProcessor
Ampliar la clase RequestProcessor
La clase Action
La caché de la clase Action
La clase ActionForward
Crear clases Action multiproceso
Lógica de negocio y la clase Action
Utilizar las acciones preconstruidas de Struts
La clase org.apache.struts.actions.ForwardAction
La clase org.apache.struts.actions.IncludeAction
La clase org.apache.struts.actions.DispatchAction
La clase org.apache.struts.actions.LookupDispatchAction
La clase org.apache.struts.action.SwitchAction
Las clases de utilidades
La clase RequestUtils
La clase ResponseUtils
El paquete Commons BeanUtils
El paquete Commons Collection
Seguridad en las clases Action
Capítulo 6. Componentes del modelo Struts
La "M" en MVC
Tipos de modelos
El modelo conceptual
El modelo de diseño
¿Qué es un objeto de negocio?
Requisitos para objetos de negocio
La importancia de los objetos de negocio
Persistencia
Persistir objetos de negocio
Almacenar objetos en un modelo relacional
La incompatibilidad de impedancias
¿Qué ofrece Struts al modelo?
Crear el modelo de Storefront
Acceder a una base de datos relacional
Crear los objetos de negocio de Storefront
El modelo de datos de Storefront
Mapear los objetos de negocio a la base de datos
Marcos de mapeado objeto-a-relacional
El marco de persistencia de Storefront
Los patrones Business Delegate y DAO
Conclusión
Capítulo 7. Componentes de Vista de Struts
¿Qué es una vista?
Utilizar vistas dentro del marco de trabajo Struts
Documentos HTML
Etiquetas JSP personalizadas
JavaScript y hojas de estilo
Archivos multimedia
Paquetes de recursos de mensaje
Utilizar JavaBeans dentro de los componentes de vista
Repaso rápido
Cómo las aplicaciones Struts utilizan JavaBeans
El patrón Objeto de transferencia de datos
¿Qué son ActionForm?
ActionForm y ámbito
El ciclo de vida de una ActionForm
Crear una ActionForm
El método validate()
El método reset()
Declarar ActionForm en el archivo de configuración de Struts
Utilizar una ActionForm en una Action
Declarar propiedades ActionForm como String
Utilizar ActionForm a través de múltiples páginas
Utilizar ActionErrors
La clase ActionMessage
Crear ActionErrors en la clase Action
Realizar la validación de presentación
Utilizar la clase DynaActionForm
Configurar ActionForm dinámicas
Realizar validación con DynaActionForm
Mirar hacia JavaServer Faces
¿Qué tiene que ver JSF con Struts?
Capítulo 8. Librerías de etiquetas personalizadas JSP
Etiquetas personalizadas: visión de conjunto
¿Qué es una etiqueta?
¿Qué es una etiqueta JSP personalizada?
Ventajas de utilizar etiquetas personalizadas
¿Qué es una librería de etiquetas?
Los componentes de la librería de etiquetas
Manejador de etiquetas
El archivo TLD
El archivo web.xml
La página JSP
Librerías de etiquetas incluidas con Struts
Utilizar librerías de etiquetas con aplicaciones Struts
Utilizar JavaBeans con etiquetas Struts
Acceder a las propiedades básicas
Acceder a propiedades anidadas
Acceder a propiedades indexadas
Etiquetas HTML de Struts
La etiqueta html
La etiqueta base
La etiqueta form
El atributo action.
El atributo enctype
El atributo name
El atributo scope
El atributo type
Utilizar múltiples etiquetas form
Las etiquetas button y cancel
La etiqueta checkbox
Las etiquetas messages y errors
Manejadores de evento de JavaScript
Atributos de navegación HTML
Etiquetas Logic
Comparación de valor
Coincidencia de subcadenas
Redirigir y reenviar
Utilidades de colección
Mensajes y errores
Etiquetas Bean
La etiqueta define
La etiqueta header
La etiqueta include
La etiqueta message
La etiqueta parameter
La etiqueta resource
La etiqueta write
Etiquetas Nested
Otras librerías de etiquetas de utilidad
El proyecto Jakarta Taglibs
JSPTags.com
La librería de etiquetas estándar para JSP (JSTL)
Etiquetas básicas JSTL
Etiquetas de internacionalización JSTL
Etiquetas XML de JSTL
Etiquetas SQL de JSTL
Funciones
Un nuevo lenguaje de expresión
Requisitos JSTL
JSTL y Struts
Capítulo 9. Ampliar el marco de trabajo Struts
¿Qué es un punto de ampliación?
Puntos de ampliación generales
Utilizar el mecanismo PlugIn
Añadir el plug-in al archivo de configuración
Ampliar las clases de configuración de Struts
Puntos de ampliación del controlador
Ampliar la clase ActionServlet
Ampliar la clase RequestProcessor
Utilizar el método processPreprocess()
Ampliar la clase Action base
Ampliar los componentes de la vista
Ampliar las etiquetas personalizadas de Struts
Ampliar los componentes del modelo
Las clases UserContainer y ApplicationContainer
Desventajas de ampliar el marco de trabajo
Capítulo 10. Gestionar excepciones
Gestión de excepciones de Java
Excepciones de Java
La pila de invocación de método
¿Qué pasa con la cláusula de envío?
Excepciones activadas y desactivadas
Impacto de rendimiento de la gestión de excepciones
Excepciones del sistema vs aplicación
Utilizar excepciones en cadena
Tratar con múltiples excepciones
Gestión de excepciones facilitada por Struts
Gestión de excepciones declarativas vs de programación
Utilizar gestión de excepciones por medio de programación
Atando cabos sueltos
Gestionar excepciones remotas
Excepciones en etiquetas personalizadas
La interfaz TryCatchFinally
Gestión de excepciones internacionalizada
Conclusión
Capítulo 11. El marco de trabajo Validator
La necesidad de un marco de trabajo de validación
Instalar y configurar el Validator
Paquetes obligatorios
Configurar las reglas de validación
El archivo validation-rules.xml
El archivo validation.xml
Conectar Validator
Utilizar una ActionForm con el Validator
Crear sus propias reglas de validación
El Validator y las etiquetas personalizadas JSP
Utilizar JavaScript con el Validator
Configurar el archivo validation-rules.xml para JavaScript
Internacionalizar la validación
Utilizar el Validator fuera de Struts
Modificar el archivo validation-rules.xml
Capítulo 12. Internacionalización y Struts
¿Qué es internacionalización?
Soporte para I18N en Java
La clase Locale
La ubicación por defecto
Determinar la ubicación del usuario
Paquetes de recursos Java
La clase MessageFormat
Soporte plurilingüe
Internacionalizar sus aplicaciones Struts
El paquete de recursos Struts
Crear un paquete de recursos Struts
Directrices de nombrado de paquetes de recursos
El paquete de recursos y el classpath
Acceder al paquete de recursos
La clase MessageTag de la librería de etiquetas Bean
Establecer el conjunto de caracteres
Gestionar excepciones e internacionalización
Capítulo 13. Struts y Enterprise JavaBeans
Implementar el servicio Storefront utilizando EJB
Visión de conjunto de EJB
La interfaz de negocio
Implementación de bean de sesión sin estado
Desplegar JBoss
Hacer de interfaz entre Struts y EJB
Utilizar un Business Delegate
Gestión de excepciones
Intercambiar la implementación
Gestionar referencias propias y remotas de EJB
Implementar un EJBHomeFactory
Utilizar un EJBHomeFactory en un business delegate
¿Qué pasa con las referencias remotas?
Utilizar proxies dinámicos
Conclusión
Capítulo 14. Utilizar Tiles
Entender las plantillas
¿Qué es un plantilla?
Instalar y configurar Tiles
Descargar Tiles
Instalar los archivos JAR necesarios y otros
Añadir la librería de etiquetas Tiles
Configurar Tiles para funcionar con Struts
La propiedad definitions-debug
La propiedad definitions-parser-details
La propiedad definitions-parser-validate
La propiedad moduleAware
La propiedad definitions-factory-class
Utilizar Tiles
¿Qué es un tile?
Utilizar un tile de diseño
Pasar parámetros al diseño
La librería de etiquetas Tiles
La etiqueta insert
La etiqueta definition
La etiqueta put
La etiqueta putList
La etiqueta add
La etiqueta get
La etiqueta getAsString
La etiqueta useAttribute
La etiqueta importAttribute
La etiqueta initComponentDefinitions
Utilizar definiciones
Declarar definiciones en una página JSP
Declarar definiciones en un archivo de configuración
Crear un archivo de configuración de definición
Ampliar las definiciones de Tile
Utilizar definiciones como reenvíos en Struts
Soporte de internacionalización con Tiles
Capítulo 15. Crear archivos de log en una aplicación Struts
Crear archivos de log en una aplicación Web
Utilizar el contenedor servlet para archivos log
Utilizar filtros
Crear un filtro
Crear la clase de filtro
Declarar el filtro en un descriptor de despliegue
Empaquetar el filtro
Utilizar oyentes de evento
Crear un oyente de evento
Crear la clase de oyente de evento
Declarar el oyente de evento en el descriptor de despliegue
Empaquetar el oyente de evento
Jakarta Commons Logging
Instalar el paquete Commons Logging
Utilizar la API Commons Logging
El marco de trabajo Struts y el paquete Commons Logging
Utilizar el paquete log4j
Integrar log4j con Struts
¿Qué son los logger?
Configurar los appender de log4j
Entender los niveles de log de log4j
Inicializar log4j
Inicializar utilizando el archivo log4j.properties
Inicializar utilizando un archivo XML
Especificar una ruta de acceso relativa vs. absoluta
Problemas de sincronización
Limpieza del archivo log
Utilizar Commons Logging en páginas JSP
El impacto de rendimiento de log4j
Ampliaciones log4j de terceros
La API de log de Java 1.4
Capítulo 16. Empaquetar su aplicación Struts
Empaquetar o no empaquetar
¿Qué es empaquetar?
¿Qué es el despliegue?
Decidir cómo empaquetar su aplicación
Gestionar el espacio de nombres
Ubicación de archivos JSP
Precompilar JavaServer Pages
Precompilar páginas JSP con Tomcat
Precompilar páginas JSP con Resin
Precompilar páginas JSP con WebLogic
Empaquetar recursos EJB con Struts
Empaquetar la aplicación como un archivo WAR
Crear el archivo WAR
Crear sus aplicaciones Struts con Ant
¿Qué es Ant?
Instalar y configurar Ant
Para comenzar
Compilar archivos fuente Java
Utilizar Ant para crear el archivo WAR
Limpieza
Crear un entorno build automatizado
Utilizar cron para invocar Ant
Utilizar Tareas programadas de Microsoft
Reiniciar su servidor remotamente
Capítulo 17. Gestionar el rendimiento
¿Qué es un buen rendimiento?
Pruebas de rendimiento vs carga
Herramientas para pruebas de rendimiento y estrés
Probar la aplicación Storefront
Entender los objetivos de rendimiento
Establecer una línea base de rendimiento
Tomar una línea base
Encontrar las áreas problemáticas
Realizar los cambios necesarios en software y hardware
Errores de rendimiento y escalabilidad
Ámbito de petición vs. sesión
Utilizar la palabra clave synchronized
Utilizar java.util.Vector y java.util.Hashtable
Utilizar demasiadas etiquetas personalizadas
Ajustar incorrectamente la JVM
Utilizar demasiadas llamadas remotas
Utilizar demasiados gráficos
Capítulo 18. JavaServer Faces
Struts y JavaServer Faces
¿Necesitamos realmente otro marco de trabajo de interfazde usuario?
Las ventajas de JSF
Visión de conjunto de la arquitectura JSF
Ciclo de vida petición/respuesta de JSF
Instalar y ejecutar la aplicación de ejemplo Struts-Faces
Convertir aplicaciones Struts existentes en JSF
Otras lecturas
Apéndice A. Cambios desde Struts 1.0
ActionServlet y RequestProcessor
Modificaciones en la clase Action de Struts
Cambios en web.xml y struts-config.xml
Cambios en las constantes estáticas de Action
TagUtils y ModuleUtils
Nuevas características de Struts 1.1
Gestión declarativa de excepciones
ActionForm dinámicas
Plug-ins
Múltiples módulos de aplicación
Etiquetas anidadas
Struts Validator
Cambiar a Commons Logging
Eliminación de acciones administrativas
Desaprobación de GenericDataSource
Dependencia de proyectos Commons
Apéndice B. Descargar e instalar Struts
Las distribuciones binarias vs fuente
Crear Struts desde la distribución fuente
Instalar la distribución binaria
Trucos para instalar Struts en Tomcat
Trucos para instalar Struts en WebLogic
Trucos para instalar Struts en WebSphere
Apéndice C. Recursos
Las listas de distribución de Struts
La página Web de recursos de Struts
El sitio de Tiles
El sitio de las etiquetas anidadas
Struts Console
Proyecto Easy Struts