Nivel de presentación
Aplicaciones Web
Autores:
Simon Pickin
Natividad Martínez Madrid
Florina Almenárez Mendoza
Pablo Basanta Val
Dirección:
Versión:
Departamento de Ingeniería Telemática
Universidad Carlos III de Madrid
1.0
Software de
Comunicaciones
-
Agradecimientos:
Florina Almenares, IT/UC3M
Natividad Martínez Madrid, IT/UC3M
Simon Pickin, IT/UC3M
Contenido
1. Java Servlets
2. Java Server Pages (JSPs)
3. Integración de servlets y JSPs
Bibliografía:
• Core Servlets and JavaServer Pages. Marty Hall and
Larry Brown. Second Edition. Prentice Hall. 2004
• Java for the Web with Servlets, JSP, and EJB. Budi
Kurniawan. New Riders. 2002. Part I, capítulos 1-5, 8-11, 17
Software de
Comunicaciones
-
• Tecnologías de servidor con Java: Servlets, JavaBeans,
JSP. Ángel Esteban. Grupo EIDOS. 2000
2
1
Arquitectura de una aplicación Web
Servlets/JSPs
Aplicación con una arquitectura “Three-Tier”
(aplicación pequeña sin capa de lógica de negocio)
Cliente
Servlets
JSP pages
Web Container
Presentación
+
Lógica de negocio
Software de
Comunicaciones
-
3
Nivel de presentación:
Java Servlets
Software de
Comunicaciones
-
4
2
Contenido
• Generalidades
– Introducción
– Ventajas
– Ciclo de vida
• API de Servlets
– Interfaces, clases y métodos
– Servlets HTTP
– Forwarding / Including
– Gestión de Sesiones (Session Tracking)
Software de
Comunicaciones
-
5
Introducción a los Servlets (1/2)
• Un servlet es una clase java usada para extender
las capacidades de los servidores que albergan
aplicaciones accedidas mediante un modelo de
programación cliente-servidor
– Usado para extender las capacidades de la web
• Comparable a un programa CGI (Common Gateway
Interface)
– pero con una arquitectura de ejecución diferente
• Gestionados por un contenedor de servlets o un
motor
– JVM + implementación del API del servlet
Software de
Comunicaciones
-
6
3
Introducción a los Servlets (2/2)
Cliente
Navegador
petición
respuesta
Servidor
Contenedor
(JRE)
Servlet
Servlet
Servlet
• Interfaces y clases
– Paquetes javax
javax..servlet
servlet y javax
javax..servlet
servlet..httphttp
Fuente: Web Component Development With Servlet and JSP Technologies
Sun Microsystems (course SL-314-EE5)
• Todos los servlets tienen que implementar el
interfaz
Servlet, que define los métodos de ciclo de vida, o bien
Servlet
heredar de la clase:
Software de
Comunicaciones
-
– GenericServlet para implementar servicios genéricos.
– HttpServlet
para manejar
servicios
HTTP
- extends GenericServlet
específicos.
7
Ventajas de utilizar servlets (1/2)
• Eficiencia
– Un hilo por cada petición pero una única instancia de cada
servlet
• Ventajas en rendimiento: no hay retrasos en las peticiones.
• Ventajas espaciales: menor consumo de memoria
• Escalabilidad
– El servlet mantiene su estado entre diferentes invocaciones:
• conexiones a bases de datos, conexiones de red, etc.
– Ejecución de peticiones mediante la invocación de un método.
• Utilidades para realizar las típicas tareas de servidor
– logging, gestión de errores, cookies, sesiones, …
• Comunicación
Software de
Comunicaciones
-
– Manera estandarizada de comunicación con el servidor
– Los servlets pueden compartir datos
• Permite la creación de pools para acceder a la base de datos, etc
8
4
Ventajas de utilizar servlets (2/2)
• Ventajas de Java
– Gran número de APIs: JDBC, hilos, RMI, red, etc.
– Portabilidad entre plataformas y servidores
– Seguridad:
• máquina virtual, chequeo de tipos, gestión de memoria,
excepciones, etc.
• Gestor de seguridad Java
– Orientación a objetos
– Gran comunidad de desarrolladores
– Disponibilidad de código externo
Software de
Comunicaciones
-
9
Ciclo de vida del servlet
•
Instanciación e inicialización (en la primera petición)
– Si no existen instancias del servlet, el contenedor web:
• Carga la clase del servlet
• Crea una instancia
• Inicializa la instancia del servlet llamando a init
• Manejo de sucesivas peticiones
– El contenedor crea un hilo que llama al método service
de la instancia
– El método service determina lo que ha llegado en la
petición y llama a un método apropiado
• Destrucción
– Cuando el contenedor decide destruir el servlet, llama a su
método destroy
10
Software de
Comunicaciones
-
5
Consecuencias del ciclo de vida del
servlet (1/2)
• Una única máquina virtual:
– Compartición de datos entre varias instancias
• Persistencia (en memoria) de las instancias
– Consumo de memoria reducido
– Eliminación de los tiempos de inicialización e instanciación
– Persistencia (en memoria) del estado,
los datos y los
recursos
• Atributos persistentes del servlet
• Conexiones a bases de datos persistentes, etc
– Persistencia (en memoria) de los hilos
Software de
Comunicaciones
-
11
Consecuencias del ciclo de vida del
servlet (2/2)
• Peticiones concurrentes
– Se necesita de sincronización para manejar el acceso
concurrente
• Clases, instancias de atributo, bases de datos, etc
– Si el hilo implementa la interfaz SingleThreadModel
• No existe acceso concurrente a las instancias de los atributos
(puede haber acceso concurrente a los atributos de la clase)
• Puede minar el rendimiento de la máquina virtual
• Ha sido marcado como obsoleto (deprecated) desde la
versión 2.4
Software de
Comunicaciones
-
12
6
Contenido: Servlets Java
• Generalidades
– Introducción
– Ventajas
– Tareas de los servlets
– Ciclo de vida
• API de Servlets
– Interfaces, clases y métodos
– Servlets HTTP
– Forwarding / Including
– Gestión de Sesiones
Software de
Comunicaciones
-
13
API de Servlets
• Paquetes
• 3 clases
– javax.servlet
– GenericServlet
• 7 interfaces
– Servlet
– ServletInputStream
– ServletOutputStream
– ServletConfig
• 2 clases de excepciones
– ServletContext
– ServletException
– ServletRequest
– UnavailableException
– ServletResponse
– SingleThreadModel
– RequestDispatcher
Software de
Comunicaciones
-
14
7
Interfaz Servlet Métodos (1/2)
• void init(ServletConfig config)
– Sólo se llama una vez después de instanciar el servlet
– El servlet puede instanciarse según como se haya registrado:
• Cuando el primer usuario accede a la URL del servlet
• O bien cuando se arranca el servidor Web
– Sin argumentos: inicialización independiente del servidor
•
Inicialización de variables, conexión a base de datos, etc
– Con argumentos: inicialización dependiente del servidor
•
Información obtenida del descriptor de despliegue web.xml (desde
la especificación 2.3) y almacenado en un objeto ServletConfig
• Configuración de base de datos, ficheros de password, parámetros
de prestaciones del servidor, etc.
• void service(ServletRequest req,
ServletResponse res)
– Es invocado por el contenedor para permitir que el servlet
responda a una petición
15
Software de
Comunicaciones
-
Interfaz Servlet Métodos (2/2)
• void destroy()
– El contenedor puede decidir descargar una instancia de un
servlet
• Decisión del administrador
• Timeout: demasiado tiempo inactivo
– Previamente llama al método destroy
• Cerrar conexiones a bases de datos
• Parar hilos
• Escribir cookies o contador de impactos (hits) a disco
• …
– Si se cae el servidor Web, no se llama al método destroy
• Conclusión: mantener el estado de manera proactiva
(guardar los trastos de forma de regular)
16
Software de
Comunicaciones
-
8
Interfaz ServletConfig (1/3)
• Objeto de configuración usado por el contenedor para pasar
información al servlet durante la inicialización
– Se recupera del descriptor de despliegue web.xml
– Por cada servlet registrado, se pueden especificar un conjunto de
parámetros iniciales (nombre/valor)
<web-app>
<servlet>
<servlet-name>ConfigExample</servlet-name>
<servlet-class>ConfigExampleServlet</servlet-class>
<init-param>
<param-name>adminEmail</param-name>
<param-value>
[email protected]</param-value>
</init-param>
<init-param> . . . </init-param>
</servlet>
. . .
</web-app>
Software de
Comunicaciones
-
17
Interfaz ServletConfig (2/2)
• Ejemplo: sobreescribir el método init para imprimir
objeto
contenida
en
el
la
información
ServletConfig
public void init(ServletConfig config) throws ServletException {
Enumeration parameters = config.getInitParameterNames();
while (parameters.hasMoreElements()) {
String parameter = (String) parameters.nextElement();
System.out.println("Parameter name : " + parameter);
System.out.println("Parameter value : " +
config.getInitParameter(parameter));
}
}
Software de
Comunicaciones
-
18
9
Interface ServletConfig (3/3)
• Si el método init (con paramétros) de la interfaz Servlet
(implementado el clase GenericServlet) es refenido, el
objeto ServletConfig no será salvado y no estará
disponible después de la inicialización.
• Solución: o bien llamar a Servlet.init(super.init si se
extiende la clase GenericServlet o HttpServlet) desde
dentro del init redefinido os i explícitamente se salva:
ServletConfig servlet_config;
public void init(ServletConfig config) throws
ServletException {
servlet_config = config;
}
Software de
Comunicaciones
-
La ventaja de esta última solución es que en este caso el
objeto ServletConfig estará disponible a través del método
getServletConfig mientras que la segunda solución no lo
estará.
19
Interfaz ServletContext
• Define un conjunto de métodos usados por el servlet para
comunicarse
repartidores de peticiones (“dispatcher”), etc.)
– Con otros servlets de la misma aplicación Web
– Con su contenedor
(obtener el
tipo MIME de un fichero,
• Hay un contexto
– Por cada aplicación Web
– Por cada JVM
• Aplicación Web
– colección de servlets, JSPs y otros recursos instalados en un
subconjunto específico (subdirectorio) del espacio de nombres
del servidor
• La información sobre la aplicación web a la que pertenece un
servlet se almacena en el objeto ServletConfig
20
Software de
Comunicaciones
-
10
Atribut
Comentarios de: Nivel de presentación - Aplicaciones Web (0)
No hay comentarios