……..
Arquitecturas Cliente–servidor Normalmente para consultar,
modificar y administrar los datos de una organización El
programa cliente era la interfaz inteligente entre el usuario y
la base de datos Ing Manfredi G. Ing Salina Walter. Ing Sabella
Matias. Ing Olmedo Marcelo Servidor de BD cliente
Inconvenientes de las arquitecturas de 2 capas Aplicaciones
monolíticas difíciles de mantener Toda la
inteligencia está en el cliente Los servidores son
sólo servidores de datos Distribución del
código que cambia Poca reusabilidad del código No
está orientado al desarrollo de componentes No se puede
usar de cualquier lado Poca seguridad Mucho tráfico de
datos Ing Manfredi G. Ing Salina Walter. Ing Sabella Matias. Ing
Olmedo Marcelo
Arquitecturas basadas en la web El cliente es el browser La
aplicación misma está en el servidor web Puede
existir un servidor de aplicaciones Ing Manfredi G. Ing Salina
Walter. Ing Sabella Matias. Ing Olmedo Marcelo Servidor de BD
Servidor web Servidor de aplicaciones cliente
Ventajas del esquema de n-capas Clara separación de las
funciones de control de la interfaz y presentación de
datos con la lógica de la aplicación Reusabilidad
de componentes Independencia de la interfaz del cliente y la
arquitectura de datos Mejores posibilidades de balancear la carga
Uso de protocolos abiertos Ing Manfredi G. Ing Salina Walter. Ing
Sabella Matias. Ing Olmedo Marcelo
¿Qué es la World-wide Web ? WWW es un sistema de
hipermedia interactivo desarrollado sobre Internet. Hipermedia:
La idea de hipermedia es la de juntar texto, imágenes,
audio y vídeo dentro de un mismo envoltorio llamado
documento Además, incluye referencias a otros documentos
del mismo tipo Ing Manfredi G. Ing Salina Walter. Ing Sabella
Matias. Ing Olmedo Marcelo
Internet Pero la web necesita un protocolo para intercambiar
documentos de hipermedia Para ello hay una conversación
entre el que pide un documento Y el que lo “sirve”
(invisible para el usuario del browser) Esta conversación
se realiza según el protocolo HTTP
Arquitectura Web Ing Manfredi G. Ing Salina Walter. Ing Sabella
Matias. Ing Olmedo Marcelo Para abrir una página Web en un
navegador, normalmente se teclea el correspondiente URL o se
“clickea” sobre en el “link” oportuno.
Una vez que se solicita esta petición mediante el
protocolo HTTP y la recibe el servidor Web, éste localiza
la página Web en su sistema de directorios y la
envía de vuelta al navegador que la solicitó,
¿ Qué necesito para “levantar” mi sitio
web ? Ing Manfredi G. Ing Salina Walter. Ing Sabella Matias. Ing
Olmedo Marcelo El Servidor Web El servidor Web es un programa que
corre sobre el servidor que escucha las peticiones HTTP que le
llegan y las satisface. Dependiendo del tipo de la
petición, el servidor Web buscará una página
Web o bien ejecutará un programa en el servidor. De
cualquier modo, siempre devolverá algún tipo de
resultado HTML al cliente o navegador que realizó la
petición. El servidor Web va a ser fundamental en el
desarrollo de las aplicaciones del lado del servidor, server side
applications, que vayamos a construir, ya que se
ejecutarán en él.
¿De dónde lo saco, cómo lo instalo ? Hay
varios gratis que se pueden bajar de la Internet JBOSS, APACHE
TOMCAT Para instalarlo basta echar a correr el archivo bajado
(doble click) Obviamente, el computador debe estar en la internet
y tener una dirección IP fija y un nombre de dominio Ing
Manfredi G. Ing Salina Walter. Ing Sabella Matias. Ing Olmedo
Marcelo
J2EE Es un conjunto de especificaciones que implementan una
arquitectura abierta de n-capas sobre la web Incluye muchos
elementos que se habían desarrollado en forma
“independiente” anteriormente Interoperabilidad
gracias a XML y SOAP Ing Manfredi G. Ing Salina Walter. Ing
Sabella Matias. Ing Olmedo Marcelo
Los principales elementos de la arquitectura J2EE Cliente Puede
ser un programa “stand alone”, un applet dentro de un
browser o el browser mismo que contacta un sevlet, un jsp o un
web service Contenedor web Contiene (y sabe como hacerlos correr)
las páginas html, los servlets, JSP y web services
Contenedor de aplicaciones Contiene y administra a los EJB
Servidor de base de datos Ing Manfredi G. Ing Salina Walter. Ing
Sabella Matias. Ing Olmedo Marcelo
Qué va dónde Servidor de BD Servidor web Servidor
de aplicaciones Cliente: Browser web Servidor web y de
aplicaciones Comunicación por medio de JDBC Páginas
HTML –Java Script -JSP Enterprise Java Beans Portlets y Web
services
J2EE icluye Acceso a bases de datos (JDBC) Utilización de
directorios distribuidos (JNDI) Acceso a métodos remotos
(RMI, CORBA, SOAP) Funciones de correo electrónico Ing
Manfredi G. Ing Salina Walter. Ing Sabella Matias. Ing Olmedo
Marcelo
El protocolo Http Hypertext transfer protocol Especifica la forma
como el cliente pide las cosas al servidor y cómo el
servidor las manda al cliente Define un lenguaje de
comunicación con reglas sintácticas y gramaticales
Ing Manfredi G. Ing Salina Walter. Ing Sabella Matias. Ing Olmedo
Marcelo
Interaccion browser-servidor Cuando se ingresa una URL al
navegador web pidiendo un archivo http://servidor/index.jsp el
navegador manda la siguiente información: GET /index.jsp
HTTP 1.1 Accept: image/gif, image/jpeg, application/vnd.msexcel,
application/vnd.ms-powerpoint, application/msword,
Accept-Language: de Accept-Encoding: gzip, deflate User-Agent:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host:
localhost:8000 Connection: Keep-Alive <- linea en blanco La
primera línea indica el archivo que el cliente solicita y
la versión de HTTP. Luego viene una lista de los tipos
MIME que puede aceptar como retorno, lenguaje del sistema,
codificación, browser que utiliza, etc (lo que manda como
encabezado depende de la version de http y del browser). Al final
se manda una línea en blanco que determina el final de la
cabecera HTTP. Ing Manfredi G. Ing Salina Walter. Ing Sabella
Matias. Ing Olmedo Marcelo
Un servidor web básico Ing Manfredi G. Ing Salina Walter.
Ing Sabella Matias. Ing Olmedo Marcelo import java.net.*; import
java.io.*; public class ServerWeb { public static void
main(String[] args) throws Exception { ServerSocket ss = new
ServerSocket(8000); while(true) { Socket s = ss.accept();
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
BufferedReader in = new BufferedReader(new
InputStreamReader(s.getInputStream())); String l; while (true) {
l = in.readLine(); if (l.equals("")) break;
System.out.println(l); } //aqui se debería mandar el
contenido del archivo pedido out.println("
ready"); s.close(); } } } Esto es sólo para ver
qué viene del browser Esto es sólo para ver
qué viene del browser
Un servidor web básico Ing Manfredi G. Ing Salina Walter.
Ing Sabella Matias. Ing Olmedo Marcelo import java.net.*; import
java.io.*; public class ServerWeb { public static void
main(String[] args) throws Exception { ServerSocket ss = new
ServerSocket(8000); while(true) { Socket s = ss.accept();
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
BufferedReader in = new BufferedReader(new
InputStreamReader(s.getInputStream())); String l; while (true) {
l = in.readLine(); if (l.equals("")) break;
System.out.println(l); } //aqui se debería mandar el
contenido del archivo pedido out.println("
ready"); s.close(); } } } Esto es sólo para ver
qué viene del browser Esto es sólo para ver
qué viene del browser Abrir una ventana a Internet para
recibir peticiones
Un servidor web básico Ing Manfredi G. Ing Salina Walter.
Ing Sabella Matias. Ing Olmedo Marcelo import java.net.*; import
java.io.*; public class ServerWeb { public static void
main(String[] args) throws Exception { ServerSocket ss = new
ServerSocket(8000); while(true) { Socket s = ss.accept();
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
BufferedReader in = new BufferedReader(new
InputStreamReader(s.getInputStream())); String l; while (true) {
l = in.readLine(); if (l.equals("")) break;
System.out.println(l); } //aqui se debería mandar el
contenido del archivo pedido out.println("
ready"); s.close(); } } } Esto es sólo para ver
qué viene del browser Esto es sólo para ver
qué viene del browser Espera requerimiento de algún
cliente (navegador web)
Un servidor web básico Ing Manfredi G. Ing Salina Walter.
Ing Sabella Matias. Ing Olmedo Marcelo import java.net.*; import
java.io.*; public class ServerWeb { public static void
main(String[] args) throws Exception { ServerSocket ss = new
ServerSocket(8000); while(true) { Socket s = ss.accept();
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
BufferedReader in = new BufferedReader(new
InputStreamReader(s.getInputStream())); String l; while (true) {
l = in.readLine(); if (l.equals("")) break;
System.out.println(l); } //aqui se debería mandar el
contenido del archivo pedido out.println("
ready"); s.close(); } } } Esto es sólo para ver
qué viene del browser Esto es sólo para ver
qué viene del browser Abrir canales de escritura y lectura
con el cliente
Un servidor web básico Ing Manfredi G. Ing Salina Walter.
Ing Sabella Matias. Ing Olmedo Marcelo import java.net.*; import
java.io.*; public class ServerWeb { public static void
main(String[] args) throws Exception { ServerSocket ss = new
ServerSocket(8000); while(true) { Socket s = ss.accept();
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
BufferedReader in = new BufferedReader(new
InputStreamReader(s.getInputStream())); String l; while (true) {
l = in.readLine(); if (l.equals("")) break;
System.out.println(l); } //aqui se debería mandar el
contenido del archivo pedido out.println("
ready"); s.close(); } } } Esto es sólo para ver
qué viene del browser Esto es sólo para ver
qué viene del browser Leer lo que manda el cliente hasta
que llegue una línea vacía
Un servidor web básico import java.net.*; import
java.io.*; public class ServerWeb { public static void
main(String[] args) throws Exception { ServerSocket ss = new
ServerSocket(8000); while(true) { Socket s = ss.accept();
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
BufferedReader in = new BufferedReader(new
InputStreamReader(s.getInputStream())); String l; while (true) {
l = in.readLine(); if (l.equals("")) break;
System.out.println(l); } //aqui se debería mandar el
contenido del archivo pedido out.println("
ready"); s.close(); } } } Esto es sólo para ver
qué viene del browser Mandar respuesta la cliente
Modificar para mandar archivo reuqerido Ing Manfredi G. Ing
Salina Walter. Ing Sabella Matias. Ing Olmedo Marcelo String l =
in.readline(); int i = l.indexOf(“HTTP“); String
nombreArchivo = l.substring(5,i-1); while (true) { l =
in.readLine(); if (l.equals("")) break; System.out.println(l); }
BufferedReader archivo = new BufferedReader( new
FileReader(nombreArchivo)); while(true) { l = archivo.readLine();
if (l == null) break; out.println(l); } } } } Obtener nombre del
archivo requerido de la primera línea GET /nombre_archivo
HTTPXXX
Modificar para mandar archivo reuqerido Ing Manfredi G. Ing
Salina Walter. Ing Sabella Matias. Ing Olmedo Marcelo String l =
in.readline(); int i = l.indegOf(“HTTP“); String
nombreArchivo = l.substring(5,i-1); while (true) { l =
in.readLine(); if (l.equals("")) break; System.out.println(l); }
BufferedReader archivo = new BufferedReader( new
FileReader(nombreArchivo)); while(true) { l = archivo.readLine();
if (l == null) break; out.println(l); } } } } Abrir archivo y
mandarlo al cliente
Respuesta del servidor Ing Manfredi G. Ing Salina Walter. Ing
Sabella Matias. Ing Olmedo Marcelo El servidor responde mandando
la siguiente transacción HTTP: HTTP/1.0 200 OK Date:
Friday, 23-Feb-07 16:30:00 GMT Server: Apache/1.1.1 Content-type:
text/html Content-length: 230 <- linea en blanco En este
mensaje el servidor utiliza la versión 1.0 de HTTP, y
manda el código de estado 200 para indicar que la
petición del cliente ha sido procesada satisfactoriamente.
También se identifica como un servidor Apache. Indica al
cliente que el contenido del documento es texto en formato HTML y
que tiene una longitud de 230 bytes. Luego de una línea en
blanco viene el contenido del archivo pedido.
Un cliente web básico import java.net.*; import java.io.*;
public class ClientWeb { public static void main(String[] args)
throws Exception { Socket s = new Socket(args[0],
Integer.parseInt(args[1])); PrintWriter out = new
PrintWriter(s.getOutputStream(),true); BufferedReader in = new
BufferedReader(new InputStreamReader(s.getInputStream())); String
l; out.println("GET /"+args[2]+" HTTP/1.0"); out.println("");
while (true) { l = in.readLine(); if (l==null) break;
System.out.println(l); } System.out.println("ready"); s.close();
} } Esto es sólo para ver qué viene del
server
GET, HEAD y POST La primera línea de una petición
contiene los comandos HTTP, conocidos como métodos.
Existen varios, pero los más conocidos y utilizados son
tres: GET, HEAD y POST Ing Manfredi G. Ing Salina Walter. Ing
Sabella Matias. Ing Olmedo Marcelo
GET El método GET se utiliza para recuperar
información identificada por un URI por parte de los
navegadores. Si el URI se refiere a un proceso generador de datos
como un programa CGI, en lugar de él, se devuelven los
datos generados por el programa. El método GET
también se puede utilizar para pasar una pequeña
cantidad de información al servidor en forma de pares
atributo-valor añadidos al final del URI detrás de
un símbolo de interrogación, ?. Ing Manfredi G. Ing
Salina Walter. Ing Sabella Matias. Ing Olmedo Marcelo
Ejemplo GET con parámetros GET
/servlet/saludar?nombre=pepe&email=pepe@dss.cl HTTP/1.0 La
longitud de la petición GET está limitada por el
espacio libre en los buffers de entrada. Por lo que para mandar
una gran cantidad de información al servidor se utiliza el
método POST. Buffer: porcion de memoria en el computador
usado para traspasar datos entre dos medios distintos (memoria
principal-memoria secundaria, memoria principal – internet)
Ing Manfredi G. Ing Salina Walter. Ing Sabella Matias. Ing Olmedo
Marcelo
HEAD El método HEAD es idéntico al GET excepto que
el servidor no devolverá el cuerpo del mensaje en la
respuesta a un método HEAD. Esto es útil para
obtener información sobre las entidades implicadas en la
petición sin que tengan que transferirse. Sirve para
comprobar si los enlaces son válidos o para saber cuando
fue la última modificación de la entidad
solicitada. Ing Manfredi G. Ing Salina Walter. Ing Sabella
Matias. Ing Olmedo Marcelo
POST El método POST se refiere normalmente a la
invocación de procesos que generan datos que serán
devueltos como respuesta a la petición. Además se
utiliza para aportar datos de entrada a esos programas. En este
caso los pares atributo-valor son incluidos en el cuerpo de la
petición separados por &. Ing Manfredi G. Ing Salina
Walter. Ing Sabella Matias. Ing Olmedo Marcelo
Ejemplo POST POST /servlet/saludar HTTP/1.0 Accept: */* <-
linea en blanco nombre=pepe&email=pepe@dsstgo.com Primero el
browser manda las líneas de arriba y el servidor queda
esperando información adicional hasta que el browser corta
la comunicación (notar la diferencia con el get que solo
manda una línea y corta la comunicación) De este
modo el método POST no sufre de las limitaciones de
espacio y puede enviar mucha más información al
servidor. En particular se usa cuando se quieren mandar archivos
completos (tareas!!!!) Más aún, es muy conveneinte
cuando se quiere mandar información confidencial
(passwords) ya que esta no queda en el historial del browser
(solo queda la primera linea) Ing Manfredi G. Ing Salina Walter.
Ing Sabella Matias. Ing Olmedo Marcelo
El lenguaje html Hypertext markup language Da directivas de
cómo debe mostrar un texto Estas directivas pueden ser
interpretadas distintamente por cada “mostrador” de
documentos html Ing Manfredi G. Ing Salina Walter. Ing Sabella
Matias. Ing Olmedo Marcelo