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://dya@lamode.disca.upv.es/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