Download Java Programación Cliente

Document related concepts
no text concepts found
Transcript
Indice
Programacion cliente servidor
 Arquitectura Cliente-servidor
 Definicion de socket
 Ejemplo C/S
 Servlets
 Ejemplo Servlets
 Arquitectura C/S de 3 capas

Comunicaciones - Java
1
Java
Programación Cliente-Servidor

Internet es un sistema Cliente-Servidor
gigante
 La idea primaria es que debe haber un sitio
donde descargar la información bajo
demanda de los clientes
 Aquí surge el problema de Internet, cuando
hay un solo servidor que atiende a muchos
clientes, si se produce un cambio que deba
distribuir,
 El rendimiento general del sistema decrece
exponencial al aumento del número de
Comunicaciones - Java
clientes
2
Programación
Cliente-Servidor(II)





El funcionamiento del Web sigue este mismo principio
El navegador fue el primer paso adelante en la
expansión de Internet, permite visualizar un mismo
fichero en plataformas diferentes
Por contra la interactividad con el usuario, y la
posibilidad de ejecutar programas en la parte del
usuario, esta muy limitada
Se proporcionó al lenguaje HTML de botones de
entrada de datos, cajas de selección, etc, pero cuando
habían muchos clientes colgando, el colapso del
servidor era casi seguro
Surgen otras alternativas como los CGI, para
descargar al servidor y que el cliente tambien hiciese
Comunicaciones - Java
3
algo
El Modelo Cliente - Servidor

Arquitectura de sistema distribuido
- Clientes: que dan acceso a usuarios a los
servicios
- Servidores: contienen información, servicios, ...
 Cliente y Servidor son roles en una aplicación
- Una máquina puede ser cliente en un servicio y
servidor en otro
 Muy extendido en programación distribuida
- Utilizando el interfaz de sockets
Comunicaciones - Java
4
Arquitectura Cliente-Servidor




Aplicaciones modulares, distribuidas y
personalizadas.
Java permite la extensión más potente de servidores
de aplicaciones
¿Cómo?. Cuando se accede a un applet de otro
ordenador, el navegador carga la clase principal y va
cargando dinámicamente el resto de clases a medida
que son necesarias
Si alguna clase ya reside en la memoria local, no
debera cargarla, incrementa el rendimiento
Comunicaciones - Java
5
Arquitectura Cliente-Servidor(II)





Gracias a su rigurosa concepción de orientación a
objetos, es muy fácil programar aplicaciones
modulares
Las funciones que deben ser accedidas por un
usuario pueden programarse con applets
Basta instalar los distintos “módulos” de la aplicación,
en un único servidor
Los usuarios acceden a las aplicaciones a través de
su navegador, personalizarlos y tener interfaces
familiares
El uso del web en los últimos años perite reducir en
forma considerable el proceso de aprendizaje y
formación en la aplicación
Comunicaciones - Java
6
Arquitectura Cliente-Servidor
Ventajas




Una aplicación de biblioteca se liberaría de la
preocupación de instalar las aplicaciones localmente
y de actualizar sucesivas versiones
Los applets se distribuyen fácilmente por la www,
las dificultades de trafico en una red no afectan la
funcionalidad de estos, pues ocupan un tamaño no
más de 10 o 20 Kb según aplicación.
Como se dijo antes no es necesario cargar los
applets enteros, y
La facilidad de distribución tiene otra ventaja, como
es el coste de la aplicación en cuanto a
actualizaciones y la de asegurar que todos los
clientes tienen la misma versión software
Comunicaciones - Java
7
Arquitectura Cliente-Servidor
Ventajas (II)

La independencia de Java con respecto a la
plataforma permite que las aplicaciones, funcionen
igual en todos los ordenadores
 El usuario sólo cargará la utilidad específica de la
aplicación que necesite
 Toda la arquitectura que acabamos de explicar hace
pensar que tan solo se necesita en el ordenador un
navegador sin tener que usar ningún S.O. o
configuración hardware preferente
Comunicaciones - Java
8
Thin clients (Clientes delgados)



A esta arquitectura se le conoce como “thin clients”
en contra de los fat clients (“Clientes gruesos”) que
utilizan la mayor parte de aplicaciones de gestión
Los fat clients necesitan trabajar con un S.O
determinado, cantidad de Ram, capacidad de disco,
etc..
En esta nueva arquitectura, es más fácil optimizar las
presentaciones, ya que los thin clients requieren
estaciones menos potentes
Comunicaciones - Java
9
¿Qué es un socket?



Un socket es un punto final en un enlace de
comunicación de dos vías entre dos programas
que se ejecutan en la red.
Las clases Socket son utilizadas para
representar conexiones entre un programa
cliente y otro programa servidor.
El paquete java.net proporciona dos clases -Socket y ServerSocket -- que implementan los
lados del cliente y del servidor de una conexión,
respectivamente
Comunicaciones - Java
10
Ejemplo de cliente en Java

El programa EchoTest, conecta con el Echo
del servidor(en el port7)mediante un socket.
 El cliente lee y escribe a través del socket
 Echotest envía todo el texto tecleado en su
entrada estandar al Echo del servidor,
 El servidor repite todos los caracteres
recibidos en su entrada desde el cliente de
vuelta a través del socket al cliente
Comunicaciones - Java
11
Ejemplo de cliente en Java (II)
Se esteblece la conexión del socket entre el cliente y el
servidor y abre un canal de entrada y un canal de salida
sobre el socket
(Se crea el objeto socket)
echoSocket = new Socket(“slabii", 7);
os = new
DataOutputStream(echoSocket.getOutputStream());
“Abre un canal de entrada el el socket”
is = new DataInputStream(echoSocket.getInputStream());
“Abre un canal de salida el el socket”
Comunicaciones - Java
12
Ejemplo de cliente en Java (III)

El codigo que sigue lee desde el stream de entrada
estandar de EchoTest(donde el usuario teclea). Escribe
inmediatamente la entada seguida por un carácter de
nueva línea en el stream de salida conectado al socket.
 String userInput;
while ((userInput = stdIn.readLine()) != null) {
os.writeBytes(userInput); os.writeByte('\n');
System.out.println("echo: " + is.readLine());}
 La última línea del bucle while lee una línea de
información desde el stream de entrada conectado al
socket. El método readLine() se bloquea hasta que el
servidor haya devuelto la información a EchoTest. Cuando
readline() retorna, EchoTest imprime la información en la
salida estandard.
Comunicaciones - Java
13
Ejemplo de cliente en Java (IV)

Cuando el usuario teclea un carácter de fin de entrada, el
bucle while termina y el programa continúa ejecutando
las siguientes líneas de código:
 os.close();
is.close();
echoSocket.close();
 Estas tres líneas de código cierran las streams de entrada
y salida conectados al socket, y cierra la conexión del
socket con el servidor. El orden es importante -- debe
cerrar los streams conectados a un socket antes de cerrar
éste.
Comunicaciones - Java
14
Ejemplo de cliente en Java (V)

Cuando los clientes hablen con servidores más
complicados como un servidor http, el cliente también será
más complicado. Si embargo, las cosas básicas son las
que has visto en este programa:
 1. Abrir un socket.
 2. Abrir un stream de entrada y otro de salida hacia el
socket.
 3. Leer y escribir a través del socket de acuerdo al protocolo
del servidor.
 4. Cerrar los Streams.
 5. Cerrar el socket.

Sólo el paso 3 será diferente de un cliente a otro,
dependiendo del servidor.Los otros pasos permanecen
inalterables.
Comunicaciones - Java
15
Servlets

Programa en JAVA que se ejecuta en el marco de un
servicio de red, como por ejemplo un servidor web, y que
recibe y responde a las peticiones de un cliente.
 Los clientes pueden invocarlo utilizando el protocolo
HTTP
Servidor Web
Equipo cliente
Peticion HTTP
Explorador
Servlet
Respuesta
HTTP
Comunicaciones - Java
16
Servlets (II) Caracteristicas





Puede comunicarse con otro sevlet para ayudarle en
su trabajo, o bien facilitar el acceso a bases de datos
Son seguros y portables debido a que se ejecutan
bajo la máquina virtual de Java, al mecanismo de
excepciones y al uso del administrador de seguridad
de java.
Java proporciona el soporte necesario para escribir
servlets a través del paquete javax.servlet
Son independientes de la plataforma
Son más rápidos que los programas CGI y que los
scrips
Comunicaciones - Java
17
Servlets. Ejemplo


Un ejemplo sencillo consisté en una página HTML
que contiene un campo de entrada con los
correspondientes botones de Submit y Reset
A pulsar sobre el botón Submit se producirá la
ejecución del Servlet en el servidor, procesará la
información recibida, y mostrará como resultado una
página HTML con el texto introducido con
anterioridad
Comunicaciones - Java
18
Servlets. Ejemplo (II)

El codigo html sería muy sencillo sólo destacar que
en el action del form, indica la acción a
desencadenar en el servidor al pulsar el botón
Submit
<html>
<head>
<title>Ejemplo "Mi Primer Servlet"</title>
</head>
<body>
<form action=http://servidor:8080/servlet/MiPrimerServlet
method=POST>
<BR>
<BR>Introduzca un texto en el cuadro y pulse "Submit"<BR>
<BR>
<input type=text name=TEXTO>
<BR>
<BR><input type=submit><input type=reset></form>
</body>
</html>
Comunicaciones - Java
19
Servlets. Ejemplo (III)

Código Servlet. Destacar principalmente la utilización
de los paquetes javax.servlet.* y javax.servlet.http.*,
y la cláusula extends que define el programa como
una extension de HttpServlet. El fichero que contiene
el Servlet lo llamaremos MiPrimerServlet.java.
// MiPrimerServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class MiPrimerServlet extends HttpServlet
{
public void service(HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException
{
PrintStream out = new PrintStream(res.getOutputStream());
res.setContentType("text/html");
String TEXTO = req.getParameter("TEXTO");
out.println("<p>Usted
ha escrito : "+TEXTO+"</p>");
Comunicaciones
- Java
}
}
20
El ciclo de vida

1) Cuando el servidor carga el Servlet (solo lo carga
ante la primera petición, después ya no hace falta),
invoca el método init. Todas las peticiones que
lleguen antes de que este método finalice su
ejecución, habrán de esperar para ser atendidas.
 2) Una vez finalizada la ejecución del método init,
todas las peticiones son atendidas por el método
service. Normalmente el servidor puede manejar
varias peticiones simultáneamente y asigna un hilo
propio a cada petición.
 3) Cuando el servidor quiere descargar el Servlet
invoca el método destroy.
Comunicaciones - Java
21
El API de los Servlets

El API utilizado para la programación de Servlets incluye
dos paquetes
 El paquete javax.servlet, define la interfaz Servlet y su
implementación GenericServlet. Es esta la interfaz que
define los métodos del Ciclo de Vida. También destacan
las interfaces ServletRequest y ServletResponse, que
definen la mecánica de las peticiones y las respuestas.
 El paquete javax.servlet.http, que es una especialización
del paquete anterior para su utilización con el protocolo
http. Este paquete define la clase HttpServlet que es una
extensión de GenericServlet. Asimismo incluye las
interfaces HttpServletRequest y HttpServletResponse,
que
son
extensiones
de
ServletRequest
y
ServletResponse respectivamente.
Comunicaciones - Java
22
Servlets & JDBC



La clave del éxito de las mejores páginas Web, reside
en la presentación de la información, de forma
interactiva, práctica y atractiva.
La interactividad en la presentación de la
información, se basa en la consulta de bases de
datos por parte de un software, que hace de
intermediario entre el cliente y el sistema que
almacena la información.
A las aplicaciones cliente-servidor que utilizan este
tipo de arquitectura, se las denomina aplicaciones de
tres capas.
Comunicaciones - Java
23
Arquitectura Cliente-Servidor
de tres capas

En una aplicación cliente-servidor de tres capas, el software
intermediario hace de puente entre la parte cliente y el servidor
de base de datos que posee la información

Por un lado tendríamos una maquina en la que un browser
ejecuta un Applet ó muestra un formulario HTML. Por el otro
tendríamos una máquina servidora, en la que un software
servidor de Web, recibe las peticiones de los clientes, y
desencadena la ejecución del Servlet. Este Servlet trabajaría
con una base de datos alojada en otro servidor dedicado en
24
exclusiva a esta función.Comunicaciones - Java
JDBC



JDBC son las siglas de Java Database Connection, y
se trata de una API JAVA que proporciona una
interfaz similar a ODBC para trabajar con bases de
datos SQL. JDBC se basa en el X/Open SQL CLI, al
igual que el ODBC de Microsoft
JDBC no es un lenguaje de interrogación, sino que
simplemente es una interfaz basada en JAVA para
trabajar con SQL. Las aplicaciones pueden utilizar
JDBC, por ejemplo, para someter sentencias SQL a
un sistema gestor de bases de datos.
JDBC se encarga de gestionar aspectos tales como
conexiones a bases de datos, recuperación de
resultados de las interrogaciones, transacciones,
conversiones de tipos SQL a tipos JAVA y viceversa
Comunicaciones - Java
25