• No se han encontrado resultados

D04 Servlet JSP EJB

N/A
N/A
Protected

Academic year: 2019

Share "D04 Servlet JSP EJB"

Copied!
12
0
0

Texto completo

(1)

Concepto JavaServerPages (JSP) y Servlets

Servlets.

En su concepción más tradicional, los servidores HTTP se limitaban a enviar una página HTML cuando el usuario la requería directamente o hacía clic sobre un enlace. La interactividad de este proceso era mínima, ya que el usuario podía pedir ficheros, pero no enviar sus datos personales de modo que fueran almacenados en el servidor u obtuviera una respuesta personalizada.

Desde esa primera concepción del servidor HTTP como mero servidor de ficheros HTML el concepto ha ido evolucionando en dos direcciones complementarias:

1. Añadir más inteligencia en el servidor, y 2. Añadir más inteligencia en el cliente.

Las formas más extendidas de añadir inteligencia a los clientes (a las páginas HTML) han sido Javascript y las applets de Java.

Los caminos seguidos para añadir más inteligencia en el servidor HTTP tienen gran relevancia. La primera y más empleada tecnología ha sido la de los programas CGI (Common Gateway Interface), unida a los formularios HTML.

Los formularios HTML permiten de alguna manera invertir el sentido del flujo de la información. Con algunos campos con cajas de texto, botones de opción y de selección, el usuario puede definir sus preferencias o enviar sus datos al servidor. Cuando en un formulario HTML se pulsa en el botón Enviar (o nombre equivalente, como Submit) los datos tecleados por el cliente se envían al servidor para su procesamiento.

¿Cómo recibe el servidor los datos de un formulario y qué hace con ellos? Éste es el problema que tradicionalmente han resuelto los programas CGI. Cada formulario lleva incluido un campo llamado Action con el que se asocia el nombre de programa en el servidor. El servidor arranca dicho programa y le pasa los datos que han llegado con el formulario. Existen dos formas principales de pasar los datos del formulario al programa CGI:

1. Por medio de una variable de entorno del sistema operativo del servidor, de tipo String (método GET)

(2)

página HTML al cliente es a través de la salida estándar (stduot o System.out), que de ordinario suele estar asociada a la pantalla. La página HTML tiene que ser construida elemento a elemento, de acuerdo con las reglas de este lenguaje. No basta enviar el contenido: hay que enviar también todas y cada una de las tags.

Es importante resaltar que estos procesos tienen lugar en el servidor. Esto a su vez puede resultar un problema, ya que al tener múltiples clientes conectados al servidor, el programa CGI puede estar siendo llamado simultáneamente por varios clientes, con el riesgo de que el servidor se llegue a saturar. Téngase en cuenta que cada vez que se recibe un requerimiento se arranca una nueva copia del programa CGI.

El objetivo de este capítulo es el estudio de la alternativa que Java ofrece a los programas CGI: los servlets, que son a los servidores lo que los applets a los browsers. Se podría definir un servlet como un programa escrito en Java que se ejecuta en el marco de un servicio de red, (un servidor HTTP, por ejemplo), y que recibe y responde a las peticiones de uno o más clientes.

Un servlet de forma intuitiva se puede definir como un programa independiente de plataforma que aporta la misma funcionalidad a la programación en el lado del servidor que tradicionalmente han realizado la interfaz CGI. Así como los applets son clases de Java que se ejecutan en el cliente, los Servlets son clases de Java que se ejecutan en el servidor.

Son clases de Java que extienden de la clase Servlet y pueden ser llamadas en una petición http. Cuando una clase Servlet es invocada, el JSP Engine (un módulo del servidor web) la ejecuta y devuelve al cliente una salida HTML.

Con respecto a esta tecnología aporta numerosas ventajas que citaremos a continuación:

• Independencia de la plataforma. (La tan anhelada premisa del “write once run

everywhere” aun no totalmente conseguida).Esto proporciona un menor esfuerzo de codificación con respecto a soluciones dependientes del servidor web y de la plataforma como ISAPI o NSAPI.

• Ejecución en paralelo de múltiples peticiones por una sola instancia del servlet.

(3)

petición lo que conlleva una gradual degradación del rendimiento y una necesidad de recursos muy elevada. En un servlet todas las peticiones se atienden en el mismo proceso por distintos hilos y una vez que se ha cargado el servlet este permanece en memoria hasta que se reinicie el servidor o hasta que se le diga lo contrario con lo cual las subsiguientes peticiones son mas rápidas al encontrarse el programa ya cargado en memoria.

• Un servlet puede ejecutarse(incido en esto puede no es necesario) en una sandbox

o recinto de seguridad parecido al modelo que se se sigue con los applets. Debido a esto pueden colocarse servlets en servidores dedicados a hosting sin que la empresa tema por la integridad del servidor y la seguridad de las aplicaciones.

• Los servlets pueden llamar a otros servlets, e incluso a métodos concretos de otros servlets. De esta forma se puede distribuir de forma más eficiente el trabajo a realizar. Por ejemplo, se podría tener un servlet encargado de la interacción con los clientes y que llamara a otro servlet para que a su vez se encargara de la comunicación con una base de datos. De igual forma, los servlets permiten redireccionar peticiones de servicios a otros servlets (en la misma máquina o en una máquina remota).

• Los servlets pueden obtener fácilmente información acerca del cliente (la permitida por el protocolo HTTP), tal como su dirección IP, el puerto que se utiliza en la llamada, el método utilizado (GET, POST, ...), etc.

• Permiten además la utilización de cookies y sesiones, de forma que se puede guardar información específica acerca de un usuario determinado, personalizando de esta forma la interacción cliente-servidor. Una clara aplicación es mantener la sesión con un cliente.

• Los servlets pueden actuar como enlace entre el cliente y una o varias bases de datos en arquitecturas cliente-servidor de 3 capas (si la base de datos está en un servidor distinto).

• Asimismo, pueden realizar tareas de proxy para un applet. Debido a las restricciones de seguridad, un applet no puede acceder directamente por ejemplo a un servidor de datos localizado en cualquier máquina remota, pero el servlet sí puede hacerlo de su parte.

• Al igual que los programas CGI, los servlets permiten la generación dinámica de

código HTML dentro de una propia página HTML. Así, pueden emplearse servlets para la creación de contadores, banners, etc.

(4)

Ejemplo de un servlet básico:

import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

import java.util.*;

public class ServletBasico extends HttpServlet{

public void init(ServletConfig config) throws SerlvetException { // Siempre se pasa el objet ServletConfig a la superclase super.init(config);

}

// Proceso HTTP Get de la petición

public void doGet(HttpSerlvetRequest peticion,HttpserlvetResponse respuesta) throws SerlvetException, IOException {

respuesta.setContentType("text/html"); PrintWriter out = respuesta.getWriter(); out.println("<html>");

out.println("<head><title>Servlet Basico</title></head>"); out.println("<body>");

// Imprime en pantalla el método enviado por la petición

out.println("El método de la petición es" + peticion.getMethod()+"\n"); out.println("</body></html>");

out.close(); }

// Proceso HTTP Post de la petición

public void doPost(HttpSerlvetRequest peticion,HttpServletResponse respuesta) throws ServletException,IOException {

respuesta.setContentType("text/html"); PrintWriter out = respuesta.getWriter(); out.println("<html>");

out.println("<head><title>Servlet Basico</title></head>"); out.println("<body>");

// Imprime en pantalla el método enviado por la petición

out.println("El método de la petición es" + peticion.getMethod()+"\n"); out.println("</body></html>");

out.close(); }

Java Server Pages (JSP).

(5)

los servlets, hacen que generemos la página completa mediante nuestro programa, incluso aunque la mayoría de ella sea siempre lo mismo. JSP nos permite crear dos partes de forma separada. Aquí tenemos un ejemplo:

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”> <HTML>

<HEAD><TITLE>Welcome to Our Store</TITLE></HEAD> <BODY>

<H1>Welcome to Our Store</H1> <SMALL>Welcome,

<!-- User name is “New User” for first-time visitors --> <% out.println(Utils.getUserNameFromCookie(request)); %> To access your account settings, click

<A HREF=”Account-Settings.html”>here.</A></SMALL> <P>

Regular HTML for all the rest oif the on-line store’s Web page. </BODY>

</HTML>

(6)

Además de el HTML normal, hay tres tipos de construcciones JSP que se incluirán en una página: elementos de script, directivas y acciones. Los elementos de script nos permiten especificar código Java que se convertirá en parte del servlet resultante, las directivas nos permiten controlar la estructura general del servlet, y las acciones nos permiten especificar componentes que deberían ser usuados, y de otro modo controlar el comportamiento del motor JSP.

¿Cuáles son las Ventajas de JSP?

• Contra Active Server Pages (ASP). ASP es una tecnología similar de Microsoft. Las ventajas de JSP estan duplicadas. Primero, la parte dinámica está escrita en Java, no en Visual Basic, otro lenguaje específico de MS, por eso es mucho más poderosa y fácil de usar. Segundo, es portable a otros sistemas operativos y servidores Web.

• Contra los Servlets. JSP no nos da nada que no pudierámos en principio hacer con un servlet. Pero es mucho más conveniente escribir (y modificar) HTML normal que tener que hacer un billón de sentencias println que generen HTML. Además, separando el formato del contenido podemos poner diferentes personas en diferentes tareas: nuestros expertos en diseño de páginas Web pueden construir el HTML, dejando espacio para que nuestros programadores de servlets inserten el contenido dinámico.

(7)

es mejor porque nos permite usar servlets en vez de un programa separado para generar las partes dinámicas. Además, SSI, realmente está diseñado para inclusiones sencillas, no para programas “reales” que usen formularios de datos, hagan conexiones a bases de datos, etc.

• Contra JavaScript. JavaScript puede general HTML dinámicamente en el cliente. Este una capacidad útil, pero sólo maneja situaciones donde la información dinámica está basada en el entorno del cliente. Con la excepción de las cookies, el HTTP y el envió de formularios no están disponibles con JavaScript. Y, como se ejecuta en el cliente, JavaScript no puede acceder a los recursos en el lado del servidor, como bases de datos, catálogos, información de precios, etc.

• No necesita una configuración especial por parte del cliente.

• Tienen pleno acceso a la tecnología Java –capacidad de reconocimiento del trabajo en red, subprocesos y conectividad a base de datos- sin las limitaciones de los applets del cliente.

Como las páginas JSP son similares al HTML, tienen mayor compatibilidad con las herramientas de desarrollo Web (Dreamweaver por ejemplo).

Como funciona JSP

La página JSP pasa por tres etapas en la evolución de su código:

Código fuente JSP. Este código es el que realmente escribe el desarrollador. Se encuentra en un archivo de texto con extensión .jsp y consiste en una mezcla de código de plantilla HTML, instrucciones en lenguaje Java, directivas JSP y acciones que describen como generar una página Web para dar servicio a una petición concreta.

Código fuente Java. El contenedor JSP traduce el código fuente JSP al código fuente de un servlet Java equivalente. Este código fuente se guarda en un área de trabajo y suele ser útil en el proceso de depuración de errores.

Clase Java compilada. Como cualquier otra clase Java, el código del servlet generado se compila en código de bytes en un archivo .class, preparado para ser cargado y ejecutado.

El contenedor de JSP administra cada una de estas etapas de la página JSP automáticamente, basándose en la situación temporal de cada archivo. Como respuesta a la petición HTTP, el contenedor comprueba si el archivo fuente .jsp ha sufrido modificaciones desde que el código fuente .java se compiló por última vez.

(8)

El contenido de una página o archivo JSP se hace muy familiar y legible para una persona con conocimientos de HTML y Java. Sólo necesitaría aprender algunas directivas o tags propias del lenguaje JSP y conocer el API de algunos objetos para estar preparado para desarrollar casi cualquier proyecto. Un ejemplo simple de una página JSP se presenta en el siguiente ejemplo en la columna derecha está el código del archivo .jsp. En la izquierda está el resultado que aparece en el browser del cliente.

Hello World

<%@ page info="un primer ejemplo de JSP" %> <html>

<head><title>Hello, World</title></head> <body bgcolor="#ffffff">

<%!

String message = “Hello World”; %>

<table> <tr>

<td width=250 align=”center”> <h1><%= message %></h1> </td>

</tr> </table> </body> </html>

(9)

A continuación se presentan los elementos del lenguaje junto a una breve descripción de su uso.

Comentario

visible <!-- comment [<%= expression %>] --> Genera un comentario que es enviado al cliente en la salida HTML. Se ve en el código de la página pero no aparece visible.

Comentario escondido

<%-- comment [<%= expresión %>] --%>

Genera un comentario que sólo es visible en el código de la página JSP.

No es enviado al cliente. Este tipo de comentarios se utilizan para documentar el código o dejar instrucciones a otros desarrolladores. Declaración

de variables globales

<%! declaración %> Genera un comentario que es enviado al cliente en la salida HTML. Se ve en el código de la página pero no aparece

visible.

Expresión <%= expresión %> Retorna el valor de una expresión válida. Se utiliza para imprimir el valor

de variables en la salida de la página.

Código <% fragmento de código %> Contiene una pieza de código en lenguaje Java. Se utiliza para hacer cualquier tarea necesaria como conectarse a una base de datos o evaluar condiciones.

Ejemplo:

black blue green

<%@ page info="segundo ejemplo de JSP" %> <html>

<head><title>Ejemplo - tags</title></head> <body bgcolor="#ffffff">

<%-- Declaración de variables %> <%! Vector colors = new Vector(); %> <%

colors.addElement(“black”); colors.addElement(“blue”); colors.addElement(“green”); %>

(10)

<table>

<% for (int i=0; i<colors.size(); i++) { %> <tr>

<td width=250 align=”center”> <!-- Color número <%= i %> -->

<font color=”<%= colors.elementAt(i); % >”>

<%= colors.elementAt(i); %> </font>

</td> </tr> <% } %> </table> </body> </html>

Directivas JSP:

Directiva include

<%@ include file=”path relativo” %> Incluye el contenido (texto) de un archivo al JSP actual. Hace el equivalente de un

cut and paste de el archivo

incluido. La inclusión se realiza al momento de la generación del Servlet. Es muy utilizado para lograr modularidad.

<jsp:forward> <jsp:forward page={path relativo | <% = expresión %>} />

Redirecciona una petición http a otro archivo. La salida que llegará al cliente es la salida del archivo al que se redirigió la petición y no la salida del que hizo la redirección.

<jsp:include> <jsp:include page={path relativo | <% = expresión %>} />

Incluye datos desde un archivo sin ser ejecutados o compilados. Se hace al momento de la petición.

Enterprise JavaBeans (EJB)

(11)

EJB nos dan la posibilidad de crear la lógica de negocio como componentes reusables, y poderlos usar en cualquier tipo de servidor que soporte la especificación EJB. El programar EJBs en lugar de aplicaciones enteras en JAVA permite ahorrarse las preocupaciones de seguridad, pool de conexiones, gestión transaccional, control de estado, persistencia o multithreading. Al desarrollar EJB el esfuerzo, y una vez superada la curva de aprendizaje inicial, el esfuerzo se centra en programar la lógica de negocio.

Un EJB corre dentro de un container o contenedor en un servidor de aplicaciones (al igual que los servlets y JSP). El contenedor lo facilita el fabricante del servidor de aplicaciones y es el interface entre el EJB desarrollado y el servidor escogido. Los contenedores proporcionan independencia al EJB del servidor en el que corre.

Por varias razones , los Enterprise beans simplifican el desarrollo de grandes aplicaciones distribuidas.

1. El contenedor de EJB ofrece servicios a nivel de sistema a los enterprise beans. El desarrollador de beans se puede concentrar en solucionar los problemas del negocio.

El contenedor de EJB (no el desarrollador) es responsable de servicios a nivel de sistema como el manejo transaccional y control de seguridad.

2. Los beans (no los clientes) contienen la aplicación de la lógica del negocio. El desarrollador de las pantallas del cliente puede enfocarse únicamente a la presentación, no debe preocuparse de codificar rutinas para integrar reglas de negocio o acceso a la base de datos. Como consecuencia los clientes son mas delgados y beneficia a aquellos limitados en recursos de computo.

3. Los EJB son portables. El integrador de aplicaciones puede construir nuevas con los beans ya existentes. (Estas aplicaciones solo pueden correr con apoyo de un servidor JavaEE ).

Cuando usar Enterprise Beans

Se debe considerar el uso de EJB si la aplicación tiene los siguientes requerimientos:

• La aplicación es escalable. Para atender un número creciente de usuarios se debe distribuir los componentes de la aplicación en varias máquinas. No solo pueden correr en diferentes máquinas, su ubicación es transparente para los clientes.

• Las transacciones son requeridas para la integridad de datos. Los Enterprise Beans soportan transacciones el mecanismo que maneja el acceso concurrente a objetos compartidos.

(12)

Tipos de Enterprise Beans

Los tipos de Beans manejados son los siguientes:

Tipo de Enterprise Bean Propósito

Session (Sesión) Realiza una tarea del cliente

Entity (Entidad) Representa una entidad del negocio en un almacenamiento persistente

Message-Driven (Mensaje) Actúa como un listener de JAVA el Message Service API procesa mensajes asíncronos.

Bean de Sesión

Un bean de sesión representa un cliente simple dentro del servidor JavaEE. Para acceder una aplicación que es implementada en el servidor, el cliente invoca los métodos del bean de sesión. El bean de sesión ejecuta el trabajo para su cliente. Liberando al cliente de complejidades al ejecutar tareas del negocio dentro del servidor.

Como su nombre lo intuye, un bean de session es similar a una sesión interactiva. Un bean de sesión no es compartido debe tener un solo cliente, de la misma forma que una sesión interactiva puede tener un solo usuario. Al igual que una sesión interactiva el bean de sesión no es persistente (Esto es, sus datos no son salvados en la base de datos) cuando el cliente termina, el bean de sesión aparenta su terminación y no esta asociado más con el cliente.

Bean de Entidad

Un bean de entidad representa un objeto del negocio en un mecanismo persistente de almacenamiento. Algunos ejemplos de objetos de negocio son clientes, ordenes y productos. En el JavaEE SDK, el mecanismo de almacenamiento persistente es una base de

datos relacional. Típicamente, cada bean de entidad tiene una tabla asociada en una base de datos relacional, y cada instancia del bean corresponde a un registro de la tabla.

Debido a que el estado de un bean de entidad es salvado en un medio de almacenamiento., este es persistente. Persistencia significa que el estado del bean de entidad existe durante todo el tiempo de vida de la aplicación o del proceso de servidor JavaEE. Los datos en una base de datos son persistentes porque ellos existen a pesar de que se de shutdown al servidor o aplicaciones de bases de datos.

Bean de Mensaje

Referencias

Documento similar

Conocido es el caso de Mortimer Ternaux, autor de una Historia de la Revolución, publicada en el siglo XIX, o el todavía más significativo de Edgar Quinet, quien hace «la crítica de

Schmitt considerará pues la petición de indemnidad como punto de parti- da de una evolución que a lo largo del Segundo Imperio irá reflejando la pa- radójica victoria del

La oferta existente en el Departamento de Santa Ana es variada, en esta zona pueden encontrarse diferentes hoteles, que pueden cubrir las necesidades básicas de un viajero que

Esta formación se produce mediante el doctorado (13 alumnos, lo que significa el 32% de los encuestados), diferentes másteres entre los que destacan de nuevo el de Profesorado

El útil de más empleo, tanto para podar co- mo para cortar esquejes y demás necesario pa- ra injertar, es la tijera de fiodar (fig.. Conviene tener una gran- de, de 2o a 25

4.- Másteres del ámbito de la Biología Molecular y Biotecnología (9% de los títulos. Destaca el de Biotecnología Molecular de la UB con un 4% y se incluyen otros

PLAN DE NEGOCIOS DE UN RESTAURANTE QUE POSTERIORMENTE SIRVA COMO BASE PARA LA CREACIÓN DE UNA FRANQUICIA COLOMBIANA, COMERCIALIZADORA DE ALITAS DE POLLO A DOMICILIO Y EN PUNTO

1. LAS GARANTÍAS CONSTITUCIONALES.—2. C) La reforma constitucional de 1994. D) Las tres etapas del amparo argentino. F) Las vías previas al amparo. H) La acción es judicial en