Capítulo 1. Plataforma J2EE
Programación para empresas
La empresa actual
¿Es Java la respuesta?
Estilos de arquitectura de empresa
Arquitectura de dos niveles
Arquitectura de tres niveles
Arquitectura de n niveles
Arquitectura de empresa
La plataforma J2EE
Periodo de ejecución de J2EE
Los API de J2EE
Arquitectura J2EE - Contenedores
Arquitectura de contenedor
Tecnologías J2EE
Tecnologías de componentes
XML
Tecnologías de servicio
Tecnologías de comunicación
Desarrollo de aplicaciones J2EE
Funciones de desarrollo e implementación de aplicaciones
Desarrollo de componentes de aplicación
Composición de componentes de aplicación en módulos
Composición de módulos en aplicaciones
Implementación de la aplicación
Resumen
Capítulo 2. Servicios de directorio y JNDI
Servicios de designación y de directorio
Servicios de designación
Servicios de directorio
LDAP
Introducción de JNDI
Uso de JNDI
Instalación de JNDI
Proveedores de servicios JNDI
Cómo obtener proveedores de servicios JNDI
Cómo desarrollar su propio proveedor de servicios
Java y LDAP
Control de acceso
Servicios de páginas blancas
Directorio de procesamiento distribuido
Operaciones LDAP
Operaciones LDAP estándar
Conexión al servidos LDAP con JNDI
Asociación
Búsqueda en un servidor LDAP
Filtros LDAP de ejemplo
Determinar el alcance de LDAP
Ejecución de una búsqueda JNDI
Búsqueda autentificada
Restringir los atributos presentados
Añadir entradas
Modificar una entrada
Eliminar una entrada
Almacenar y recuperar objetos Java en LDAP
LDAP tradicional
Java serializado
Referencias Java
Volver a JNDI sin LDAP
Ejemplo de aplicación DNS
Resumen
Capítulo 3. Procesamiento distribuido con RMI
La arquitectura RMI
Capa de Stub y Skeleton
Capa de referencia remota
Capa de transporte
Localización de objetos remotos
Excepciones RMI
Desarrollo de aplicaciones con RMI
Definir la interfaz remota
Implementar la interfaz remota
Grabar el cliente que utiliza los objetos remotos
Generar stubs y skeletons
Registrar el objeto
Ejecutar el cliente y el servidor
RMISecurityManager
Pasar parámetros en RMI
Parámetros de primitivas
Parámetros de objeto
Parámetros remotos
El recolector de residuos distribuidos
Clases de carga dinámica
Retrollamadas remotas
Activación de objeto
El grupo de activación
Convertir objetos en activables
Desactivación
Sockets de adaptación y SSL
RMI, cortafuegos y HTTP
Tunelado HTTP
El protocolo SOCKS
Factorías de sockets descargados
RMI sobre IIOP
Interoperatividad con CORBA
Escribir programas con RMI-IIOP
RMI-IIOP y Java IDL
El archivo IDL
La implementación de servidor
La implementación cliente
RMI-IIOP y J2EE
Ajustar aplicaciones RMI
Resumen
Capítulo 4. Programación de bases de datos con JDBC
Drivers de bases de datos
Tipo 1 - Puente JDBC-ODBC
Tipo 2 - Parte Java, parte driver nativo
Tipo 3 - Servidor intermediario de acceso a bases de datos
Tipo 4 - Drivers Java puro
Cómo comenzar
El paquete java.sql
Gestión de conexión
Acceso a bases de datos
Tipos de datos
Metadatos de base de datos
Excepciones y advertencias
Cargar un driver de base de datos y abrir conexiones
Establecer una conexión
Crear y ejecutar instrucciones SQL
Consultar la base de datos
Instrucciones preparadas
Representar tipos SQL en Java
Apoyo a transacciones
Puntos de salvaguardia
Listas de resultados desplazables y actualizables
Listas de resultados desplazables
Métodos relacionados con la posición del cursor
Métodos para desplazamiento
Dirección y tamaño de toma
Listas de resultados actualizables
Actualizar una fila
Eliminar una fila
Insertar una fila
Actualizaciones de lotes
El paquete javax.sql
Fuentes de datos JDBC
La interfaz javax.sql.DataSource
JNDI y fuentes de datos
Revisión del catálogo de películas
Reserva de conexiones
Reserva de conexiones tradicional
Reserva de conexiones con el paquete javax.sql
La interfaz javax.sql.ConnectionPoolDataSource
La interfaz javax.sql.PooledConnection
La interfaz javax.sql.ConnectionEventListener
La clase javax.sql.ConnectionEvent
Implementación de reservas de conexión
Transacciones distribuidas
¿Qué es una transacción?
Antecedentes
Procesamiento de transacciones - Conceptos
Demarcación de transacciones
Contexto de transacciones y propagación
Alistamiento de recursos
Aceptar en dos fases
Construcción de bloques de sistemas de procesamiento de transacciones
Componentes de aplicación
Gestores de recursos
Gestor de transacciones
Transacciones distribuidas JDBC
La interfaz javax.sql.XADataSource
La interfaz javax.sql.XAConnection
La interfaz javax.Transaction.UserTransaction
Pasos para la implementación de transacciones distribuidas
Configuración
Iniciar una transacción
Operaciones de base de datos
Finalizar una transacción
Precauciones especiales
Objetos RowSet
La interfaz javax.sql.RowSet
Propiedades
Eventos
Ejecución de comandos y resultados
Tipos de objetos RowSet
La implementación CachedRowSet
La implementación RowSet JDBC
La implementación RowSet Web
Resumen
Capítulo 5. Introducción a los contenedores Web
El protocolo HTTP
Métodos de solicitud HTTP
La respuesta HTTP
Contenedores Web y aplicaciones Web
Servlets Java
Páginas JavaServer
Descriptores de despliegue
Estructura de aplicaciones Web
Tipos de contenedores Web
Una sencilla aplicación Web
Prepara el contenedor Web
Crear el archivo HTML
Crear un servlet
Construir la aplicación Web
Desplegar la aplicación Web
Ejecutar la aplicación Web
Cómo funciona la aplicación
Resumen
Capítulo 6. Programación de servlets
Análisis del API Java Servlet
Implementación de servlet
La interfaz servlet
La clase GenericServlet
La interfaz SingleThreadModel
La clase HttpServlet
Configuración de servlets
La interfaz ServletConfig
Obtener una referencia a ServletConfig
Excepciones servlet
La clase ServletException
La clase UnavailableException
El ciclo de vida de los servlets
El ciclo de vida de un servlet - FreakServlet
Instanciación
Inicialización
Servicio
Destruir
Solicitudes y respuestas
La interfaz ServletRequest
Métodos para solicitar parámetros
El método getParameter()
El método getParameterValues()
El método getParameterNames()
El método getParameterMap()
Métodos para atributos de solicitud
El método getAttribute()
El método getAttributesNames()
El método setAttribute()
El método removeAttribute()
Métodos de entrada
El método getInputStream()
El método getReader()
El método getCharacterEncoding()
El método setCharacterEncoding()
La clase ServletRequestWrapper
La interfaz HttpServletRequest
Métodos para solicitar ruta y URL
El método getPathInfo()
El método getPathTranslated()
El método getQueryString()
El método getRequestURI()
El método getRequestURL()
El método getServletPath()
Métodos para cabeceras HTTP
El métodogetHeader()
El método getHeaders()
El método getHeaderNames()
El método getMethod()
La clase HttpServletRequestWrapper
La interfaz ServletResponse
Métodos para tipo de contenido y longitud
El método setContentType()
El método setContentLength()
Métodos de salida
El método getOutputStream()
El método getWriter()
Métodos para salida en búfer
El método setBufferSize()
El método getBufferSize()
El método resetBuffer()
El método flushBuffer()
El método isCommitted()
El método reset()
La clase ServletResponseWrapper
La interfaz HttpServletResponse
Métodos para el manejo de errores
El método sendError()
El método sendError()
El método setStatus()
El método sendRedirect()
La clase HttpServletResponseWrapper
Función de las clases envoltorio
Programación de servlets - Aplicación de apoyo técnico
Configurar la página HTML
Preparar la base de datos
Escribir el servlet
Extraer datos del formulario
Insertar la solicitud de apoyo técnico
Generar la respuesta
Compilar la fuente
Construir la aplicación Web
El descriptor de despliegue
Configurar la fuente de datos
Desplegar la aplicación Web
Apoyo técnico en marcha
Resumen
Capítulo 7. Sesiones de servlets, contexto y colaboración
Protocolo sin estado y sesiones
Enfoques del registro de sesión
Reescritura de URL
Campos de formulario ocultos
Cookies
Registro de sesión con el API Java Servlet
Creación y registro de sesiones
La interfaz HttpSession
Métodos para vida de sesión
El método getCreationTime()
El método getId()
El método getLastAccessedTime()
El método getMaxInactiveInterval()
El método setMaxInactiveInterval()
El método isNew()
El método invalidate()
Demostrar el ciclo de vida de la sesión con cookies
Ciclo de vida de sesión sin cookies
Métodos para gestionar el estado
El método getAttribute()
El método getAttributeNames()
El método setAttribute()
El método removeAttribute()
Demostrar la gestión de estado
Manejo de eventos de ciclo de vida de sesión
La interfaz HttpSessionListener
La interfaz HttpSessionActivationListener
El método sessionDidActivate()
El método sessionWillPassivate()
La clase HttpSessionEvent
El método getSession()
Manejo de eventos de atributos de sesión
La interfaz HttpSessionBindingListener
El método valueBound()
El método valueUnbound()
La interfaz HttpSessionAttributeListener
El método attributeAdded()
El método attributeRemoved()
El método attributeReplaced()
La clase HttpSessionBindingEvent
El método getName()
El método getValue()
El método getSession()
Un sencillo carro de la compra utilizando sesiones
El servlet del catálogo
El servlet ShoppingCart
Contexto de servlet
La interfaz ServletContext
El método getMimeType()
El método getResource()
El método getResourceAsStream()
El método getRequestDispatcher()
El método getNamedDispatcher()
El método getRealPath()
El método getContext()
El método getServerInfo()
El método getServletContextName()
El método getResourcePaths()
Los métodos getInitParameter() y getInitParameterNames()
Los métodos getAttribute(), getAttributeNames(), setAttributes() y removeAttribute()
Los métodos log()
El manejo de eventos de ciclo de vida de ServletContext
La interfaz ServletContextListener
ServletContextAttributeListener
Una aplicación de chat que utiliza contexto y sesiones
La clase ChatRoom
La clase ChatEntry
El servlet de administración
Servlets para chat
La clase ListRoomsServlet
La clase ChatRoomServlet
Configuración del chat
Una página de bienvenida
Descriptor de despliegue
Desplegar y probar
Colaboración de servlet
Encadenado de servlet
Lanzamiento de solicitudes
La interfaz RequestDispatcher
El método forward()
El método include()
Obtener un objeto RequestDispatcher
Revisión de Apoyo Técnico
La página techsupp.html
TechSupportServlet
La página register.html
RegisterCustomerServlet
ResponseServlet
BannerServlet
Configuración de Apoyo Técnico y despliegue
Utilizar RequestDispatcher para colaboración
Reenviar una solicitud a ResponseServlet
Reenviar solicitud a regiter.html
Incluir insignia en ResponseServlet
Resumen
Capítulo 8. Filtros para aplicaciones Web
¿Qué es un filtro?
Filtro de muestra
Despliegue
El API filtro
La interfaz de filtro
El método init()
El método doFilter()
El método destroy()
La interfaz FilterConfig
El método getFilterName()
El método getInitParameter()
El método getInitParameterNames()
El método getServletContext()
La interfaz FilterChain
El método doFilter()
Descriptor de despliegue para filtros
La aplicación de chat con filtros
Registro de mensajes
Moderación de mensajes
Descriptor de despliegue
Despliegue
Chat con registro y moderación
Resumen
Capítulo 9. Despliegue Web, autentificación y empaquetado
Estructura de aplicación Web
Estructura de directorio
Ficheros en archivo Web
Desplegar un archivo WAR
¿Cuándo deben utilizarse los archivos WAR?
Asociar de solicitudes a aplicaciones y servlets
Asegurar aplicaciones Web
Seguridad programada
El método getAuthtype()
El método getRemoteUser()
El método getUserPrincipal()
El método isUserRole()
Autentificación basada en un formulario
Configuración de despliegue
Parámetros de inicialización de contexto
Parámetros de inicialización de servlet
Cargar servlets en el arranque
Tiempo límite de sesión
Asociaciones MIME
Archivos de bienvenida
Páginas de error
Enviar errores
Lanzar ServletException
Manejar errores y excepciones HTTP
Aplicaciones