Tecnologie lato Client: Applet © 2005 Stefano Clemente Stefano Clemente
18 Ottobre 2005Stefano Clemente2 Riferimenti bibliografici Java Tutorial on-line − Downloadable Java Tutorial −
18 Ottobre 2005Stefano Clemente3 Introduzione Permettono di eseguire del codice Java incluso nelle pagine web Java è platform-independent − non c’è bisogno di sapere quale browser è in uso sui client Le pagine web sono più potenti Si possono fornire programmi agli utenti, ma eseguiti sulle loro macchine − minor carico per i server devono soltanto trasferire il codice − maggior carico per i client devono disporre della potenza di calcolo necessaria per l’esecuzione dei programmi Java
18 Ottobre 2005Stefano Clemente4 Introduzione Le applet sono soggette ad alcuni limiti, perché − è pur sempre codice scaricato da siti remoti − devono essere eseguiti su macchine di utenti di qualsiasi tipo − è indispensabile la sicurezza e la fiducia − devono essere applicate alcune restrizioni − devono essere eseguite in modo sicuro applet security managerL’utente è protetto dall’applet security manager
18 Ottobre 2005Stefano Clemente5 Introduzione Limiti − non possono essere utilizzate per “spiare” il client, ma possono leggere solo alcune informazioni versione di Java utilizzata nome e versione del sistema operativo i caratteri utilizzati come separatori di linea e di file il linguaggio e le impostazioni locali le valute − non possono alterare il sistema dell’utente − non possono eseguire programmi residenti sul client − non possono comunicare con host diversi dal server di origine − non possono leggere/scrivere sul file-system del client − le finestre aperte da una applet sono diverse dalle finestre aperte dalle altre applicazioni
18 Ottobre 2005Stefano Clemente6 Introduzione Possibilità delle applet − visualizzazione di immagini − riproduzione di suoni − ricezione di input dall’utente (azioni del mouse e pressione dei tasti della tastiera) − l’input può essere inviato al server − esecuzione di calcoli complessi
18 Ottobre 2005Stefano Clemente7 Strumenti Il programmatore che crea la applet − scrive con un editor il programma javac − lo compila utilizzando il Software Development Kit – SDK ( javac ) − crea con un editor la pagina web sorgente Per eseguire la applet − bisogna disporre di Java Runtime Environment (JRE) − si scarica la pagina web e il codice dell’applet appletviewer − si visualizza la pagina con un browser o con appletviewer
18 Ottobre 2005Stefano Clemente8 HTML: il tag applet... Attributi CODE= CODEBASE= WIDTH= HEIGHT= ARCHIVE=... In HTML 4.0 è sconsigliato l’uso del tag applet che si intende sostituire con il più generico tag
18 Ottobre 2005Stefano Clemente9 Applet AppletOgni applet viene implementata mediante la creazione di una sottoclasse della classe Applet La gerarchia dell’ereditarietà della classe Applet è mostrata nella figura accanto
18 Ottobre 2005Stefano Clemente10 Il ciclo di vita dell’applet Caricamento dell’applet Applet − viene creata un’istanza della classe che controlla l’applet (sottoclasse di Applet ) − l’applet si inizializza − l’applet comincia la sua esecuzione Quando si abbandona la pagina l’applet si arresta e quando si ritorna nella pagina l’applet si riavvia − anche per riduzione a icona e ripristino della finestra Alcuni browser permettono all’utente di ricaricare l’applet, il che si traduce in − arresto dell’applet − pulizia finale – l’applet rilascia le risorse che detiene − caricamento dell’applet
18 Ottobre 2005Stefano Clemente11 Il ciclo di vita dell’applet Uscita dal browser − arresto dell’applet − pulizia finale – l’applet rilascia le risorse che detiene Riassumendo, gli eventi del ciclo di vita dell’applet sono − inizializzazione − avvio − arresto − pulizia finale
18 Ottobre 2005Stefano Clemente12 Esempio 1
18 Ottobre 2005Stefano Clemente13 Esempio 1
18 Ottobre 2005Stefano Clemente14 Esempio 1
18 Ottobre 2005Stefano Clemente15 Commenti sull’esempio 1 L’applet Esempio1 è una sottoclasse della classe Applet class Ridefinisce quattro metodi della classe Applet − init – per inizializzare l’applet ogni volta che viene caricata o ricaricata − start – per avviare l’esecuzione in seguito al caricamento o a una nuova visita da parte dell’utente − stop – per arrestare l’esecuzione in seguito a chiusura del browser o abbandono della pagina da parte dell’utente − destroy – per la pulizia finale in seguito a arresto dell’applet Non è sempre necessario ridefinire i metodi − es. applet che non fanno altro che disegnarsi
18 Ottobre 2005Stefano Clemente16 Commenti sull’esempio 1 Il metodo init dovrebbe essere ridefinito quando l’inizializzazione è da eseguire una sola volta e non richiede dei tempi eccessivi Alcuni browser chiamano il metodo init più volte dopo il caricamento dell’applet Il metodo start dovrebbe essere ridefinito quando l’applet deve eseguire qualcosa dopo l’inizializzazione − Il metodo start può eseguire il lavoro dell’applet (non molto bello) avviare dei thread per l’esecuzione del lavoro (meglio)
18 Ottobre 2005Stefano Clemente17 Commenti sull’esempio 1 La maggior parte delle applet che ridefiniscono il metodo start dovrebbero ridefinire anche il metodo stop − Il metodo stop sospende l’esecuzione dell’applet e quindi non impegna risorse se l’utente non visualizza la pagina (es. animazione) La maggior parte delle applet non hanno bisogno di ridefinire il metodo destroy perché il metodo stop fa solitamente già tutto il necessario. Viene ridefinito per rilasciare risorse aggiuntive
18 Ottobre 2005Stefano Clemente18 Metodi di Drawing Nell’esempio 1 la ridefinizione del metodo paint definisce il modo in cui l’applet visualizza dei messaggi I metodi che un’applet può ridefinire per la visualizzazione sono − paint – metodo principale per la visualizzazione di informazioni − update – utilizzato in combinazione con paint per migliorare le prestazioni Sono ereditati dalla classe Applet, che li eredita a sua volta dalla classe Component dell’Abstract Window Toolkit (AWT)
18 Ottobre 2005Stefano Clemente19 Eventi Dalla classe Component è ereditato anche un insieme di metodi per la gestione degli eventi − action − mouseDown − handleEvent – “qualsiasi evento” Per gestire un evento bisogna ridefinire il relativo metodo nell’applet
18 Ottobre 2005Stefano Clemente20 Esempio 2
18 Ottobre 2005Stefano Clemente21 Metodi per aggiunta componenti interfaccia utente AWT fornisce anche le seguenti componenti per l’interfaccia utente − Bottoni (java.awt.Button) − Single-line text field (java.awt.TextField) − Checkbox (java.awt.Checkbox) − Larger text display e aree di editing (java.awt.TextArea) − Etichette (java.awt.Label) − Liste (java.awt.List) − Liste pop-up (java.awt.Choice) − Slider e scrollbar (java.awt.Scrollbar) − Aree di disegno (java.awt.Canvas) − Menu (java.awt.Menu, java.awt.MenuItem, java.awt.CheckboxMenuItem) − Contenitori (java.awt.Panel, java.awt.Window e sottoclassi)
18 Ottobre 2005Stefano Clemente22 Metodi per l’uso delle componenti Interfaccia Utente addadd − Aggiunge la componente removeremove − Rimuove la componente setLayoutsetLayout − Predispone il layout manager Metodi per aggiunta componenti interfaccia utente
18 Ottobre 2005Stefano Clemente23 Esempio 3
18 Ottobre 2005Stefano Clemente24 I vantaggi della API Applet La API applet permette di trarre vantaggi dalla relazione tra applet e browser La API è fornita dal package java.applet Grazie a API le applet possono: − ricevere dal browser la notifica su inizializzazione, esecuzione, arresto, ecc. − caricare file di dati relativi alla URL dell’applet o alla pagina nella quale viene eseguita − visualizzare delle brevi stringhe di stato − far visualizzare un documento al browser − trovare altre applet eseguite nella stessa pagina − riprodurre suoni − ricevere parametri specificati nel tag
18 Ottobre 2005Stefano Clemente25 API applet: cercare e caricare i file I file che un’applet ha bisogno di caricare sono indicati con una URL relativa; normalmente la applet usa − code-base – metodo getCodeBase − document-base – metodo getDocumentBase A meno di specifiche diverse indicate nel tag la code-base coincide con la document-base I dati di cui un’applet ha sempre bisogno sono solitamente relativi alla code-base I dati che l’utente che usa l’applet specifica (per mezzo di parametri) sono solitamente relativi alla document-base La classe Applet definisce dei modi convenienti per il caricamento di suoni e immagini relativamente a una URL base; per esempio se una applet è configurata con una delle seguenti strutture di directory per caricare l’immagine a.gif che si trova nella directory imgDir si può scrivere Image image = getImage(getCodeBase(), "imgDir/a.gif");
18 Ottobre 2005Stefano Clemente26 API applet: visualizzazioni di brevi stringhe di stato Sia i browser che altri visualizzatori di applet (es. programma appletviewer) consentono la visualizzazione di brevi stringhe di stato nella apposita barra di stato in fondo alla finestra − Nei browser le applet e il browser condividono la stessa barra Questa possibilità non dovrebbe essere utilizzata per visualizzare informazioni critiche − se le informazioni devono essere fornite a molti utenti dovrebbero essere visualizzate nell’area dell’applet − se le informazioni interessano pochi utenti dovrebbero essere visualizzate nello standard-output Unix = shell X-windows = finestra terminal Browser = Console Java La riga di stato può essere sovrascritta in qualsiasi momento da altre applet o dal browser showStatusIl metodo relativo è showStatus − showStatus("MyApplet: Loading image file " + file);
18 Ottobre 2005Stefano Clemente27 API applet: visualizzazioni di documenti all’interno del browser Un’applet può visualizzare del testo HTML showDocumentAttraverso il metodo showDocument di AppletContext l’applet dice al browser quale URL visualizzare e in quale finestra − non funziona con appletviewer showDocumentshowDocument ha due forme − public void showDocument(java.net.URL url) dice semplicemente al browser di visualizzare il documento all’URL specificata
18 Ottobre 2005Stefano Clemente28 API applet: visualizzazioni di documenti all’interno del browser − public void showDocument(java.net.URL url, String targetWindow) aggiunge la finestra nella quale il documento deve essere visualizzato; il secondo argomento può assumere i valori: − "_blank" nuova finestra senza nome. − "windowName" finestra dal nome “windowName” – se non esiste viene creata − "_self" stessa finestra o frame che contiene l’applet − "_parent" Stessa finestra che contiene l’applet, ma nel parent frame – se non esiste il parent frame è uguale a “_self” − "_top" Stessa finestra che contiene l’applet, ma nel frame principale – se non esiste il frame principale è uguale a “_self”
18 Ottobre 2005Stefano Clemente29 API applet: invio di messaggi ad altre applet Le applet possono parlare con altre applet entro i seguenti limiti − la maggior parte dei browser richiedono che le applet provengano dallo stesso server abbiano la stessa code-base La API richiede inoltre che le applet siano in esecuzione − sulla stessa pagina − sulla stessa finestra del browser Una applet può individuare un’altra applet − per nome – metodo getApplet di AppletContext − cercando tutte le applet della pagina – metodo getApplets di AppletContext in entrambe i casi vengono restituiti uno o più oggetti Applet sui quali l’applet invocante può richiamare dei metodi
18 Ottobre 2005Stefano Clemente30 Esempio 4: Applet Receiver
18 Ottobre 2005Stefano Clemente31 Esempio 4: Applet Sender
18 Ottobre 2005Stefano Clemente32 Esempio 1: Applet Sender
18 Ottobre 2005Stefano Clemente33 Esempio 4: Applet Sender
18 Ottobre 2005Stefano Clemente34 Esempio 4: HTML
18 Ottobre 2005Stefano Clemente35 Esempio 5: getApplets
18 Ottobre 2005Stefano Clemente36 Esempio 5: getApplets
18 Ottobre 2005Stefano Clemente37 Esempio 5: HTML
18 Ottobre 2005Stefano Clemente38 API applet: Riproduzione di suoni Il supporto per i suoni è fornito dalla classe Applet è dall’interfaccio AudioClip del package Java.Applet ".au"È supportato un solo formato – 8 bit, µlaw, 8000 Hz, one-channel, file ".au" di Sun I metodi do Applet relativi ai suoni sono − getAudioClip(URL)getAudioClip(URL, String) − getAudioClip(URL), getAudioClip(URL, String) restituiscono un oggetto che implementa l’interfaccia AudioClip − play(URL)play(URL, String) − play(URL), play(URL, String) Eseguono l’AudioClip relativo alla URL specificata getDocumentBasegetCodeBaseLa forma a due parametri prende una URL di base (restituita da getDocumentBase o da getCodeBase ) e l’URL del file sonoro relativa alla base. È consigliato utilizzare − la code-base per i suoni distribuiti con l’applet − la document-base per i suoni specificati dall’utente
18 Ottobre 2005Stefano Clemente39 API applet: Riproduzione di suoni I metodi dell’interfaccia AudioClip sono: − play riproduce il suono una sola volta − loop ripete continuamente il suono − stop arresta la riproduzione del suono sia con loop che con play
18 Ottobre 2005Stefano Clemente40 Il tag : i parametri Finora abbiamo visto la forma più semplice Alcune applet permettono all’utente di personalizzare la loro configurazione attraverso l’immissione di parametri − I parametri non sono altro che tag da inserire all’interno del tag applet secondo la sintassi seguente
18 Ottobre 2005Stefano Clemente41 Il tag : i parametri public String getParameter(String name)Per leggere i parametri specificati dall’utente le applet usano il metodo public String getParameter(String name) getParameter restituisce sempre stringhe, per cui l’applet deve provvedere alla conversione in altri tipi se necessario (es. Integer.parseInt) − Se necessario bisogna definire nell’applet dei valori di default per i parametri. − getParameter può essere utilizzata anche per recuperare i valori degli attributi del tag applet CODE, WIDTH, HEIGHT…
18 Ottobre 2005Stefano Clemente42 Il tag : codice HTML e testo alternativo Il browser non conosce il tag applet Il browser non conosce il tag applet La stringa “Il browser non conosce il tag applet” nel tag precedente viene visualizzata nel caso in cui il browser sul quale viene richiamata la pagina non riconosca il tag. Questo tipo di stringa − è detto codice HTML alternativo − deve essere inserita tra i tag e e comunque dopo i tag Se il browser è in grado di eseguire Java, il codice HTML alternativo è ignorato. In questo caso può essere definito del testo alternativo attraverso attributo ALT del tag applet (nell’esempio la stringa “Non riesco a eseguire l’applet”) − L’uso dell’attributo ALT è per segnalare all’utente che il browser, sebbene abilitato all’esecuzione di codice Java, non è riuscito a eseguire l’applet
18 Ottobre 2005Stefano Clemente43 Il tag : la directory dell’applet I browser assumono per default che il codice java dell’applet sia nella stessa directory (URL base) del documento HTML in cui l’applet è richiamata Spesso però il codice Java è in altre directory del server In questi casi l’attributo CODEBASE dice al browser in quale directory recuperare i file dell’applet Se aURL è una URL − relativa, allora va intesa relativa alla document-base, cioè alla directory della pagina HTML − assoluta, allora l’applet può essere scaricata da una qualsiasi directory, anche su un altro server
18 Ottobre 2005Stefano Clemente44 Il tag : la directory dell’applet
18 Ottobre 2005Stefano Clemente45 Il tag : la directory dell’applet In questo caso, l’URL è assoluta e può indicare anche una directory su un altro server
18 Ottobre 2005Stefano Clemente46 Il tag : raggruppare in un unico file i file dell’applet Se un’applet è composta da più file, potrebbe essere conveniente raggruppare tutti questi in un unico file archivio Occorre valutare: − la dimensione dell’applet − le performance − l’ambiente che il generico utente potrebbe aver Il poter disporre di file archivio porta alla riduzione dei tempi del download (minori connessioni HTTP) Si possono ottenere migliori prestazioni nel download comprimendo l’archivio
18 Ottobre 2005Stefano Clemente47 Il tag : raggruppare in un unico file i file dell’applet La specifica di file archivio produce il seguente comportamento del browser − il browser cerca prima di tutto i file archivio nella stessa directory dell’applet − successivamente cerca la classe applet all’interno dei file archivio − se non lo trova prova allora a caricarlo come se nessun archivio fosse stato specificato Il formato standard per gli archivi Java è JAR, introdotto in JDK 1.1 ed è basato sul formato ZIP Gli archivi sono specificati attraverso l’attributo ARCHIVE del tag applet; archivi multipli sono specificati separando i nomi degli stessi con virgole
18 Ottobre 2005Stefano Clemente48 Il tag : raggruppare in un unico file i file dell’applet Per creare un archivio JAR che includa le versioni compresse di tutti i file class e gif contenuti nella current directory: jar cvf file.zip *.class *.gif Per creare un archivio Jar per le classi nel package com.mycompany.myproject: jar cvf file.zip com/mycompany/myproject/*.class *.gif