La interfaz IterationTag
La interfaz BodyTag
Etiquetas de cooperación simples
Extensión de la funcionalidad de las etiquetas personalizadas
Adición de atributos a sus etiquetas
Cómo hacer que los atributos sean necesarios
Evaluación de los valores del atributo en el tiempo de ejecución
Las ventajas de utilizar atributos de etiquetas
Utilización de variables scripting
Declaración de variables scripting en el archivo TLD
Etiquetas de cooperación que utilizan variables scripting
Declaración de variables Scripting utilizando clases TagExtraInfo
Utilización de clase TEI para validar etiquetas
Ubicación de un archivo TLD
Hacer referencia al TLD mediante el descriptor de despliegue web.xml
Empaquetación de bibliotecas de etiquetas en archivos JAR
Recursos
ResumenCapítulo 11: Seguir la pista a los usuarios
¿Qué es una sesión?
El protocolo HTTP
¿Cómo funciona el protocolo HTTP?
De vuelta a las sesiones
Seguimiento de sesiones
Cookies
Reescritura URL
Campos de formulario ocultos
Utilización de sesiones en páginas JavaServer
El objeto Session en detalle
Almacenamiento de datos en Session
Comprobación de una nueva sesión
Obtención del identificador de la sesión
Eliminación de la sesión
Tiempo de espera superado de la sesión
Ámbito de la sesión
El objeto application (aplicación)
Resumen
Capítulo 12: Estructuración de nuestras aplicaciones
Código de mantenimiento y reutilización
Cómo incluir un archivo en una JSP
Inclusiones dinámicas
Arquitectura de las aplicaciones web
Modelo 1 de arquitectura JSP
Inconvenientes del modelo 1 de arquitectura JSP
Modelo 2 de arquitectura JSP
Utilización de un controlador de envío
Envío del objeto scope
Implementación del modelo
Implementación de la vista y del controlador
Resumen
Capítulo 13: Entre bastidores
Tecnología Java Servlet
Función de un servlet en una aplicación Web
Arquitectura de un servlet
Procesamiento de solicitudes
Ciclo vital del servlet
Carga, creación de instancias e inicialización
Procesamiento de solicitudes
El objeto Request
El objeto Response
Descargas
¿Qué sucede en la página JSP?
Aplicaciones Web y web.xml
Cómo obtener información de inicialización
Colaboración entre servlets
Seguimiento de sesiones
El contexto de Servlet
Cómo reenviar e incluir solicitudes
Autenticación de usuarios
Autenticación HTTP básica
Autenticación basada en formularios
Seguridad de hilos en un servlet
Resumen
Capítulo 14: Acceso a archivos
Archivos y flujos
Repaso a las clases I/O
Rutas y directorios de archivos
La clase File
Atributos de archivos
Cómo enumerar los contenidos de un directorio
Cómo filtrar la lista de archivos
Cómo utilizar la clase File en una página JSP
Las clases Stream
I/O Byte
I/O Carácter
Clases abstractas de bytes
La clase InputStream
La clase OutputStream
Clases abstractas de caracteres
La clase Reader
La clase Writer
Conversión entre flujos de caracteres y de bytes
I/O a archivos
La clase FileInputStream
La clase FileOutputStream
La clase FileReader
La clase FileWriter
I/O en matrices y cadenas
I/O en matrices de bytes
La clase ByteArrayInputStream
La clase ByteArrayOutputStream
I/O en matrices de caracteres
La clase CharArrayReader
La clase CharArrayWriter
I/O en cadena
I/O secuencial
La clase SequenceInputStream
I/O de datos
DataInput y DataOutput
DataInputStream y DataOutputStream
I/O en objetos
Serialización
La interfaz Serializable
Las interfaces ObjectInput y ObjectOutput
La clase ObjectOutputStream
La clase ObjectInputStream
Serialización personalizada: la interfaz Serializable
I/O filtrado
FilterInputStream, FilterOutputStream, FilterReader y FilterWriter
La clase PrintStream
La clase PrintWriter
La clase PushbackInputStream
La clase PushbackReader
I/O en buffer
BufferedInputStream y BufferedOutputStream
BufferedReader y BufferedReader
Acceso aleatorio a archivos
Resumen
Capítulo 15: Creación de bases de datos con Java
Introducción a las bases de datos
Uso de tablas
Bases de datos relacionales
Relaciones entre tablas
El modelo relacional
Integridad referencial
Presentación de SQL
Instalación de MySQL
Resolución de problemas
Cómo utilizar MySQL
Cómo conectarse y desconectarse al servidor MySQL
Comandos SQL en la línea de comandos
Tipos de datos SQL
Creación de bases de datos y tablas con SQL
Cómo modificar tablas
Conectividad de bases de datos de Java
Controladores
Modelos de acceso a datos
Tipos de controladores JDBC
Asignaciones de datos SQL en Java
Cómo acceder a una base de datos utilizando JDBC
Cómo cargar el controlador JDBC
URL de JDBC
Cómo establecer la conexión
Creación de instrucciones
Ejecución de instrucciones
Cómo completar las tablas
Cómo añadir datos a una tabla por medio de JDBC
Cómo modificar datos
Cómo eliminar los datos de una tabla
Cómo añadir datos a una tabla utilizando JDBC
Resumen
Capítulo 16: Consultas a bases de datos con Java
Cómo consultar la base de datos
Conceptos básicos de la instrucción SELECT
Consultas con JDBC
La interfaz ResultSet
Detalles de ResultSet
Consultas avanzadas
Selección condicional
Operadores relacionales
Operadores lógicos
Los operadores IN y BETWEEN
El operador LIKE
Cómo combinar tablas
Alias
Otras opciones de SQL
Funciones agregadas
GROUP BY
ORDER BY
Vistas, índices y subconsultas
Cómo eliminar tablas, índices y bases de datos
Retrospectiva SQL
Conceptos adicionales de JDBC
Conexiones a bases de datos
Servicios de denominación y directorios
Agrupación de conexiones
Cómo utilizar una fuente de datos
Cómo acceder a la base de datos
La interfaz PreparedStatement
Cómo utilizar ResultSet
Conjuntos de resultados actualizables
Transacciones
Niveles de aislamiento de transacciones
Transacciones en SQL
Actualizaciones por lotes
Acceso a datos y JSP
Cómo utilizar un componente JavaBean
Cómo utilizar una biblioteca de etiquetas
Descarga e instalación
Resumen
Capítulo 17: Correo electrónico
Razones para utilizar JavaMail
Instalación de JavaMail con Tomcat
Comprobación
Configuración de una cuenta de correo electrónico
POP (Protocolo de Oficina de Correos)
SMTP (Protocolo Simple de Transferencia de Correo)
Elementos fundamentales del API JavaMail
La clase javax.mail.Session
La clase javax.mail.Message
La clase javax.mail.Address
Cómo transportar mensajes
Una utilidad JSP para enviar correo
Resolución de errores en sendDynamicMail.jsp
Cómo superar la barrera de correos de texto
Presentación de javax.mail.internet.MimeMultipart
La clase javax.mail.internet.MimeBodyPart
Archivos y direcciones URL adjuntas
javax.activation.DataHandler y otros adjuntos no de texto
La clase javax.activation.FileDataSource
La clase javax.activation.URLDataSource
Envío de correos adicionales
Recepción y manejo de mensajes
Cómo leer mensajes adicionales
Enlaces de interés
Resumen
Capítulo 18: La estructura Struts
¿Para qué necesitamos estructuras Web?
Presentación de la estructura Struts
La arquitectura Struts
Cómo instalar y configurar Struts
Cómo utilizar Struts en una aplicación Web
El archivo de configuración Struts
Ejemplo de archivo de configuración Struts
Componentes de Struts
ActionServlet
Configuración de ActionServlet
Clases Action
Métodos de la clase Action
Resolución de errores en Struts
La clase ActionError
La clase ActionErrors
ActionForm
ActionForward
ActionMapping
Presentación de la biblioteca de etiquetas Struts
Etiquetas Bean
Etiquetas para copiar beans
Etiquetas para definir variables de script
Propiedades de renderización de beans
La etiqueta Message y la internacionalización
Etiquetas lógicas
Etiquetas condicionales basadas en comparaciones
La cadena Iterate
Etiquetas de reenvío
Etiquetas HTML
Etiquetas para renderizar elementos de entrada y de formularios
Etiquetas Template
Ejemplo de aplicación Web basada en Struts
El JavaBean EmployeeForm
La clase EmployeeAction
Ejemplo de etiquetas personalizadas específicas de la aplicación
La etiqueta Department
La etiqueta Skills
Descriptor de la biblioteca de etiquetas
Páginas JSP de la aplicación de muestra
InputContent.jsp
OutputContent.jsp
Archivo de recursos de la aplicación
Descriptor de implementación Web de la aplicación
Configuración de Struts para la aplicación
Cómo implementar la aplicación
Ejecución de la aplicación
Resumen
Capítulo 19: Caso práctico: Diseño y acceso a datos
Análisis de los requisitos
Cómo escoger la tecnología adecuada
Arquitectura de la aplicación
Seguridad
Autenticación
Definición del esquema de autenticación
Autorización
Parcelas de seguridad
Identificación de entidades
Implementación de las entidades
Scripts de base de datos
Clases Java
Agrupación de conexiones a bases de datos
Cómo implementar la agrupación
ConnectionPool
DBInitServlet
Objetos de acceso a datos
Excepciones en objetos de acceso a datos
CreateException
DuplicateKeyException
FinderException
ObjectNotFoundException
NoSuchEntityException
Métodos de creación
Métodos de actualización
Métodos de eliminación
Métodos de localización
Localizadores de un solo objeto
Localizadores de varios objetos
AttractionDAO
EventDAO
UserRoleDAO
Objetos de negocio
Cómo manejar excepciones
AttractionException
EventException
Roles
AttractionBO
EventBO
Resumen
Capítulo 20: Caso práctico: La interfaz Web
Implementación del nivel Web
Formularios de acción Struts
Resolución de errores e internacionalización
Menú basado en roles
La página menu.jsp
Plantilla dinámica de página Web
La página template.jsp
Interacciones con el sistema
Página de inicio
La página index.jsp
Asignación de acción /home.do
HomeAction
BeanNames
La página home.jsp
La página homeContent.jsp
Cómo acceder a los detalles de una atracción
Asignación de acción /viewAttraction.do
ViewAttractionAction
La página viewAttraction.jsp
La página viewAttractionContent.jsp
Cómo registrar una atracción
Asignación de acción /registerAttraction.do
La página registerAttraction.jsp
La página registerAttractionContent
RegisterAttractionAction
La página confirmRegistration.jsp
Modificación de los detalles de una atracción
Asignación de acción /editAttraction.do
La página login.jsp
La página loginContent.jsp
EditAttractionAction
La página editAttraction.jsp
La página editAttractionContent.jsp
Actualización de atracciones
Asignación de acción /updateAttraction.do
UpdateAttractionAction
La página confirmUpdate.jsp
Lista de actividades
Asignación de acción /listEvents.do
ListEventsAction
La página listEvents.jsp
La página listEventsContent.jsp
Eliminación de actividades
Reenvío de acción
DeleteEventAction
Cómo modificar una actividad
Asignación de acción /editEvent.do
EditEventAction
La página editEvent.jsp
La página editEventContent.jsp
Actualización de actividades
Asignación de acción /updateEvent.do
UpdateEventAction
Cómo agregar una actividad
Cómo anular el registro de una atracción
Asignación de acción /deregister.do
DeregisterAttractionAction
Cómo desconectar
Asignación de acción /logoff.do
LogOffAction
Cómo configurar y ejecutar la aplicación
El descriptor de implementación
Configuración de Struts
Cómo construir la aplicación
Cómo mejorar la aplicación
Resumen
Apéndice A: Sintaxis JSP
Preliminares
Notación
Especificaciones URL
Comentarios
Directivas
La Directiva page
La Directiva taglib
La Directiva include
Elementos de scripting
Declaraciones
Fragmentos de código
Expresiones
Acciones estándar
Bibliotecas de etiquetas
Objetos implícitos
Atributos predefinidos
Atributos relacionados con la seguridad
javax.servlet.request.cipher_suite
javax.servlet.request.key_size
javax.servlet.request.X509Certificate
Atributos relacionados con la inclusión
javax.servlet.include.request_uri
javax.servlet.include.context_path
javax.servlet.include.servlet_path
javax.servlet.include.path_info
javax.servlet.include.query_string
Atributos de páginas de error Servlet
javax.servlet.error.status_code
javax.servlet.error.exception_type
javax.servlet.error.error.message
javax.servlet.error.exception
javax.servlet.error.request_uri
Atributos de páginas de error JSP
javax.servlet.jsp.jspException
Atributo del directorio de archivos temporales
javax.servlet.context.tempdir
Apéndice B: Objetos implícitos de JSP
El objeto request
El objeto response
El objeto out
El objeto session
El objeto application
El objeto exception
El objeto config
El objeto page
El objeto pageContext
Apéndice C: Formatos de datos XML
Estructura de los datos XML
Definiciones de tipos de documentos
Cómo ubicar la DTD
El elemento raíz
Elementos
Atributos
Entidades
El descriptor de implementación de la aplicación Web
Elementos comunes
El elemento raíz
Subelementos de
Definición de tipo de documento
El descriptor de la biblioteca de etiquetas
Elementos comunes
Elemento raíz
Subelementos de
Definición de tipo de documento
Archivo de configuración de Struts
Elementos comunes
El elemento raíz
y
y
y
y
Definición de tipo de documentoApéndice D: Cómo conseguir información adicional
Documentación sobre el paquete de desarrollo Java
Documentación sobre Tomcat y JSP/Servlet
Otros recursos
Apéndice E: Servicio técnico, Fe de erratas y p2p.wrox.com
Foros online en p2p.Online Forums
Cómo registrarse para conseguir asistencia online
Asistencia de primera calidad
Servicio técnico y erratas
Cómo localizar una errata en la página Web
Cómo añadir una errata: Asistencia por correo electrónico
Asistencia técnica al consumidor
Editorial
Autores
Lo que no podemos contestar
Cómo transmitirnos lo que realmente piensa
Índice alfabético