Manual ca011 CURSO JAVA, SERVER PAGES JSP Y SERVLETS



Documentos relacionados
envía al browser. El browser despliega el archivo.

Un servlet es una clase java que implementa la Servlet interface. Un servlet corre dentro de un contexto denominado Servlet engine.

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

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

HTTP, CGI, Applets y Servlets

JSP Básico. Índice. 2 Traducción de los JSP a servlets Acciones Introducción a JSP... 2

Curso Java Web (JSP's/Servlets)

Requisitos. Universidad ORT Arquitectura de Software

Laboratorio de Aplicaciones Telemáticas

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

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

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

Modelo de Objetos Distribuidos

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

Introducción a la Firma Electrónica en MIDAS

J2EE Java 2 Enterprise Edition

Curso de Java POO: Programación orientada a objetos

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

Tema 1. Introducción a JAVA

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

Objetivo de aprendizaje del tema

Diplomado Java. Descripción. Objetivo. A quien está dirigido. Requisitos. Beneficios

Curso Desarrollo Java Web con JSP, Servlets y el MVC

Seguridad de la aplicación para servlets y JSP (página activas java)

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

Capítulo 2. Planteamiento del problema. Capítulo 2 Planteamiento del problema

Ejemplos de Servlet y JSP Web Application Development

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

JAVA EE 5. Arquitectura, conceptos y ejemplos.

JSP(JAVA SERVER PAGES)

Programación Orientada a Objetos con Java

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación.

SERVLETS. Aplicaciones Distribuidas

Manual del Protocolo XML-RPC de Mensajería Negocios

4. Programación Paralela

Capítulo I. Marco Teórico

Formatos para prácticas de laboratorio

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

Formato para prácticas de laboratorio

CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE

Curso de JavaServer Faces

Tema 4: Tecnologías Web Java

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Workflows? Sí, cuántos quiere?

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

Programación páginas web. Servidor (PHP)

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

Mario Muñoz Organero & Norberto Fernández * Departamento de Ingeniería Telemática

Lección 1 Introducción a Struts. uacosta@globalmentoring.com.mx

PROGRAMACIÓN PÁGINAS WEB CON PHP

Programación páginas web con ASP.NET 3.5 (C#)

Implementando nuestro primer servlet

Gestión de la Configuración

XPERTO EN DISEÑO DE PÁGINAS WEB

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

Fundamentos de programación Estudia las estructuras de control y cómo definir funciones en JavaScript.

Novedades en Q-flow 3.02

Capitulo 5. Implementación del sistema MDM

Introducción al desarrollo web (idesweb)

Gestión de Oportunidades

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y

Análisis y diseño del sistema CAPÍTULO 3

Haga clic en los recuadros donde indica la mano y regrese al inicio del capítulo al hacer clic en el título de la sección donde se encuentra

CAPÍTULO 14. DESARROLLO

SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO

ATLAS MANUAL DE INTEGRACIÓN Cliente del Servicio de SMS

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

Entidad Formadora: Plan Local De Formación Convocatoria 2010

Arquitectura J2EE para aplicaciones web. Aplicaciones web con JSP. Arquitectura J2EE: Capa de Acceso Web. Arquitectura J2EE: Capa Cliente

Transacciones: 2PC y 3PC. Aplicaciones de Internet: HTTP/Applets, HTTP/GCI y Java Servlets

Servidores Web (II) Contenidos

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Práctica sobre compartición de instancias remotas.

Servicio de Alta, Baja, Modificación y Consulta de usuarios Medusa

PROGRAMACIÓN JEE CON SERVLETS

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

JavaScript como Orientación a Objetos

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo.

Java Inicial (20 horas)

Manual de Integrador.NET

MANUAL DE USUARIO. Webservice simple para la exportación rápida de información proveniente de una base de datos. Versión 0,1,1

Centro de Capacitación en Tecnologías de la Información. Desarrollo de. diplomado

EXTENSIÓN DE UML PARA APLICACIONES WEB

FSx-Connector Guía rápida del Módulo pcron (Tareas Programadas) Créditos

Introducción a las Redes de Computadoras. Obligatorio


19. Packages o paquetes

TEMARIO. 4-Servlet Definición de servlet El Web Container y el ciclo de vida de los servlets El ciclo request- response.

Arquitectura. 1.- Aplicaciones Web. Definición. Arquitectura clásica. Contenidos. 1.- Aplicaciones Web

Arquitectura de sistema de alta disponibilidad

LABORATORIO DE RC: PRÁCTICA 4: IMPLEMENTACIÓN DE UN CLIENTE DE CORREO

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

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"

Curso de Spring Framework

Administración de Catálogo DNS CURSO: ADMINISTRADOR DE PORTALES

Sincronización del Servidor.

CAPÍTULO 3 VISUAL BASIC

El Internet tuvo origen en los Estados Unidos de Norte América cuando en un proyecto

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Técnico Superior en Programación con Java SE Standard Edition

Transcripción:

Sé diferente, intégrate Mca011 Manual ca011 CURSO JAVA, SERVER PAGES JSP Y SERVLETS Autor: Orlando Gutiérrez Fecha: 17/ 07 / 2013 Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 1

INDICE Pag. 3 Pag. 3 Pag. 5 Pag. 6 Pag. 6 Pag. 11 Pag. 14 Pag. 15 Pag. 17 Pag. 21 Pag. 23 Pag. 26 Pag. 27 Pag. 27 Pag. 28 Pag. 30 Pag. 31 Pag. 32 Pag. 34 Pag. 35 Pag. 35 Pag. 46 Pag. 49 Pag. 52 Pag. 54 Lección 1 Qué es un Servlet Lección 2 Ciclo de vida de un Servlet Lección 3 Compartiendo información en componentes Webs Lección 4 Inicializando un Servlet Lección 5 Requests y Responses Lección 6 Invocando recursos Web externos Lección 7 Accediendo el contexto Web Lección 8 Manteniendo el estado de un cliente Lección 9 Finalizando un Servlet Lección 10 Qué es JSP Lección 11 Ciclo de vida de una página JSP Lección 12 Objetos de JSP Lección 13 Variables Lección 14 Objetos Implícitos Lección 15 Operadores Lección 16 Funciones Lección 17 Tags personalizados Lección 18 Incluir Applets Lección 19 Estableciendo propiedades para grupos de JSPs Lección 20 Standard Tag Library (STL) Lección 21 Core Tags Lección 22 XML Tags Lección 23 Tags de Internacionalización Lección 24 SQL Tags Lección 25 Tags definidas por el usuario Pag. 57 Lección 26 Resumen sintaxis JSP (Scripts, Scriptles, Expresiones ) Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 2

LECCION 1 Qué es un Servlet Motivación: Con el desarrollo y la utilización de aplicaciones WEB surge la necesidad de mostrar y ofrecer contenido dinámico en lugar de páginas HTML con contenido estático. Los applets de Java son uno de los primeros intentos realizados para lograr este objetivo, pero se basan en el desarrollo sobre los clientes en la arquitectura cliente-servidor y no en los servidores. También la tecnología scripts CGI (Common Gateway Interface) fue empleada para generar contenido dinámico. Debido a la falta de escalabilidad de CGI así como las limitaciones sobre los scripts a desarrollar surgió la necesidad de desarrollar otras tecnologías para resolver estos inconvenientes. La tecnología de Java Servlet fue diseñada como un mecanismo portable para crear contenido web dinámico y orientado al usuario (dinámico, portable, escalable y personalizado) Qué es un servlet: Un servlet es una aplicación empleada para interactuar con el servidor de páginas o aplicaciones WEB utilizando el modelo de programación request-response. Desde el punto de vista de programación, es una clase del lenguaje de programación Java utilizada para extender (añadir nueva funcionalidad y aprovechar la ya existente) las capacidades de los servidores de páginas o aplicaciones WEB. Aunque los servlets pueden responder a cualquier tipo de requerimiento son primordialmente empleados en aplicaciones hosted por servidores WEB. La tecnología de Java servlets provee de clases para implementar servidores específicos para http. Los paquetes java que soportan la programación de los servlets, ofreciendo clases e interfaces java, son javax.servlet y javax.servlet.http. Todos los servlets deben implementar la interface servlet, la cual define un ciclo de vida del servlet y provee los métodos para implementarlo y manejarlo. Cuando se implementa un servicio genérico, la clase GenericServlet provista en el Java Servlet API puede ser utilizada o heredada (extendida en términos de Java). La clase HttpServlet provee métodos, como doget y dopost, para implementar servicios específicos a http. En este manual se cubrirán los conceptos y ejemplos necesarios para desarrollar servlets que generan respuestas a requerimientos de http. Conocimiento previo de http es necesario. LECCION 2 Ciclo de vida de un Servlet Introducción: El ciclo de vida de un servlet es administrado por el contenedor del servlet, el contenedor donde se encuentra la puesta en marcha del servlet. Cuando un requerimiento es asociado (mapeado) a un servlet, el contenedor ejecuta los siguientes pasos: 1. Si la instancia del servlet no existe, el contenedor Web: 1.1 Carga la clase servlet 1.2 Crea una instancia de la clase servlet 1.3 Inicializa la instancia del servlet a través del método init 2. Ejecuta el método service (un servicio), pasando los objetos request y response Cuando el contenedor de servlet requiera eliminar (remover) el servlet, éste finalizará el servlet empleando el método destroy de la clase servlet. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 3

Administrando y controlando los eventos de un ciclo de vida de un servlet: Se pueden monitorear los eventos asociados al ciclo de vida y responder a éstos a través de objetos listener. Los métodos de los listener se invocan cuando los eventos del ciclo de vida de un servlet ocurren. Para utilizar objetos listener, se debe definir la clase listener y especificar la clase listener. Definiendo la clase listener: La clase listener se debe definir como una implementación de la interfaz listener. En la siguiente tabla se muestran los eventos que pueden ser monitoreados y la interfaz correspondiente que debe ser implementada. Cuando un método de un listener es invocado, el recibe como parámetro un evento conteniendo la información del evento producido. Por ejemplo, los métodos de la interfaz HttpSessionListener reciben como parámetro un HttpSessionEvent el cual contiene un HttpSession. OBJETO EVENTO INTERFAZ LISTENER y CLASE EVENTO Web Context inicialización y destrucción javax.servlet.servletcontextlistener y ServletContextEvent Atributo añadido, eliminado o reemplazado javax.servlet.servletcontextattributelistener y ServletContextAttributeEvent Session Creación Invalidación Timeout Atributo añadido, eliminado o reemplazado javax.servlet.http.httpsessionlistener y HttpSessionEvent javax.servlet.http.httpsessionattributelistener y HttpSessionBindingEvent Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 4

Manejando errores: Cualquier número de excepciones pueden ocurrir cuando un servlet es ejecutado. El contenedor de web generará una página por defecto conteniendo el mensaje. Una excepción servlet ocurre cuando una excepción se produce, pero se debe indicar que el contenedor debe retornar una página específica de error para una excepción en particular. LECCION 3 Compartiendo información en componentes Webs Compartiendo información Componentes web, al igual que la mayoría de los objetos, interactúan y colaboran con otros objetos para realizar sus tareas. Existen varias alternativas para realizar ésto. Los componentes web pueden utilizar componentes privados como los JavaBeans, pueden compartir con objetos a través de atributos o métodos públicos, pueden emplear bases de datos y pueden invocar otros recursos web. La tecnología de servlets de Java ofrece un mecanismo que permite a un componente web invocar otros recursos web. Empleando Objetos con Alcance (Scope Objects) Los componentes web, colaborando entre sí, comparten información a través de objetos almacenados como atributos en objetos con alcance (Scope Objects). Estos atributos son accedidos a través de los métodos get o set de la clase representando el alcance. La siguiente tabla muestra estos objetos. Objeto con Clase Disponible en alcance web context javax.servlet.servletcontext Componentes web dentro de un web context session javax.servlet.http.httpsession Componentes web manejando un request perteneciente a una session request Subtipo de javax.servlet.servletrequest Componentes web manejando el request page javax.servlet.jsp.pagecontext La página jsp que crea el contexto Empleando Objetos con Alcance compartido ( multithreads ) En un servidor multitarea multithreaded es posible compartir recursos para ser accedidos de una manera concurrente. Más allá de los atributos de los objetos de alcance (scope object), lo recursos compartidos incluyen datos almacenados en memoria (contexto compartido) tales como instancias de clases y objetos externos como archivos, conexiones con las bases de datos y conexiones de redes. Acceso concurrente se presenta en muchas situaciones: Múltiples components web accediendo objetos almacenados en un web context Múltiples componentes web accediendo objetos almacenados en una session Múltiples tareas threads dentro de un componente web accediendo variables. Un contenedor web típicamente creará un thread para manejar cada request. Si se desea que una instancia de servlet maneje un solo request a la vez, el servlet puede implementar la interfaz SingleThreadModel. Si el servlet implementa esta interfaz, se garantiza que nunca más de un thread ejecutará concurrentemente el método de servicio del servlet. Un contenedor web puede implementar esta funcionalidad a través del acceso sincronizado a una instancia simple del servlet o manteniendo un pool de instancias de componentes web y controlando cada nuevo requerimiento como una instancia. Esta interfaz no controla los problemas de sincronización ocasionados cuando los componentes web acceden a recursos compartidos como variables static o objetos externos. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 5

LECCION 4 Inicializando un Servlet Una vez que el contenedor de web carga e instancia una clase del servlet y antes de comenzar a procesar los requerimientos de los clientes, el contenedor web inicializa el servlet. Este proceso puede ser personalizado permitiendo a un servlet realizar operaciones de inicialización como leer datos de configuración almacenados, inicializar recursos o ejecutar otras actividades que sólo se van a ejecutar una vez. Para personalizar la inicialización de un servlet se debe sobreescribir el método init de la clase servlet. Un servlet que no pueda completar este proceso de inicialización provocará una excepción del tipo UnavailableException. Ejemplo public class empleadoservlet extends HttpServlet { // campos de la clase //... int empid; // sobreescribiendo el método init public void init() throws ServletException { // código de inicialización // chequeo de condición de falla para disparar la excepción if (empid == -1) throw new UnavailableException("No existe ningún empleado"); LECCION 5 Requests y Responses Codificando métodos de servicios: Los servicios soportados por un servlets son implementados en los métodos de servicio service methods de un servlet genérico GenericServlet o de un servlet http HttpServlet o de cualquier protocolo específico que implemente la interfaz servlet. Estos métodos se conocen como los domethods y existen cinco posibilidades doget, dodelete, dooptions, dopost, doput y dotrace. En el resto de esta sección, el término método de servicio será utilizado para nombrar a cualquier método de la clase servlet que provee de un servicio a un cliente. El patrón general para un método de servicio es extraer información de un requerimiento (request), acceder a recursos externos y luego producir una respuesta (response) basada en esta información. En el caso de servlets http, el procedimiento correcto para producir la respuesta es primero llenar los encabezados de ésta (headers), luego producir un texto de salida (stream) para la respuesta y finalmente escribir el contenido de la respuesta en el texto de salida. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 6

Request: Un request contiene los datos envíados por el cliente al servlet. Todos los requests implementan la interfaz ServletRequest. Esta interfaz define métodos para acceder a la siguiente información: Parámetros: Los cuales son típicamente empleados para enlazar la información entre los clientes y los servlet Atributos de valor de los objetos: empleados típicamente para intercambiar información entre el contenedor del servlet y el servlet o entre otros servlets colaborativos Información conteniendo el protocolo utilizado para comunicar el request y el cliente y el servidor involucrado en el request Información relevante a la localización Por ejemplo en un servlet, el identificador de un empleado es incluido como un parámetro llamado Agregar de un request (más adelante se detallará cómo). El siguiente fragmento de código ilustra cómo emplear el método getparameter para obtener el identificador. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 7

Long idemp = request.getparameter("agregar"); También se puede extraer un stream de entrada del request e interpretar los datos (a través de un parsing). Para leer el stream como una cadena de caracteres se utiliza el objeto BufferedReader retornado por el método getreader del request. Para leer el stream como datos binarios se emplea el objeto ServletInputStream retornado por el método getinputstream. HTTP servlets reciben como parámetro un objeto HTTP request, HttpServletRequest, el cual contiene el URL del request, los encabezados del HTTP, y el string de consulta (query string), entre otros parámetros. El URL de un request HTTP se compone de las siguientes partes: http://<host>:<port><request path>?<query string> El campo request path se compone a su vez de los siguientes elementos: Context path: Una concatenación de un slash (/) con la raíz contextual de la aplicación de Java servlet. Servlet path: La sección del path que corresponde al alias del componente que activa el request. Este path comienza con un slash (/). Path info: La parte del request path que no es parte ni del context path ni del servlet path. Suponga que el contexto de la aplicación del servlet sea catemp y se tienen definidos los siguientes alias Patrón /emp/* /*.jsp Alias EmpServlet JspServlet Entonces ejemplos de request path se indican a continuación Request path Context Servlet path Path info path /catemp/emp/index.html catemp /emp /index.html /catemp/ayuda/ayuda.jsp catemp /ayuda/ayuda.jsp nill Strings de consulta ( query strings ) se componen de un conjunto de parámetros y valores de los parámetros. Parámetros individuales son tomados de un request con el método getparameter. Existen dos maneras de generar strings de consulta: Un string de consulta puede explícitamente aparecer en una página Web. Por ejemplo un html generado por un servlet podría contener el enlace Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 8

<a href="/datosemp/catemp?agregar=99999999">agregar a catalogo</a> Luego un servlet toma el parámetro agregar de la siguiente manera: Long idemp = request.getparameter("agregar"); Un string de consulta es añadido a un URL cuando un formulario con un método GET http es envíado. Por ejemplo, un servlet (llamado emisor) genera un formulario, luego un input de HTML (con un valor asociado) es añadido al URL que mapea a otro servlet (llamado receptor) y finalmente el servlet receptor extrae el valor empleando el método getparameter. Responses: Un response contiene información enviada del servidor hacia el cliente. Todas las response implementan la interfaz ServletResponse. Esta interfaz provee de métodos con la siguiente funcionalidad: Construir un stream de salida empleado para enviar data al cliente. Enviar datos en formato de carácter a través del objeto PrintWriter retornado por el método getwriter. Enviar datos en formato binario en un response con cuerpo MIME, utilizando el objeto ServletOutputStream retornado por el método getoutputstream. Mezclar datos binarios con datos de texto, por ejemplo para crear una response con múltiples partes. Indicar el tipo del contenido (por ejemlo, text/html), siendo retornado en el response. Un registro de los tipos de contenidos es administrado por Internet Assigned Numbers Authority (IANA) en: ftp://ftp.isi.edu/in-notes/iana/assignments/media-types Indicar cuando se coloca la salida en un buffer. Por defecto, cualquier contenido escrito en un stream de salida es enviado al cliente inmediatamente. Si se emplean buffers, el contenido es escrito completamente antes de ser enviado al cliente, dando mayor tiempo al servlet para colocar los códigos de estado, los encabezados o realizar un forward a otro recurso web. Actualizar información sobre localización. Objetos HTTP response, los cuales son de la clase HttpServletResponse, poseen campos representando encabezados HTTP tales como: Códigos de estado, los cuales son utilizados para indicar la razón por la cual un request no fue realizado satisfactoriamente. Cookies, empleadas para almacenar información específica de la aplicación en el cliente. En ocasiones, cookies son empleadas PARA mantener un identificador para realizar traza en una sección de usuario. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 9

A continuación se muestra el código en Java de un servlet que genera un response a través de una página HTML que despliega la información de un empleado. El servlet primero llena los encabezados del response, el tipo del contenido y el tamaño del buffer. El servlet almacena el buffer el contenido de la página. El método getwriter devuelve un objeto PrintWriter para el response. Para llenar el response, primero el servlet envía un requerimiento al servlet que genera los banners; esto permite incluir otros recursos en la respuesta. Luego el servlet obtiene la identificación del empleado y usa el identificador para obtener la información. Finalmente el servlet genera el HTML markup conteniendo la información del empleado y envía la respuesta al cliente invocando el método close sobre el PrintWriter. public class detempservlet extends HttpServlet { public void doget (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Establece los encabezados antes de acceder al Writer response.setcontenttype("text/html"); response.setbuffersize(8192); PrintWriter salida = response.getwriter(); // Escribe el response salida.println("<html>" + "<head><title>+ messages.getstring("descripcionempleado") +</title></head>"); // Obtiene el dispatcher; toma el banner a ser mostrado RequestDispatcher dispatcher = getservletcontext(). getrequestdispatcher("/banner"); if (dispatcher!= null) dispatcher.include(request, response); //Toma el identificador del empleado a mostrar long idemp= request.getparameter("idemp"); if (idemp!= null) { // informacion acerca del empleado try { // implementado en la clase BDEmp detemp de = BDEmp.obtDetEmp (idemp); Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 10

... //Mustra la información salida.println("<h2>" + de.obtnombre() + "</h2>" +... catch (Exception ex) { response.resetbuffer(); throw new ServletException(ex); salida.println("</body></html>"); salida.close(); LECCION 6 Invocando recursos Web externos Introducción: Los componentes web pueden invocar otros recursos Web de dos maneras: indirecto y directo. Un componente web invoca indirectamente otro recurso web cuando se coloca embebido en el contenido retornado a un cliente un URL que apunta a otro componente web. Un componente web también puede invocar directamente a otro recurso durante su ejecución. Existen dos posibilidades: a través de la inclusión del contenido de otro recurso o se puede realizar forward del requerimiento a otro recurso. Para invocar a un recurso disponible en el servidor donde se ejecuta un componente Web, primero se debe obtener el objeto RequestDispatcher empleando el método getrequestdispatcher("url"). Se puede obtener el objeto RequestDispatcher a partir de un request o a través del web context; sin embargo, los dos métodos se comportan ligeramente diferente. El método toma el camino ( path ) del recurso requerido como un parámetro. Un request puede tomar un camino relativo, pero el web context requiere un camino absoluto. Si el recurso no se encuentra disponible, o si el servidor no tiene implementado un objeto RequestDispatcher para el tipo de recurso, el método getrequestdispatcher devolverá null. El servlet programado debe estar preparado para manejar esta situación. Incluyendo otros recursos en el Response : Es muy frecuente y útil incluir otro recurso web, por ejemplo un banner o información de copyright, en la response enviada por un componente web. Para incluir otro recurso, se debe invocar el método include de un objeto RequestDispatcher: include(request, response); Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 11

Si el recurso es estático, el método include habilita las funciones programáticas de include en el lado del servidor. Si el recurso es un componente web, el efecto del método es enviar el request al componente web incluido, ejecutar el componente web, y luego incluir el resultado de la ejecución en el response producido por el servlet. Un componente web incluido tiene acceso al objeto request, pero se encuentra limitado en lo que puede realizar con el objeto response: Puede escribir en el cuerpo de un response y realizar commit del response No puede actualizar los headers o invocar a cualquier método (por ejemplo, setcoookie) que modifique los headers de la response. Por ejemplo, a continuación se muestra un un banner para una aplicación generado por servletbanner. Es importante destacar que los métodos doget y dopost son implementados porque el servletbanner puede ser despachado desde cualquiera de los dos métodos a través de un servlet que lo invoca. public class servletbanner extends HttpServlet { public void doget (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter salida = response.getwriter(); salida.println("<body bgcolor=\"#ffffff\">" + "<center>" + "<hr> <br> " + "<h1>" + "<font size=\"+3\" color=\"#cc0066\">banner s </font>" + <img src=\"" + request.getcontextpath() + "/imagen.gif\">" + "<font size=\"+3\" color=\"black\">ejemplo</font>" + "</h1>" + "</center>" + "<br> <hr> <br> "); public void dopost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter salida = response.getwriter(); salida.println("<body bgcolor=\"#ffffff\">" + "<center>" + "<hr> <br> " + "<h1>" + "<font size=\"+3\" color=\"#cc0066\">banner's </font>" + <img src=\"" + request.getcontextpath() + Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 12

"/imagen.gif\">" + "<font size=\"+3\" color=\"black\">ejemplo</font>" + "</h1>" + "</center>" + "<br> <hr> <br> "); Ahora, cada servlet que desee incluir el resultado de la ejecución del servletbanner, emplea el siguiente código: RequestDispatcher dispatcher = getservletcontext().getrequestdispatcher("/banner"); /* Directorio donde se encuentra el banner */ if (dispatcher!= null) dispatcher.include(request, response); Transfiriendo el control a otro componente Web: En una aplicación web podría ser necesario descomponer una tarea en sub-tareas (como en el caso de la programación estructurada); por ejemplo un componente web podría realizar un pre-procesamiento de un request y pasarle el control a otro componente web para generar el response. Para transferir el control a otro componente web, se debe invocar el método forward de un objeto RequestDispatcher. Cuando se le realiza forward a un request, el URL del request es actualizado hacia el path de la página a la cual se requiere realizar el forward. Si el URL original (antes del forward) es requerido para un futuro procesamiento, este puede ser almacenado como un atributo del request. En el siguiente ejemplo, se almacena la información del path del URL original, obtiene un RequestDispatcher del request, y luego realiza un forward a una página JSP otrorecurso.jsp. public class Despachador extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) { /* En el atributo pathurl, se podría utilizar cualquier nombre, se almancena el URL */ request.setattribute("pathurl", request.getservletpath()); RequestDispatcher desp = request. getrequestdispatcher("/otrorecurso.jsp"); if (desp!= null) desp.forward(request, response); public void dopost(httpservletrequest request, Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 13

... LECCION 7 Accediendo el contexto Web El contexto donde se ejecuta un componente web es un objeto que implementa la interfaz ServletContext. Se puede obtener un contexto web con el método getservletcontext. El contexto web ofrece métodos para acceder a: Parámetros de inicialización Recursos asociados con el contexto web Atributos de los objetos Capacidades de registro de bitácora (logging) En el siguiente ejemplo se muestra un filtro que cuenta el número de accesos (hits a una página) empleando la información del contexto. El valor incrementado del contador es almacenado con el método log del contexto. public final class filtrocontador implements Filter { private FilterConfig conffiltro = null; public void dofilter(servletrequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {... StringWriter sw = new StringWriter(); PrintWriter esc = new PrintWriter(sw); ServletContext contexto = filterconfig. getservletcontext(); Counter contador = (Counter)contexto.... getattribute("contadoraccesos"); /* Atributo definido */ esc.println("el numero de accesos es: " +... contador.inccounter()); contexto.log(sw.getbuffer().tostring());... LECCION 8 Manteniendo el estado de un cliente Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 14

Introducción: Muchas aplicaciones requieren que una serie de requerimientos de un cliente puedan ser asociados y relacionados. Por ejemplo, las aplicaciones de compras de libros en línea conservan el estado de la mercancía colocada en la shopping list de un cliente para ser utilizada en futuros request. Las aplicaciones web deben ser responsables de mantener este estado, llamado una "seccion", debido a que el protocolo http es stateless. Para soportar aplicaciones donde el manejo de estados es necesario, la tecnología de Java Servlet ofrece un API para administrar "sessions" y permite varias políticas para implementar las "sessions". Accediendo a una "session" Las "sessions" son representadas por un objeto HttpSession. Una "session" es accedida empleando el método getsession del objeto request. Este método retorna la "session" actual asociada con éste request, en caso de que el request no tenga "session" una nueva "session" es creada. Como el método getsession podría modificar el encabezado del response (si cookies son empleadas como la política de traza de las "sessions"), este debe ser llamado antes de obtener un PrintWriter o un ServletOutputStream. Asociando atributos con una "session" Los atributos de un objeto pueden ser asociados con una "session" empleando el nombre. Estos atributos son accesibles por cualquier componente web perteneciente al mismo contexto web y se encuentra manejando un request que es parte de la misma "session". Suponga tiene una aplicación para compra de libros en línea y se tiene almacenado el shopping list como un atributo de la "session". Esto permite guardar los datos del shopping list de un request y los mismos se encuentren disponibles para un request a futuro. public class servletlibrosenlinea extends HttpServlet { public void doget (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Obtiene la session y la shoppinglist HttpSession sess = request.getsession(); ShoppingList sl = (ShoppingList)sess. getattribute("lista");... // Determina el precio total de los libros en la lista double total = sl.gettotal(); Notificando objetos que se encuentran asociados con una "session" Dentro de una aplicación pueden ser notificados objetos web context objetos session listener, sobre los eventos producidos durante el ciclo de vida de un servlet. También es possible, notificar la los objetos sobre los eventos relacionados con una session como los siguientes: Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 15

Cuando un objeto es añadido a una sección o cuando un objeto es eliminado de una sección. Para recibir esta notificación, el objeto debe implementar la interfaz javax.http.httpsessionbindinglistener. Cuando la sección en la cual se asocia un objeto es activada o desactivada. Una sección será activada o desactivada cuando es movida entre máquinas virtuales o cuando es almacenada en almacenamiento externo (archivos o base de datos) o cuando es cargada a partir de almacenamiento externo. Para recibir esta notificación, el objeto debe implementar la interfaz javax.http.httpsessionbindinglistener. Administración de una sección Como un cliente HTTP no puede notificar la necesidad de finalizar una sección, cada sección tiene un timeout asociado de modo que los recursos puedan ser liberados reclaimed. El período de timeout puede ser accesado a través de los métodos getmaxinactiveinterval o setmaxinactiveinterval del objeto. Por ejemplo, en la aplicación de libros en línea se dispone de un servlet llamado servletfinalizar el cual realiza las operaciones de finalización de la aplicación. La sección se invalida utilizando el método invalidate. En este servlet se debe colocar la operación de cierre de la sección. public class servletfinalizar extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // Obtiene la sección HttpSession sess = request.getsession(); // Finaliza la sección sess.invalidate();... Traza de una sección Un contenedor web puede utilizar varias políticas para asociar una sección con un usuario de la aplicación. Todas estas estrategias requieren el pasaje de un parámetro identificador entre el cliente y el servidor. El identificador puede ser mantenido en el lado del cliente como una cookie o el componente web puede incluir el identificador en cada URL que es retornado al cliente. En una aplicación donde se emplean objetos de sección, el programador debe asegurar que la traza de la sección se encuentra habilitada permitiendo a la aplicación sobrescribir los URL cuando el cliente coloque en off las cookies. Esto se efectúa invocando al método encodeurl(url) en todos los URL retornados por un servlet. Este método incluye el id de la sección en el URL únicamente si las cookies están desactivadas, en caso contrario devuelve el URL sin cambios. A continuación se muestra parte del código del método doget del servletmostrarlista de la aplicación de libros en línea, el cual codifica tres URLs al incio de la página de despliegue: Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 16

salida.println("<p> <p><strong><a href=\"" + response.encodeurl(request.getcontextpath() + "/catalogo") + "\">" + messages.getstring("continua comprando") + "</a> " + "<a href=\"" + response.encodeurl(request.getcontextpath() + "/salir") + "\">" + messages.getstring("salir de la aplicación") + "</a> " + "<a href=\"" + response.encodeurl(request.getcontextpath() + "/lista?limpiar=limpiar") + "\">" + messages.getstring("limpiar Lista") + "</a></strong>"); El URL para el caso de salir se formaría de la siguiente manera: Si las cookies se encuentran desactivadas, la sección es codificada en el URL. http://localhost:8080/librosenlinea/salir; jsessionid=c0o7fszeb1 En caso de estar activadas, el URL simplemente contendría. http://localhost:8080/librosenlinea/salir LECCION 9 Finalizando un Servlet Introducción: Cuando un contenedor de servlet determina que un servlet debería ser removido de los servicios (por ejemplo cuando el contenedor requiere de recursos de memoria o cuando es finalizado shutdown ), el contenedor invoca el método destroy de la interfaz servlet. En este método, se liberan los recursos utilizados por el servlet y cualquier estado persistente es almacenado. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 17

public void destroy() { // se coloca el código Java para liberar los recursos Todos los métodos de servicios de un servlet deben ser completados cuando un servlet es removido, El servlet trata de asegurar esta culminación llamando al método destroy sólo después que todos los request de servicio han finalizado o cuando el período de time-out para el servlet finalice (cualquiera condición que ocurra primero). Cuando un servlet contenga request de servicios con largos tiempos de ejecución se recomienda utilizar las siguientes técnicas: Mantener traza de cuantos threads se encuentran ejecutándose concurrentemente con el método de servicio. Ofrecer un shutdown robusto programando el método destroy de modo tal que notifique a estos threads de larga duración sobre un posible shutdown o espere a que estos terminen. Programar los métodos de larga duración de modo de chequear por un shotdwon posible y en caso de ser necesario finalizar la ejecución, liberar los recursos y retornar el control de la ejecución. Realizando traza sobre servicios de request: Para realizar traza a servicios de request se debe agregar un campo en la clase servlet para contabilizar en número de métodos de servicio en ejecución. Este campo debe poseer métodos sincronizados para incrementar, decrementar y devolver el valor del contador. public class ejemploshutdown extends HttpServlet { private int contadorserv = 0;... // Métodos para el contador de servicios // Nótese que son sincronizados, multiples threads protected synchronized void metodoentrarservicio () { contadorserv++; protected synchronized metododejarservicio() { contadorserv--; protected synchronized int numservicios() { return contadorserv; Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 18

public void destroy() { // se coloca el código Java para liberar los recursos El método de servicio debe incrementar el contador de servicios cada vez que se ejecuta el servicio y decrementarlo cuando se termina la ejecución. En este caso se debe sobrescribir el método service de la subclase HttpServlet. Este método Nuevo debe llamar a super.service de modo de preservar la funcionalidad de los métodos originalmente descrita en los servicios. protected void service(httpservletrequest req, HttpServletResponse resp) throws ServletException,IOException { metodoentrarservicio(); try { // Ejecuta service del padre, httpservlet super.service(req, resp); finally { metododejarservicio(); Notificando métodos para el shutdown. Para implementar un shutdown robusto, el método destroy no debe liberar cualquier recurso compartido hasta que todos los request de servicio hayan sido completados. Una parte de este proceso consiste en chequear el contador de servicios indicado en el ejemplo anterior. La otra parte consiste en notificar a los métodos de servicio con largas ejecuciones que es tiempo de shutdown. Para realizar esta notificación otro campo es necesario. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 19

public class ejemploshutdown extends HttpServlet { private boolean tiemposhutdown;... //Métodos para tiemposhutdown protected synchronized void settiemposhutdown (boolean tsd) { tiemposhutdown = tsd; protected synchronized boolean istiemposhutdown () { return tiemposhutdown; Un ejemplo de un método destroy empleando estos campos para ofrecer un shutdown robusto se muestra a continuación: public void destroy() { /* Chequea si existen métodos de servicio en ejecución /* /* ejecutándose, en caso de ser cierto les notifica */ if (numservicios() > 0) { settiemposhutdown(true); /* Espera a que los servicios terminen*/ while(numservicios() > 0) { try { Thread.sleep(interval); catch (InterruptedException e) { Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 20

LECCION 10 Qué es JSP Introducción: La tecnología JSP (Java Server Pages) permite crear contenido Web con componentes estáticos y dinámicos. La tecnología JSP soporta las capacidades dinámicas de la tecnología de Java Servlet, pero además provee una manera natural para el manejo de contenido estático. Las principales características de la tecnología JSP son: Un lenguaje de programación para desarrollar páginas JSP, las cuales son documentos de texto para describir como procesar un request de un cliente para producir un response Constructores para acceder los objetos residentes en el servidor ( server-side objects ) Mecanismos para definir extensiones del lenguaje JSP Adicionalmente, la tecnología JSP ofrece un API utilizado para el desarrollo de contenedores Web. Qué es JSP: Una página JSP es un documento de texto conteniendo dos tipos de contenido: datos estáticos en una plantilla en cualquiera de los siguientes formatos HTML, SVG, WML, and XML; y elementos JSP para expresar el contenido dinámico. Páginas JSP: Una página JSP típica es una mezcla de texto en HTML con elementos JSP. Los documentos HTML poseen una estructura determinada por los tags (o marcadores) empleados, por ejemplo (<head>, <body>, entre otros) y por las instrucciones HTML para crear un formulario (<form>) y un menú (<select>). Las líneas en negrillas en el ejemplo, resaltan los constructores JSP: Directiva (<%@ page... %>), importan las clases en el paquete java.util, y actualizan el tipo de contenido a ser retornado por la página. El elemento <jsp:usebean... /> crea un objeto e inicializa una variable que apunta al objeto. Los scriptlets (<%... %> ). Las expressions (<%=... %>) The jsp:include element sends a request to another page (date.jsp) and includes the response in the response from the calling page. <%@ page import="java.util.*" %> <%@ page contenttype="text/html; charset=iso-8859-5" %> <html> <head><title>fechas Locales</title></head> Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 21

<body bgcolor="white"> <jsp:usebean id="locales" scope="application" class="flocales"/> <form name="flocal" action="indice.jsp" method="post"> <b>local:</b> <select name=local> <% String localsel = request.getparameter("local"); Iterator i = locales.obtnomblocales).iterator(); while (i.hasnext()) { String local = (String)i.next(); if (localsel!= null && localsel.equals(local)) { %> <option selected><%=local%></option> <% else { %> <option><%=local%></option> <% %> </select> <input type="submit" name="enviar" value="get Date"> </form> <jsp:include page="fecha.jsp"/> </body> </html> Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 22

LECCION 11 Ciclo de vida de una página JSP Introducción: Una página JSP atiende a requerimientos request como un servlet (un proveedor de servicios). Por lo tanto, el ciclo de vida y muchas de las capacidades de las páginas JSP (en particular el contenido dinámico) son determinadas por la tecnología de Java Servlet. Cuando un requerimiento request es mapeado con una página JSP, el request es primeramente manejado por un servlet especial que chequea si la página JSP ha sido modificada. Si la página ha sido modificada, la página JSP es traducida en una clase servlet y esta clase es compilada. Durante la fase de desarrollo, una de las ventajas de JSP sobre servlets es que el proceso de construcción es realizado automáticamente. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 23

Traducción y Compilación: Durante la fase de traducción, cada tipo de contenido (estático y dinámico) es tratado de manera diferente. Los datos estáticos (plantilla o template) son transformados en código para agrupar los datos en un stream para ser envíados al cliente. Los elementos JSP son tratados de la siguiente manera: : Las directivas son empleadas para controlar como el contenedor Web traduce y ejecuta una página JSP. Los elementos de scripting son insertados en la clase servlet de la página JSP.. Elementos de la forma <jsp:xxx... /> son convertidos en llamadas a métodos de los componentes JavaBeans o invocaciones al API de Java Servlet. Una vez efectuada la traducción, el código es compilado en Java. Tanto las fases de traducción como de compilación pueden ocasionar errores, los cuales son observados solo cuando la página es requerida por primera vez. Si un error ocurre durante la fase de traducción (por ejemplo el traductor consigue un elemento JSP mal escrito), el servidor retornará un ParseException y el código fuente de la clase servlet se construirá vacío o incompleto. La última línea de este archivo indicará el elemento JSP incorrecto. Si un error ocurre cuando la página JSP está siendo compilada (por ejemplo, existe un error de sintaxis en un scriptlet), el servidor retornará un JasperException y un mensaje que indica el nombre del servlet de la página JSP y la línea donde se produjo el error. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 24

Una vez que la página JSP ha sido traducida y compilada, el servlet de la página JSP ejecuta el ciclo de vida de un servlet descrito anteriormente: 1. Si la instancia del servlet de la página JSP no existe, el contenedor Web: 1.1 Carga la clase servlet de la página JSP 1.2 Crea una instancia de la clase servlet 1.3 Inicializa la instancia del servlet a través del método jspinit 2. Ejecuta el método _jspservice (un servicio), pasando los objetos request y response Cuando el contenedor de servlet requiera eliminar (remover) el servlet, éste finalizará el servlet empleando el método jspdestroy de la clase servlet. Buffer intermedio: Cuando una página JSP es ejecutada, la salida escrita en el objeto response es almacenada automáticamente en el buffer intermedio. El tamaño del buffer puede ser cambiado con la siguiente directiva.: <%@ page buffer="none xxxkb" %> Un buffer de tamaño grande permite almacenar más contenido antes de ser enviado al cliente, de esta manera la página JSP dispondrá de más tiempo para preparar los códigos de status y los encabezados de las páginas o realizar el forward de otro recurso web. Un buffer pequeño reduce la carga de memoria del servidor y permite al cliente recibir de una manera más rápida la información. Manejando errores: Cualquier número de excepciones pueden dispararse cuando una página JSP es ejecutada. Para especificar que un contenedor web redireccionará el control a un página de errores si una excepción ocurre, se debe incluir la siguiente directiva al inicio de la página JSP: <%@ page errorpage="file_name" %> Ejemplo, <%@ page errorpage= pagerror.jsp %> El comienzo del archivo de manejo de errores, por ejemplo pagerror.jsp, indica que se encuentra sirviendo errores con la siguiente directiva: <%@ page iserrorpage="true false" %> Esta directiva permite que el objeto de la clase javax.servlet.jsp.jspexception se encuentre disponible en la página del error. Por lo tanto, se puede manipular la información explicativa de la causa del error. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 25

Inicializando y finalizando una página JSP: El proceso de inicialización de una página JSP puede ser personalizado customize para leer datos de configuración de un archivo o base de datos, inicializar recursos, y ejecutar otras acciones de inicialización. Esta personalización se realiza sobreescribiendo el método jspinit de la interfaz JspPage. LECCION 12 Objetos de JSP Contenido estático: En una página JSP se crea contenido estático simplemente editando el archivo en el formato de texto deseado. El tipo de formato puede ser uno de los siguientes: HTML, WML, y XML. El formato por defecto es HTML. Si se requiere utilizar otro formato distinto a HTML, se puede incluir una directiva de página con el atributo contenttype asignado al tipo de formato al principio de la página JSP. Por ejemplo, si se desea contenido en una página WML (Wireless Markup Language), se necesita incluir la siguiente directiva: <%@ page contenttype="text/vnd.wap.wml"%> Objetos en páginas JSP: En una página JSP se crea contenido dinámico mediante el acceso de objetos del lenguaje de programación Java. Dentro una página JSP se puede acceder una variedad de objetos, incluyendo los componentes de JavaBeans o los enterprise beans. La tecnología JSP automáticamente ofrece un conjunto de objetos (implícitos, pero también pueden ser creados objetos específicos de la aplicación). Objetos específicos de la aplicación: Cuando sea posible, el código la aplicación debería ser encapsulado en objetos de modo que los diseñadores de la página JSP se enfoquen en la capa de presentación y no en la de lógica del negocio. Los objetos pueden ser creados en el lenguaje de Programación Java por programadores expertos en el lenguaje así como en el acceso a Bases de Datos y en otros servicios. Existen cuatro maneras de crear objetos en una página JSP: instancias de clases en la clase servlet de la página JSP son creados en declaraciones y utilizados a través de scriptlets y expresiones. Variables locales en la clase servlet de la página JSP son creados y utilizados a través de scriptlets y expresiones. Atributos del alcance objetos (scope objects) son creados y utilizados a través de scriptlets y expresiones. Componentes Java Beans pueden ser creados y accedidos dentro de elementos JSP. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 26

LECCION 13 Variables Las variables en JSP son declaradas en las declaraciones JSP. Una declaración en JSP es empleada para declarar variables y métodos en el lenguaje de scripts de la página. La sintaxis para una declaración es como sigue: <%! Declaración en el lenguaje de scripting %> Cuando el lenguaje de scripting es el lenguaje de programación Java, las variables y los métodos en las declaraciones JSP se convierten en declaraciones en la clase servlet de la página JSP. En el siguiente ejemplo se crea una variable de instancia llamada cat1 de la clase Catalogo. <%! private Catalogo cat1; %> LECCION 14 Objetos Implícitos Los objetos implícitos son creados por automáticamente por el contenedor de los servlets (se llama por lo general contenedor Web) manipulando información particular de un requerimiento (request), página (page) o aplicación (application). Muchos de estos objetos son definidos por la tecnología de Java servlets manejada por JSP. A continuación se muestra una tabla conteniendo estos objetos Objetos Implícitos Variable Clase Descripción application javax.servlet.servletcontext El contexto para las páginas JSP (servlets) y para cualquier componente Web contenido en la misma aplicación. config javax.servlet.servletconfig Información de inicialización para los servlets de las páginas JSP. exception java.lang.throwable Sólo puede ser accedido desde una página de errores. out javax.servlet.jsp.jspwriter El stream de salida. page pagecontext java.lang.object javax.servlet.jsp.pagecontext La instancia del servlet de la página JSP del requerimiento actual. No es muy utilizada por los autores de páginas JSP. El contexto para la página JSP. Provee un API único para manejar varios de los atributos cuyo alcance puede ser compartido. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 27

Este API es usado extensivamente cuando son implementados los tag handlers. request response Subclase de javax.servlet.servletrequest Subclase de javax.servlet.servletresponse El objeto request provocando (disparando) la ejecución de la página JSP. La respuesta response enviada al cliente. No es muy utilizada por los autores de páginas JSP. session javax.servlet.http.httpsession El objeto para manejar las secciones de los clientes LECCION 15 Operadores Los Operadores son los constructores de programación más básicos en los lenguajes de programación. En esta sección se utilizará el termino operador o JSP scripting elements (elementos de script) de manera indiferente. Los elementos de script son utilizados para crear y acceder a los objetos, definir los métodos y controlar el flujo de control de las operaciones. En JSP los elementos de Script son los operadores soportados por Java, Java soporta API especiales para el manejo de JSP. Uno de los objetivos de la tecnología de JSP es separar los datos estáticos de las páginas del código necesario para generar el código dinámico. Por lo tanto el uso de los elementos de script es la manera más adecuada de lograr este objetivo. La utilización de los scripts también puede ser sustituida por el empleo de los tags personalizados. La tecnología de JSP permite al contenedor de la página el soporte de cualquier lenguaje de scripting con acceso a objetos Java. Si se desea utilizar otro lenguaje diferente al lenguaje por defecto (Java) se debe especificar la siguiente directiva al principio de la página JSP. <%@ page language="scripting language" %> Los elementos de script son convertidos a instrucciones del lenguaje de programación en la clase representando al servlet de JSP, el programador debe indicar las clases y los paquetes utilizados por la página JSP. Si el lenguaje de programación es Java, se deben importar las clases o los paquetes con la siguiente directiva de página: <%@ page import="nombrepaquete.*, nombreclase" %> Por ejemplo una página.jsp requiere utilizar los paquetes java.util y java.lang. <%@ page import="java.util.*, java.lang.*" %> Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 28

En JSP también se pueden utilizar expresiones. Una expresión es utilizada para insertar el valor de una expresión del lenguaje de la página JSP (en la mayoría de los casos Java), convertida en un string, en el stream enviado al cliente. En el caso de utilizarse Java, la expresión es transformada en una instrucción convirtiendo el valor de la expresión en un objeto String y los inserta explícitamente en el objeto de salida. La sintaxis de una expresión es como se indica: <%= expressión en el lenguaje de scripting %> El siguiente ejemplo devuelve el número de ítems contenidos en un carro de compras: <%@ page import="java.util.*" %> <%@ page contenttype="text/html; charset=iso-8859-5" %> <html> <% int num = carro.getnumerodeitems (); if (num > 0) { %> Las expresiones son utilizadas para insertar el valor de la variable num (por ejemplo) en la salida de un stream : <font size="+2"> <%=messages.getstring("contenidoscarro")%> <%=num%> <%=(num==1? <%=messages.getstring("item")%> : <%=messages.getstring("contenidoscarro "))%></font> La tercera modalidad de manejar operadores en JSP es a través de los scriptles. Un scriptlet en JSP es utilizado para contener cualquier fragmento de código válido por el lenguaje utilizado en la página. La sintaxis de un scriptlet es la siguiente: <% %> instrucciones del lenguaje Si el lenguaje de scripting es Java, el scriptlet es transformado en un fragmento de instrucciones en lenguaje Java y es insertado en un método de servicio del servlet de la página JSP. Todos los derechos reservados, prohibida la reproducción, Instituto Gala de Venezuela 29