Download El applet echo - PoliformaT

Document related concepts
no text concepts found
Transcript
El applet echo
PRÁCTICA 6
E
l objetivo de esta práctica es realizar un applet para un cliente de echo, es decir un
cliente de echo cuya interfaz gráfica (GUI) se proporcione sobre un navegador web
y sea similar a la especificada en la figura 1 (pág. 67).,.
FIGURA 1.
DYA
Estructura de la aplicación
67
Estructura de la aplicación
Esta interfaz gráfica o GUI’s (Grafical User Interface) deberá generarse con un editor visual de
interfaces incorporada en el entorno de desarrollo (IDE) de Java.
El funcionamiento del applet de echo es el siguiente: envía a la máquina especificada en el campo
Host, la cadena del campo String to send y cuando se recibe la respuesta del servicio de echo, la
representa en el campo String received. El envío de la cadena se realiza cuando se produce alguno
de los siguientes eventos:
• Evento 1: Se aprieta el botón SEND
• Evento 2: Se proporciona un <CR> en String to send
Este cliente deberá funcionar con los servidores de echo realizados en prácticas anteriores que se
especifican:
• Servidor de echo con sockets: conectará con este servidor al producirse al producirse el evento 1
• Servidor de echo RMI (o CORBA): conectará con este servidor al producirse al producirse el
evento 2
IMPORTANTE: es necesario que tenga a punto los proyectos de las prácticas de sockets y RMI
antes de empezar a realizar esta práctica.
6.1.- Estructura de la aplicación
Esta aplicación consta de dos paquetes: el paquete con la interfaz del servicio en RMI (package rmi) y el paquete cliente (package client). Como paquete sevidor se utilizarán directamente los
paquetes con la parte servidora del servicio de echo desarrollados en las prácticas de sockets y RMI.
6.1.1.- La interfaz rmi
Contiene la interfaz RMI del servicio de echo. Consta del siguiente fichero:
• EchoInt.java: el mismo interfaz del servicio de echo que el de las prácticas de sockets y RMI
68
El applet echo
Realización de la parte básica de la práctica
6.1.2.- El paquete client
Lo conforma la parte cliente del servicio de echo. Consta de un fichero con el stub del
cliente del servicio basado en sockets y el applet:
• EchoObjectStub.java: es el stub del servicio de echo basado en sockets utilizado en prácticas
anteriores. Este stub estaba generado “a mano” y se encuentra ya totalmente terminado de prácticas anteriores.
• EchoApplet.java: es el applet con el cliente del servicio de echo, objeto de esta práctica. Contiene una interfaz gráfica para dicho servicio que puede visualizarse en un navegador web. No se
proporciona plantilla alguna para este fichero, ya que deberá generarse íntegramente a partir de
un editor gráfico de interfaces (GUI’s).
6.2.- Realización de la parte básica de la práctica
Para la realización de la parte básica de la práctica comience por crear un proyecto, descargar los ficheros de apoyo y añadirlos al proyecto. Posteriormente desarrolle el applet echo con un
editor gráfico. De una manera más detallada, los pasos a seguir se detallan en los siguientes apartados.
6.2.1.- Creación del proyecto
Este abaratado consta de los mismos pasos que las prácticas anteriores:
1.
2.
3.
Descargue los ficheros de ayuda al directorio de descargas.
Cree un proyecto prj-applet en el workspace cree también los paquetes de que consta la aplicación: rmi, client.
Copie los ficheros de apoyo desde el directorio de descargas al workspace.
6.2.2.- Realización del applet echo
La realización de un applet consta, fundamentalmente de dos pasos:
1.
2.
Desarrollo de la interfaz gráfica (GUI)
Realización de los manejadores de eventos.
Cada uno de estos pasos se detalla a continuación.
DYA
69
Realización de la parte básica de la práctica
Desarrollo de la interfaz gráfica (GUI)
1.
Añada al paquete client del proyecto un nuevo fichero, denominado EchoApplet.java, con la
opción New -> Other -> Java -> Visual Class, especificando:
- Superclass: javax.swing.JApplet
Observe que se crea una plantilla de un fichero con un applet y se ofrece una doble visión del
mismo: código fuente y diseño gráfico. Ver figura 2 (pág. 70).
FIGURA 2.
El editor gráfico en el IDE Eclipse
Inicialmente aparece el contenedor del applet vacío. Para realizar el diseño de una interfaz gráfica
como la mostrada en la figura 1 (pág. 67) deberá ir añadiendo elementos de la Palette de componentes gráficos. Deberá tener en cuenta los siguientes aspectos:
2.
3.
Seleccionar el Layout Manager null. Para ello, seleccione el contenedor, observe la ventana de
Properties y modifique adecuadamente la propiedad layout.
Añada componentes gráficos seleccionándolos desde el menú de Swing Components de la
Palette. Se recomienda dar a los componentes nombres fácilmente identificables (Property ->
name) en el momento de su creación, especialmente aquellos que vayan a ser manipulados:
- botonEnviar
- textoHost
- textoEnviar
- textoRecibido
70
El applet echo
Realización de la parte básica de la práctica
- barraEstado
Realización de los manejadores de eventos
Se realizarán manejadores para los siguientes eventos de tipo ActionEvent:
• Pulsación del botón SEND: el manejo consistirá en solicitar el servicio de echo vía sockets.
• Teclear <CR> en el campo de texto etiquetado como String to send: el manejo consistirá en solicitar el servicio de echo al servidor RMI (o CORBA) correspondiente.
Para realizar un manejador de un componente gráfico:
1.
Seleccione el componente en el editor gráfico y apriete el botón derecho del ratón. En el menú
contextual seleccionar Events -> ActionPerformed. Se creará en la ventana de código la
siguiente plantilla de manejador:
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()");
// TODO Auto-generated Event stub actionPerformed()
}
);
2.
Rellene la plantilla del manejador con el código que corresponda a cada manejador.
En el caso del evento del botón, el código consiste en invocar el servicio de echo de sockets
mediante el stub EchoObjectStub. El código se proporciona a continuación (observe en font diferente los nombres dados a los componentes gráficos):
EchoObjectStub es = new EchoObjectStub();
String host = new String(textoHost.getText());
String input = new String(textoEnviar.getText());
String output = new String("Error!");
try {
es.setHostAndPort(host,7);
output = es.echo(input);
textoRecibido.setText(output);
} catch (RemoteException x) {
barraEstado.setText("No se pudo comunicar con el server");
}
Realice un manejador semejante para el caso del evento del campo de texto textoEnviar, realizando
en este caso una invocación al servicio de echo RMI (o CORBA).
6.2.3.- Ejecución de la aplicación
Para la ejecución de la aplicación, realice los siguientes pasos:
DYA
71
Ejecución del applet echo como aplicación web
1.
2.
Abra los proyectos prj-sockets y prj-rmi realizados en prácticas anteriores, y ponga en ejecución
los servidores correspondientes
Ejecute el cliente de echo con el menú Run... Java Applet. Se ejecutará el applet en una aplicación AppletViewer que permite comprobar su funcionamiento básico antes de acudir al navegador web.
6.3.- Ejecución del applet echo como aplicación web
Para ejecutar el cliente del servicio de echo como aplicación web se recomienda el siguiente
proceso:
1.
2.
3.
4.
Empaquetar el applet en un fichero JAR.
Realizar una página HTML para lanzar la aplicación.
Ubicar la aplicación en una máquina con un servidor web HTTP.
Resolver los problemas de seguridad que puedan aparecer.
A continuación se examina cada uno de estos pasos con mayor detalle.
6.3.1.- Creación de un archivo JAR con el applet
Para poder ejecutar un applet en un navegador web es conveniente empaquetar y comprimir
todas las clases java de que consta en un archivo JAR, incluyendo todas las clases y bibliotecas que
no se encuentran en el entorno de la máquina virtual del navegador.
La creación del archivo JAR se realiza seleccionando el proyecto y mediante el menú contextual de botan derecho indicando la opción Export -> JAR file. Especifique como nombre del
fichero prj-applet.jar.
6.3.2.- Realización de una página HTML para el applet
Consiste en generar una página HTML que referencie el archivo JAR anteriormente creado.
Realice una página EchoApplet.htm en el mismo directorio donde se encuentre el archivo JAR prjapplet.jar cuyo contenido sea:
<html>
<head>
<title>
Página de prueba del applet de echo
</title>
</head>
<body>
El applet client.EchoApplet de Joan Vila debe aparecer debajo en un visualizador de Java.<br>
<applet
72
El applet echo
Ejecución del applet echo como aplicación web
archive = "prj-applet.jar"
code
= "client.EchoApplet.class"
name
= "TestApplet"
width
= "400"
height
= "300"
hspace
= "0"
vspace
= "0"
align
= "middle"
>
</applet>
</body>
</html>
Para la ejecución del fichero JAR desde un navegador web debe comprobar que el navegador elegido tiene instalado el plug-in de la máquina virtual Java de Sun. Si no esta instalado, debe descargarse de http://java.sun.com.
6.3.3.- Ubicación del cliente en un servidor web
Para poder probar el cliente de echo como una aplicación web, debe ubicar el applet en un
directorio servido por un servidor web. Ubique en este directorio los ficheros prj-applet.jar y
EchoApplet.htm. Las posibilidades de que dispone para este directorio son:
• El subdirectorio $HOME/public_html si trabaja en una máquina Unix con servidor web.
- En este directorio el applet se accede con el URL:
http://lamode.disca.upv.es/~USUARIO/EchoApplet.htm
• Un directorio del usuario dya en una máquina que disponga de servidor web. El URL de este
servidor es: http://lamode.disca.upv.es/~dya. Puede ubicar su aplicación en este servidor vía ftp:
ftp://[email protected]/public_html/ (Usuario=dya, Passwd:(el de siempre))
- Cree su propio directorio en esta máquina evitando colisionar con los directorios de sus compañeros: ftp://lamode.disca.upv.es/dya/public_html/%USER%
- En este directorio el applet se accede con el URL:
http://futura.disca.upv.es/~dya/USUARIO/client.EchoApplet.html
6.3.4.- Ejecución del applet firmado
Si se ejecuta el applet contra un servicio de echo ubicado en el mismo servidor que el servidor web, funciona correctamente. En este caso no deben existir demasiados problemas de seguridad
puesto que el applet y el servidor de echo se encuentran en la misma máquina.
DYA
73
Ejecución del applet echo como aplicación web
Si se ejecuta el cliente de echo contra el servidor de echo de su propia máquina o contra el servidor
de alguno de sus compañeros de prácticas, observará en la consola de Java que el applet lanza una
excepción de seguridad.
6.3.5.- Resolución de problemas de seguridad
Los applets son “virus en potencia” y por lo tanto, suelen presentar problemas de seguridad.
En este caso, los problemas más importantes son:
• Acceso al port 1099 requerido por RMI
• Comunicación con “terceros”, es decir, servidores ubicados en máquinas distintas a la máquina
de la que proviene el applet.
A ‘partir de la plataforma Java 2, la forma de habilitar una política de seguridad diferente a
la de defecto es implementar un fichero java.policy que la defina. Este fichero debe habilitarse en el
fichero java.security de la máquina virtual del navegador.
Ubique el fichero java.security y observe que permite la localización de un nuevo fichero
con la política de seguridad, denominado .java.policy, en el directorio de usuario ${user.home}:
# The default is to have a single system-wide policy file,
# and a policy file in the user's home directory.
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
Cree el fichero ${user.home}\.java.policy. (el directorio ${user.home}en Windows es C:/Documents
and Settings/%USER%). Edítelo y añada:
grant {
//permission java.security.AllPermission;
permission java.net.AllPermission;
};
• La ejecución de un applet ubicado en un fichero local requiere el permiso:
permission java.net.AllPermission
• La ejecución de un applet ubicado un servidor web requiere el permiso:
permission java.security.AllPermission
ya que el anterior no cubre la comunicación con “terceros”.
74
El applet echo
Ejecución del applet echo como aplicación web
Elimine el fichero ${user.home}\.java.policy al terminar la práctica, para evitar problemas cuando
visite sitios no seguros.
DYA
75
Ejecución del applet echo como aplicación web
76
El applet echo