Servlet 3.0 (II) Servlets Asincronos

Documentos relacionados
Quickstart-Webapps-Spring

ISJu: Técnicas de Programación Cartilla Teórica-Práctica Instalación del "Eclipse IDE for Java EE Developers" y el servidor "Apache Tomcat"

Tutorial Web Dinámica con Servlets y JSP Sesion 3

Curso de gráficos con Java y OpenFlashChart para aplicaciones web. Manual del alumno

Conexión de Mysql con NetBeans

Ejemplos de Servlet y JSP Web Application Development

DESARROLLO WEB EN ENTORNO SERVIDOR

Diseño Y Aplicaciones de Sistemas Distribuidos. Servlets. Joan Vila

SERVLETS. Aplicaciones Distribuidas

Serialización de datos en C# en Binario, Soap y Xml

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

Sistemas de Información 12/13 Servlets y JSPs (Java Server Pages)

Clase Java que implementa un modelo de programación peticiónrespuesta. Puede usarse para procesar cualquier tipo de petición

NIVEL 16: ESTRUCTURAS N-ARIAS RECURSIVAS Aplicaciones Web, Html y Servlets. ISIS1206 Estructuras de Datos

Desarrollo de Sistemas Software Basados en Servicios y Componentes

Java Servlets. Luis Fernando Llana Díaz. 17 de abril de Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Programación con JDBC (Java DataBase Connectivity ), Servlets y JSP (Java Server Pages)

Curso de Ajax con Java. Manual del alumno

Práctica 2: Extensión de un servidor con servlets

INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE COMPUTÓ

Aplicaciones Web con Servlets y JSP (I)

Servlets. Unidad: 4 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.

Requisitos. Universidad ORT Arquitectura de Software

Escribir código HTML en los servlets es tedioso. que hay que utilizar las instrucciones print, println, etc. Es decir, HTML está dentro de java.

Multitarea en Java. Rafa Caballero - UCM

javax.servlet.genericservlet javax.servlet.http.httpservlet MiServlet

Curso Java Web (JSP's/Servlets)

2015 CÁTEDRA DE LENGUAJE DE PROGRAMACIÓN JAVA

Figura 7-1 Enlace para instalar el servidor web Apache Jakarta Tomcat

Introducción a los servlets

INTRODUCCIÓN N A LAS APLICACIONES WEB Y TECNOLOGÍA A JAVA

JAVA WEB SERVICES. Realizado por: Diana Alfaro Complementado por: Carlos Sánchez Página 1

Programación concurrente

Descripción de los Servicios Web de Portal Mayores

Tema 4: Servidores Web

3 PROGRAMACIÓN WEB CON SERVLETS

Configuración de Tomcat para usar SSL

Tema 4. Excepciones en Java

MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA

Introducción a las aplicaciones WEB

Concurrencia en Android LSUB, GYSC, URJC

HTTP, CGI, Applets y Servlets

Web Tier en JAVA. Nicolás Troncoso Carrère. Valparaíso, ILI 258 Departamento de Informática Universidad Técnica Federico Santa María

1 HILOS (THREADS) EN JAVA

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

Pasarela de pagos de la Administración Pública Vasca V2. Integración con Sistemas BackEnd de Administraciones

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

Implementando nuestro primer servlet

Procesamiento paralelo con hilos de Java

Contiene código HTML normal junto elementos especiales de JSP. Internamente, el servidor de aplicaciones las compilará a un servlet

Clase. geniería de la Computación. Departamento de Ciencias e Ing. Diego C. Martínez - DCIC-UNS

Unidad IV: Servlets. Comprender la estructura básica de los Servlets Crear servlets sencillos Presentar el ciclo de vida de un Servlet.

J2EE Java 2 Enterprise Edition

75-62 Técnicas de Programación Concurrente II 2004 java Threads

II Curso Online JAVA-J2EE

JSP JDBC SALVADORES OLAIZOLA,

Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas

Sistemas de Información 12/13 Ejercicios Tecnologías Web

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo

Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE

Programación Concurrente en Java

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

Práctica 4 PROGRAMACIÓN WEB CON SERVLETS Y JSP. 1. Introducción a JSP... 2

Capitulo 7: Tecnologías de la Capa Media, Lógica del Negocio.

Tema 14: Excepciones

Presentación. Programación I. Programación Orientada a Objetos. :: Prof. Yeniffer Peña

II Curso Online JAVA-J2EE

Night Of Silence. Documentación. Proyecto: Juego Web Raúl Lobo Medinilla 2ºASI IES. Gonzalo Nazareno

Programación Concurrente en Java: Threads

Tema 6. Threads: programas multitarea

Introducción a Java LSUB. 30 de enero de 2013 GSYC

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

Una breve descripción de Java

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

Curso de desarrollo web en entorno de servidor

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Tema 6: Arquitectura Web Multicapa

Java EE JavaServer Pages (JSP)

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Hebras y Sincronización en Java

TEMA 5: Control de la Concurrencia en Java (API Estándar)

PROGRAMACION DISTRIBUIDA

SERVLETS CÁTEDRA DE PROGRAMACIÓN AVANZADA. Ing. Mario Bressano & Luciano Diamand ENVÍO 04

SERVLETS MARIO OSVALDO BRESSANO

Transcripción:

En el articulo anterior hemos usado las anotaciones de Servlets 3.0 para dar de alta un servlet sin tener la necesidad de hacer uso del web.xml.en este articulo introduciremos el concepto de servlet asincrono. Supongamos que disponemos del siguiente servlet. package com.arquitecturajava; //omitimos imports /** * Servlet implementation class HolaMundo */ @WebServlet("/HolaMundo") public class HolaMundo extends HttpServlet { private static final long serialversionuid = 1L; protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw= response.getwriter(); pw.println("<html>"); pw.println("<body>"); for (int i = 0; i < 10; i++) { try { Thread.sleep(1000); catch (InterruptedException e) { e.printstacktrace();

pw.println("hola mundo"); pw.println("</body>"); pw.println("</html>"); Como se puede ver el servlet tiene un buble for que le obliga a dormir durante un total de 10 s simulando una tarea que consume recursos y lleva bastante tiempo ejecutar. Al tardar 10 segundos en ejecutar la tarea el usuario no recibirá información alguna sobre que es lo que ha sucedido y le dará la sensación que la aplicación ha fallado.para evitar esta situación podemos construir un servlet asincrono.este nuevo tipo de servlet se declara de la siguiente manera.

package com.arquitecturajava; import java.io.ioexception; import java.io.printwriter; import javax.servlet.asynccontext; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; @WebServlet(name = "HolaMundo", urlpatterns = { "/HolaMundo", asyncsupported = true) public class HolaMundo extends HttpServlet { private static final long serialversionuid = 1L; protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { final PrintWriter pw = response.getwriter(); pw.println("<html>"); pw.println("<body>"); pw.println("hola mundo asincrono tarea realizandose en background"); System.out.println("Hilo Principal:" + Thread.currentThread().getName()); final AsyncContext contextoasincrono = request.startasync(); contextoasincrono.settimeout(12000); contextoasincrono.start(new Runnable() { @Override

public void run() { for (int i = 0; i <= 10; i++) { System.out.println("Hilo Tarea Asincrona :" + Thread.currentThread().getName()); try { Thread.sleep(1000); catch (InterruptedException e) { contextoasincrono.complete(); ); pw.println("</body>"); pw.println("</html>"); pw.close(); Es muy similar a un servlet clásico con la peculiaridad de que soporta un nuevo atributo asyncsupported = true. Vamos a comentar mas a detalle el siguiente bloque de código del método doget. pw.println("hola mundo asincrono tarea realizandose en background"); System.out.println("Hilo Principal:" + Thread.currentThread().getName()); final AsyncContext contextoasincrono = request.startasync(); contextoasincrono.settimeout(12000);

contextoasincrono.start(new Runnable() { @Override public void run() { for (int i = 0; i <= 10; i++) { System.out.println("Hilo Tarea Asincrona :" + Thread.currentThread().getName()); try { Thread.sleep(1000); catch (InterruptedException e) { contextoasincrono.complete(); ); El método en cuestión modifica la forma de ejecutar el servlet a traves de la siguiente linea de código final AsyncContext contextoasincrono = request.startasync(); Esta linea define un contexto de ejecución asincrono para que mas adelante podemos pasar a este contexto un objeto de tipo Runnable (para lanzar un thread en paralelo) contextoasincrono.start(new Runnable() { Una vez hechas estas dos operaciones,el contexto lanzara un nuevo thread para ejecutar la tarea que nosotros le hemos solicitado de forma asincrona. Sin penalizar al thread actual que esta ejecutando el método doget del servlet

A continuación podemos ver en la consolo de Tomcat como el Servlet se ejecuta en el hilo principal (hilo 5)y la tarea asincrona en otro hilo (hilo 6).