Professional Documents
Culture Documents
4 JavaEE
INDICE
Sun ofrece una implementación de todas estas especificaciones llamada JavaEE SDK, a
pesar que el JavaEE SDK es una implementación, esta es solo una muestra ofrecida por
Sun para utilizar las funcionalidades de las especificaciones JavaEE, aunque funcionaría
en un Sistema de Producción su licencia lo prohibe.
En Términos Microsoft
JavaEE pudiera ser considerado el rival de .NET ofrecido por Microsoft el problema es que
esta forzado a utilizar una sola implementación, a diferencia de implementaciones JavaEE
donde puede elegir entre diversos productos de distintas empresas. (.NET es lo que
anteriormente se conocía como DNA)
Es importante hacer mención que los componentes del diagrama anterior son de
múltiples especificaciones y plataformas (no únicamente de JavaSE o JavaEE) pero sin
embargo, son necesarios para el desarrollo total de la aplicación.
4.2.1 HTML
La etiqueta para incluir comentarios dentro del código es <!-- comentarios -->. Su uso es
ampliamente recomendado.
La etiqueta <BODY> presenta una serie de atributos que permiten establecer una serie de
características generales para todo el documento, como puede ser el color del texto, de los
enlaces o del fondo del documento.
Sin embargo, es mucho más cómodo indicar el nombre del color en inglés, como black,
teal, blue, navy, lime, white, purple, yellow, olive, reg, marron, gray, fucsia, green, silver y
aqua.
Una opción muy usada en los documentos HTML es una imagen como fondo del
documento. Esta imagen se mostrará debajo del texto y de las imágenes de contenido en
la página. Si no es lo suficientemente grande como para rellenar todo el fondo del
documento será reproducida tantas veces como sea necesario hasta completarlo.
<HTML>
<HEAD>
<TITLE>Ejemplo 1 de documento HTML</TITLE>
</HEAD>
<!-- El color de fondo es gris, el texto negro, los enlaces aparecerán en azul, los visitados en violeta y
los cuando se activen. -->
<BODY BGCOLOR=Gray TEXT =Black LINK =Blue VLINK=Fucsia ALINK =Red>
</BODY>
</HTML>
Me gustaría
Para citar un texto ajeno. Se suele
reencarnarme
implementar dejando márgenes
<BLOCKQUOTE> ... en las yemas de
tanto a izquierda como a derecha,
</BLOCKQUOTE> los dedos de
razón por la que se usa
Warren Beatty
habitualmente.
(Woody Allen)
Otra etiqueta muy asociada a lo anterior es <BR>. Esta etiqueta sólo tiene marca inicial y
se usa para cambiar de línea. Las cabeceras se emplean para dividir los documentos en
secciones, o más concretamente, para marcar los títulos de estas secciones. La etiqueta
que define la cabecera es <Hn> y </Hn>, donde n varía de 1 a 6.
Etiqueta Resultado
Para poder separar partes del documento, la etiqueta <HR> dibuja una barra horizontal
que divide la pantalla con un grosor y una longitud determinada a través de sus
atributos. La siguiente lista de etiquetas mostrada se utiliza para dar formato a textos:
<HTML>
<HEAD>
<TITLE>Listado ejemplo de uso de FONT</TITLE>
</HEAD>
<BODY>
<FONT SIZE=6 FACE=Cosmic COLOR=Blue>Este texto está en azul con una fuente Cosmic
</FONT>
<BR>
<FONT SIZE=2 FACE=Arial COLOR=Black>Este otro en negro con la fuente Arial</FONT>
<BR>
<FONT SIZE=5 FACE=Dauphin COLOR=Red>Para terminar <FONT COLOR=blue>un <FONT
COLOR=Red>ejemplo<FONT COLOR=Navy> más<FONT COLOR=Black>. Final. </FONT>
</BODY>
</HTML>
Enlaces.
Otra función importante en el lenguaje HTML es el hipertexto. El hipertexto consiste en
poder moverse a través de un documento o varios seleccionando zonas de texto o
imágenes programadas para tal fin.
Cualquier elemento de un documento HTML puede ser definido como enlace, y una
imagen, un párrafo de texto o un bloque de texto pueden ser definidos como enlaces a
otros puntos del documento o de la red.
Como norma general un enlace se distingue del texto normal porque éste aparece
resaltado en otro color (generalmente azul) y subrayado. Si se trata de una imagen con
borde, éste aparecerá de color azul. Concretando un enlace será toda zona de la página
Web sobre la que al pasar el cursor este cambia de aspecto, y aparecerá en la parte
inferior del navegador el lugar al que se accederá.
<A NAME=”iniciodocumento”>
Hemos marcado como inicio un punto en el comienzo del documento. Ahora nos situamos
al final del mismo y añadimos otra línea de código.
<A NAME=”finaldocumento”>
Una vez marcadas las distintas zonas del documento vamos a situar en el mismo los
enlaces que nos permitirán ir de arriba debajo de la página con un clic y viceversa. En el
inicio y final del documento añadiremos las siguientes líneas respectivamente:
<!-- Esta línea debe situarse al comienzo del cuerpo del documento -->
<A HREF=”#finaldocumento”>Pulsa aquí para ir al final de esta página </A>
<!-- Esta línea debe situarse al final del cuerpo del documento -->
<A HREF=”#iniciodocumento”>Pulsa aquí para ir al principio de esta página </A>
<HTML>
<HEAD>
<TITLE>Ejemplo Documento con enlaces</TITLE>
</HEAD>
<!-- El color de fondo es gris, el texto negro, los enlaces aparecerán en azul, los visitados en
violeta y los cuando se activen. -->
<BODY BGCOLOR=Gray TEXT =Black LINK=Blue VLINK=Fucsia ALINK =Red>
<A NAME="iniciodocumento">
<A REF=”secundaria.html#opciones”> Pulsa aquí para ver las opciones en la otra página </A>
<HTML>
<HEAD>
Imágenes.
Para incluir imágenes en documentos HTML se emplea la etiqueta <IMG> junto con el
tributo imprescindible: SRC. Un atributo muy útil es ALT. Su cometido es introducir una
descripción de la imagen con la finalidad de que los usuarios que acceden a la página con
un navegador en modo texto puedan hacerse una idea de las imágenes que contiene. Es
importante conocer los distintos formatos gráficos que podemos utilizar. Si se especifica
un formato no reconocido por HTML, el navegador simplemente lo ignora y no se visualiza
la imagen en el documento. Los formatos permitidos son: GIF, JPEG, XBM o PNG.
El atributo ALIGN permite alinear la imagen respecto al texto en función de los siguientes
valores principales:
TOP
Coloca el punto más alto de la imagen coincidiendo con más alto de la
línea de texto actual.
MIDDLE Alinea el punto medio (en altura) de la imagen con la base del texto.
BOTTOM(Por
Alinea el punto más bajo de la imagen con la base del texto.
defecto)
LEFT Coloca la imagen a la izquierda del texto.
RIGHT Coloca la imagen a la derecha del texto.
Sonidos.
La capacidad de reproducir sonido en una página Web viene determinada en gran medida
por el navegador que estemos utilizando. Una página puede tener sonidos incorporados,
ya sea como música de fondo que se ejecuta automáticamente al cargar la página o bien
para que sea activada por el usuario.
Un atributo fundamental es LOOP. Será usado para especificar el número de veces que se
debe ejecutar el archivo de sonido. LOOP puede tener un valor numérico que indicará el
número de veces que se reproducirá el archivo o valor infinite, que reproducirá el archivo
indefinidamente.
<HTML>
<HEAD>
<TITLE>Ejemplo Manejo de Sonido</TITLE>
</HEAD>
</HTML>
Netscape tiene otra etiqueta para gestionar el sonido (entre otras cosas): <EMBED>
asociada al atributo SRC. A diferencia del navegador de Explorer, Netscape presenta en
pantalla una ventana de control de audio con las funciones de avance, retroceso,
ejecución y Stop.
Tablas.
El tag que define la tabla es <TABLE> </TABLE>, toda la tabla debe estar entre estas dos
etiquetas, y las opciones que se apliquen aquí tendrán efecto sobre toda la tabla.
Con <TR> </TR> se define cada una de las líneas de la tabla, los atributos que se
empleen en esta etiqueta tendrá efecto en toda la línea. En resumen, tendremos tantos
<TR>...</TR> como filas tenga la tabla y, como la tabla de arriba tiene dos filas, entonces
tiene dos tags <TR>...</TR>. También podemos utilizar las etiquetas <TH> y </TH> para
definir el inicio y final de una celda de cabecera. El contenido de ésta aparecerá en negrita
y centrado.
Dentro de cada fila indicamos una celda concreta con las etiquetas <TD> </TD>, entre
las cuales pondremos lo que queremos que este en esa celda (puede ser texto, imágenes o
cualquier otra cosa).
<HTML>
<HEAD>
<TITLE>Ejemplo de dimensionado de celdas</TITLE>
</HEAD>
</HTML>
Frames.
Los frames es la herramienta que el HTML pone a nuestra disposición para presentar
varias páginas en una sola. Lo primero que necesitamos es una página "madre" que
dividiremos en viñetas (los frames propiamente dichos), y una serie de páginas "hijas",
que serán las que ocupen esas viñetas.
Formularios.
Los formularios son el sistema del que nos provee el HTML para enviar información desde
una página web a algún programa u otro recurso en un ordenador remoto. Esto quiere
decir que un formulario no sirve de mucho si no tenemos un lugar al que enviarlo.
La etiqueta principal que tenemos que tener en cuenta es el que crea un formulario. Esta
deberá englobar en su interior a todos los elementos que formen parte de este:
<FORM>...</FORM>
Dentro debemos colocar algunos elementos, llamados controles, como cuadros de texto,
botones, ect. Para crear cada uno de estos elementos tenemos la directiva <INPUT>, que
tiene un atributo obligatorio: TYPE, que es el que determina el tipo concreto de control de
que se trata:
"SUBMIT" crea el clásico botón "Enviar", y es el que, al ser pulsado, envía los datos del
formulario a la dirección especificada en ACTION.
"RESET" inserta un botón "Borrar" que, al ser pulsado, elimina los datos de todos los
controles del formulario que lo contiene.
"BUTTON" crea un botón.
"TEXT" crea un cuadro para insertar una línea de texto.
"PASSWORD" hace lo mismo que "TEXT", pero los caracteres que se escriban no se verán
en pantalla, sino que serán sustituidos por asteriscos.
"CHECKBOX" crea una caja de verificación.
"RADIO" crea un "Radio Button", algo parecido a lo anterior, pero con la sutil diferencia
de que suelen ser redondos, estar agrupados, y que, dentro de un grupo solo puede
aparecer uno marcado cada vez.
"IMAGE" funciona exactamente igual que "SUBMIT", pero aquí puedes especificar una
imagen para que aparezca en lugar del aburrido botón tradicional.
"HIDDEN" no muestra nada, absolutamente nada. Si se pone dentro del formulario, este
se verá exactamente igual. ¿Y para que sirve entonces? Pues para enviar al programa en
el servidor, siempre que se use ese formulario, información que pueda ser necesaria, pero
que no necesite cambiarse ni verse.
"FILE" sirve para crear un cuadro de diálogo mediante el que enviar un archivo desde tu
disco duro. No está soportado en todos los navegadores.
4.2.2 XML
Antes de nada conviene repasar su historia y precedentes. La versión 1.0 del lenguaje
XML es una recomendación del W3C desde Febrero de 1998, pero se ha trabajado en ella
desde un par de años antes. Está basado en el anterior estándar SGML (Standard
Generalized Markup Language, ISO 8879), que data de 1986, pero que empezó a gestarse
desde principios de los años 70, y a su vez basado en el GML creado por IBM en 1969.
Esto significa que aunque XML pueda parecer moderno, sus conceptos están más que
asentados y aceptados de forma amplia. Está además asociado a la recomendación del
W3C DOM (Document Object Model), aprobado también en 1998. Éste no es más que un
modelo de objetos (en forma de API) que permite acceder a las diferentes partes que
pueden componer un documento XML o HTML.
SGML proporciona un modo consistente y preciso de aplicar etiquetas para describir las
partes que componen un documento, permitiendo además el intercambio de documentos
entre diferentes plataformas. Sin embargo, el problema que se atribuye a SGML es su
excesiva dificultad; baste con pensar que la recomendación ocupa unas 400 páginas.
Durante el año 1998 XML ha tenido un crecimiento exponencial, y ello se refiere sobre
todo a sus apariciones en los medios de comunicación de todo tipo, menciones en páginas
web, soporte software, tutoriales, etc.
Una pregunta que ha acudido a muchos de nosotros es: ¿será XML el sustituto de HTML,
que tan bien conocemos, dominamos, amamos y odiamos? No. Esa es la respuesta,
básicamente XML no ha nacido sólo para su aplicación en Internet, sino que se propone
como lenguaje de bajo nivel (a nivel de aplicación, no de programación) para intercambio
de información estructurada entre diferentes plataformas. Se puede usar en bases de
datos, editores de texto, hojas de cálculo, y casi cualquier cosa que podamos pensar. Sin
ir más lejos, algunos lenguajes, definidos en XML, recorren áreas como la química y la
física, las matemáticas, el dibujo, tratamiento del habla, y otras muchas.
Se puede suponer de este modo que XML constituye la capa más baja dentro del nivel de
aplicación, sobre el que se puede montar cualquier estructura de tratamiento de
documentos, hasta llegar a la presentación. Y así podemos ver la compartición de
documentos entre dos aplicaciones como intercambio de datos a ese nivel:
Estructura.
Lo primero que debemos saber es que hay dos tipos de documentos XML: válidos y bien
formados. Éste es uno de los aspectos más importantes de este lenguaje, así que hace
falta entender bien la diferencia:
• Bien formados: son todos los que cumplen las especificaciones del lenguaje respecto
a las reglas sintácticas que después se van a explicar, sin estar sujetos a unos
elementos fijados en un DTD (luego veremos lo que es un DTD). De hecho lo s
documentos XML deben tener una estructura jerárquica muy estricta, de la que se
hablará más tarde, y los documentos bien formados deben cumplirla.
• Válidos: Además de estar bien formados, siguen una estructura y una semántica
determinada por un DTD: sus elementos y sobre todo la estructura jerárquica que
define el DTD, además de los atributos, deben ajustarse a lo que el DTD dicte.
DTD es una definición de los elementos que puede haber en el documento XML, y su
relación entre ellos, sus atributos, posibles valores, etc. De hecho DTD está por Document
Type Definition, o Definición de Tipo de Documento. Es una especie de definición de la
gramática del documento, en definitiva. Más adelante hablaré de cómo se incluye un DTD
en un documento XML, pero lo importante ahora es entender que cuando se procesa
cualquier información formateada mediante XML, lo primero es comprobar si está bien
formada, y luego, si incluye o referencia a un DTD, comprobar que sigue sus reglas
gramaticales. Hay pues diferencia entre los parsers que procesan documentos XML sin
comprobar que siguen las reglas marcadas por un DTD (sólo comprueban que está bien
formado), que se llaman parsers no validadores, y los que sí lo hacen, que son parsers
validadores (comprueba que además de bien formado se atiene a su DTD y es válido).
Veamos un ejemplo simple de un documento XML:
Lo primero que tenemos que observar es la primera línea. Con ella deben empezar todos
los documentos XML, ya que es la que indica que lo que la sigue es XML. Aunque es
opcional, es más que recomendable incluirla siempre. Puede tener varios atributos (los
campos que van dentro de la declaración), algunos obligatorios y otros no:
Los documentos XML son sensibles a mayúsculas, esto es, en ellos se diferencia las
mayúsculas de las minúsculas. Por ello <FICHA> sería una etiqueta diferente a <ficha>.
Además todos los espacios y retornos de carro se tienen en cuenta (dentro de las
etiquetas, en los elementos).
Hay algunos caracteres especiales reservados, que forman parte de la sintáxis de XML: <,
>, &, " y '. En su lugar cuando queramos representarlos deberemos usar las entidades
<, >, &, " y ' respectivamente.
Los valores de los atributos de todas las etiquetas deben ir siempre entrecomillados. Son
válidas las dobles comillas (") y la comilla simple (').
Pasando al contenido en sí, vemos etiquetas que nos recuerdan a HTML, y que contienen
los datos. Es importante diferenciar entre elementos y etiquetas: los elementos son las
entidades en sí, lo que tiene contenido, mientras que las etiquetas sólo describen a los
elementos. Un documento XML está compuesto por elementos, y en su sintaxis éstos se
nombran mediante etiquetas. Hay dos tipos de elementos: los vacíos y los no vacíos. Hay
varias consideraciones importantes a tener en cuenta al respecto:
Toda etiqueta no vacía debe tener una etiqueta de cerrado: <etiqueta> debe estar seguida
de </etiqueta>. Esto se hace para evitar la aberración (en el buen sentido de la palabra) a
la que habían llegado todos los navegadores HTML de permitir que las etiquetas no se
cerraran, lo que deja los elementos sujetos a posibles errores de interpretación.
<ficha><nombre>Angel</ficha></nombre>
Y sí lo es sin embargo:
<ficha><nombre>Angel</nombre> </ficha>.
Los elementos vacíos son aquellos que no tienen contenido dentro del documento. Un
ejemplo en HTML son las imágenes. La sintaxis correcta para estos elementos implica que
la etiqueta tenga siempre esta forma: <etiqueta/>.
Incluir dentro del documento una referencia al documento DTD en forma de URI
(Universal Resource Identifier, o identificador universal de recursos) y mediante la
siguiente sintáxis:
En este caso la palabra SYSTEM indica que el DTD se obtendrá a partir de un elemento
externo al documento e indicado por el URI que lo sigue, por supuesto entrecomillado.
<?xml version="1.0"?>
<!DOCTYPE ficha [
<!ELEMENT ficha (nombre+, apellido+, direccion+, foto?)>
<!ELEMENT nombre (#PCDATA)>
<!ATTLIST nombre sexo (masculino|femenino) #IMPLIED>
<!ELEMENT apellido (#PCDATA)>
<!ELEMENT direccion (#PCDATA)>
<!ELEMENT foto EMPTY>
]>
<ficha>
<nombre>Angel</nombre>
<apellido>Barbero</apellido>
<direccion>c/Ulises, 36</direccion>
</ficha>
La forma de incluir el DTD directamente como en este ejemplo pasa por añadir a la
declaración <!DOCTYPE y después del nombre del nombre del tipo de documento, en vez
de la URI del DTD, el propio DTD entre los símbolos '[' y ']'. Todo lo que hay entre ellos
será considerado parte del DTD.
A la hora de indicar los elementos descendientes (los que están entre paréntesis) vemos
que van seguidos de unos caracteres especiales: '+', '*', '?' y '|'. Sirven para indicar qué
tipo de uso se permite hacer de esos elementos dentro del documento:
+ : uso obligatorio y múltiple; permite uno o más elementos de ese tipo dentro del
elemento padre, pero como mínimo uno.
* : opcional y múltiple; puede no haber ninguna ocurrencia, una o varias.
? : opcional pero singular; puede no haber ninguno o como mucho uno.
| : equivale a un OR, es decir, da la opción de usar un elemento de entre los que forman
la expresión, y solo uno.
Sabremos del elemento ficha que puede contener los siguientes elementos: un nombre y
un apellido como mínimo, pero puede tener más de uno de cada; opcionalmente puede
incluirse una o varias direcciones, pero no es obligatorio; opcionalmente también se
puede incluir una única foto; y por fin, pueden incluirse, aunque no es obligatorio en
ninguno de los dos casos, uno o más teléfonos o uno o más números de fax.
Vemos que es un documento muy sencillo, con una profundidad de 2 niveles nada más:
el elemento raíz ficha, y sus hijos nombre, apellido, direccion, foto. Es obvio que cuanta
más profundidad, mayor tiempo se tarda en procesar el árbol, pero la dificultad siempre
será la misma gracias a que se usan como en todas las estructuras de árbol algoritmos
recursivos para tratar los elementos.
<pieza>MiPieza
<color>Rojo</color>
</pieza>
<pieza color="Rojo">Mipieza</pieza>
¿Qué diferencia habría entre ambos? Queda a discreción del diseñador el decidir entra
ambas, pero hay que tener en cuenta que si se usa la primera forma, el procesador tiene
que bajar al siguiente nivel del árbol de elementos para saber el color de MiPieza,
No confundir Java con JavaScript. Java es un lenguaje completo que permite crear
aplicaciones independientes, mientras que JavaScript es un lenguaje que funciona como
extensión de HTML. Es un lenguaje de programación orientado a objetos, diseñado para
el desarrollo de aplicaciones cliente-servidor a través de Internet.
Para diferenciar dentro de un documento lo que es JavaScript del resto HTML dispone de
una etiqueta que define el inicio y el final del código JavaScript. Para definir el inicio de
un programa o código se debe utilizar la etiqueta <SCRIPT LANGUAGE=”JavaScript”> y
determinar el final con </SCRIPT>. El atributo LANGUAGE indica al navegador el
lenguaje script utilizado.
<HTML>
<HEAD>
<TITLE> Ejemplo de creación de Objetos </TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
function Computador(marca,cpu,memoria) {
this.marca = marca;
this.cpu = cpu;
this.memoria = memoria;
}
</SCRIPT>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>Calculadora</TITLE>
<SCRIPT>
<!--
var total = 0
var UltimaOperacion = "+"
var NuevoNumero = true
function IntroduceNumero(Digito) {
var Formu = Digito.form
if (NuevoNumero) {
BorraNumero(Formu)
NuevoNumero = false
}
Formu.display.value = Formu.display.value + Digito.name
}
function Limpiar(Formu) {
total = 0
UltimaOperacion = "+"
Formu.display.value = ""
}
function BorraNumero(Formu) {
Formu.display.value = ""
}
function Calcula(Operacion) {
var Formu = Operacion.form
var Expresion = total + UltimaOperacion + Formu.display.value
UltimaOperacion = Operacion.value
total = eval(Expresion)
Formu.display.value = total
NuevoNumero = true
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM>
<TABLE BORDER=1>
<TR><TD COLSPAN=4><INPUT TYPE=text NAME=display VALUE=""
onFocus="this.blur();"></TD></TR>
<TR>
4.4.1. 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:
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)
esta información y separar los valores de los distintos campos. Después ya puede realizar
su tarea específica: escribir en un fichero o en una base de datos, realizar una búsqueda
de la información solicitada, realizar comprobaciones, etc. De ordinario, el programa CGI
termina enviando al cliente (el navegador desde el que se envió el formulario) una página
HTML en la que le informa de las tareas realizadas, le avisa de si se ha producido alguna
dificultad, le reclama algún dato pendiente o mal tecleado, etc. La forma de enviar esta
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.
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.
Tradicionalmente en los programas CGI se ejecuta un proceso distinto para cada
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.
• 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.
• 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).
• 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.
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) es una tecnología que nos permite mezclar HTML estático con
HTML generado dinámicamente (plantilla para una página web que emplea código Java
para generar un código HTML dinámicamente). Simplemente escribimos el HTML regular
de la forma normal, usando cualquier herramienta de construcción de paginas Web que
usemos normalmente. Encerramos el código de las partes dinámicas en unas etiquetas
especiales, la mayoría de las cuales empiezan con “<%” y terminan con “%>”. Muchas
páginas Web que están construidas con programas CGI son casi estáticas, con la parte
dinámica limitada a muy pocas localizaciones. Pero muchas variaciones CGI, incluyendo
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:
Las páginas JSP se ejecutan en un componente del servidor conocido como contenedor
JSP, que las traduce a servlets Java equivalentes. Normalmente daremos al archivo una
extensión .jsp, y normalmente lo instalaremos en el mismo sitio que una página Web
normal. Aunque lo que escribamos frecuentemente se parezca a un HTML normal en vez
de un servelt, detrás de la escena, la página JSP se convierte en un servlet normal, donde
el HTML estático simplemente se imprime en el stream de salida estándard asociado con
el método service del servlet. Esto normalmente sólo se hace la primera vez que se solicita
la página, y los desarrolladores pueden solicitar la página ellos mismos cuando la
instalan si quieren estar seguros de que el primer usuario real no tenga un retardo
momentáneo cuando la página JSP sea traducida a un servlet y el servlet sea compilado y
cargado. Muchos servidores Web nos permiten definir alias para que una URL que parece
apuntar a un fichero HTML realmente apunte a un servelt o a una página JSP. El
siguiente esquema nos muestra el diagrama de ubicación de los JSP en un ambiente
basado en servidor de aplicaciones JavaEE.
<HTML>...<HTML>
Motor de Servlets
Servicios J2EE
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.
Como las páginas JSP son similares al HTML, tienen mayor compatibilidad con las
herramientas de desarrollo Web (Dreamweaver por ejemplo).
• 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 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 String message = “Hello World”;
%>
<table>
<tr>
<td width=250 align=”center”>
<h1><%= message %></h1>
</td>
</tr>
</table>
</body>
</html>
A continuación se presentan los elementos del lenguaje junto a una breve descripción de
su uso.
Ejemplo:
Directivas JSP:
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
Por varias razones , los Enterprise beans simplifican el desarrollo de grandes aplicaciones
distribuidas.
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.
• La aplicación tiene gran variedad de clientes. Con solo algunas líneas de código
los clientes remotos pueden localizar los Enterpise Beans. Estos clientes pueden
ser delgados, variantes y numerosos.
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.
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.
Bean de Mensaje
Un bean de mensaje (message-driven bean) es un tipo de enterprise bean que permite a
las aplicaciones JavaEE procesar mensajes de manera asíncrona. Los mensajes deben ser
enviados por cualquier componente JavaEE (una aplicación del cliente, otro enterprise
bean o un componente Web) o por una aplicación JMS o un sistema que no utilice
tecnología JavaEE.