Title: Indice
1Indice
- Programacion cliente servidor
- Arquitectura Cliente-servidor
- Definicion de socket
- Ejemplo C/S
- Servlets
- Ejemplo Servlets
- Arquitectura C/S de 3 capas
2JavaProgramació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
3ProgramaciónCliente-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
4El 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
5Arquitectura 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
6Arquitectura 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
7Arquitectura Cliente-ServidorVentajas
- 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
8Arquitectura Cliente-ServidorVentajas (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
9Thin 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
10Qué 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
11Ejemplo 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
12Ejemplo 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.getOutputStre
am()) - Abre un canal de entrada el el socket
- is new DataInputStream(echoSocket.getInputStream
()) - Abre un canal de salida el el socket
13Ejemplo 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.
14Ejemplo 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.
15Ejemplo 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.
16Servlets
- 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
17Servlets (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
18Servlets. 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
19Servlets. 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
lthtmlgt ltheadgt lttitlegtEjemplo "Mi
Primer Servlet"lt/titlegt lt/headgt
ltbodygt ltform actionhttp//servidor8080/se
rvlet/MiPrimerServlet methodPOSTgt ltBRgt
ltBRgtIntroduzca un texto en el cuadro y pulse
"Submit"ltBRgt ltBRgt ltinput typetext
nameTEXTOgt ltBRgt ltBRgtltinput
typesubmitgtltinput typeresetgtlt/formgt
lt/bodygt lt/htmlgt
20Servlets. 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.getOut
putStream()) res.setContentType("text/h
tml") String TEXTO
req.getParameter("TEXTO")
out.println("ltpgtUsted ha escrito
"TEXTO"lt/pgt")
21El 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.
22El 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.
23Servlets 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.
24Arquitectura Cliente-Servidorde 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.
25JDBC
- 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