Este documento trata sobre la programación cliente-servidor en Java. Explica conceptos como la arquitectura cliente-servidor, sockets, ejemplos de código cliente-servidor, servlets y la arquitectura de tres capas. También introduce conceptos como thin clients y el uso de JDBC para conectarse a bases de datos desde aplicaciones Java.
2. Comunicaciones - Java 2
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
clientes
3. Comunicaciones - Java 3
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
algo
4. Comunicaciones - Java 4
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
5. Comunicaciones - Java 5
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
6. Comunicaciones - Java 6
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
7. Comunicaciones - Java 7
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
8. Comunicaciones - Java 8
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
9. Comunicaciones - Java 9
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
10. Comunicaciones - Java 10
¿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
11. Comunicaciones - Java 11
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
12. Comunicaciones - Java 12
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”
13. Comunicaciones - Java 13
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.
14. Comunicaciones - Java 14
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.
15. Comunicaciones - Java 15
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.
16. Comunicaciones - Java 16
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
Equipo cliente
Servidor Web
Explorador Servlet
Peticion HTTP
Respuesta
HTTP
17. Comunicaciones - Java 17
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
18. Comunicaciones - Java 18
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
19. Comunicaciones - Java 19
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>
20. Comunicaciones - Java 20
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>");
}
}
21. Comunicaciones - Java 21
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.
22. Comunicaciones - Java 22
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.
23. Comunicaciones - Java 23
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.
24. Comunicaciones - Java 24
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
exclusiva a esta función.
25. Comunicaciones - Java 25
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