Sei sulla pagina 1di 13

Un’ applet è un genere speciale di programma Java che un browser compatibile con Java può

scaricare da Internet ed eseguire. Sun ha sviluppato un approccio per la distribuzione di


applicazioni basate su Internet, chiamato Java Web Start, che ha risolto alcuni dei problemi che
sorgevano inizialmente con le applet.

Fondamenti delle applet


Per descrivere il layout di una pagina web si utilizza il linguaggio HTML (HyperText Markup
Language). Il linguaggio HTML è semplicemente un veicolo per definire gli elementi di una pagina
ipertestuale; per esempio, <title> indica il titolo della pagina e il testo che segue questo tag
diventa il titolo della pagina. La fine del titolo è indicata dal tag </title>. Questa è una delle regole
generali dei tag: una barra seguita dal nome dell’elemento identifica la fine dell’elemento. Il
concetto di base dell’utilizzo delle applet in una pagina web è semplice: la pagina HTML deve dire
al browser quali applet caricare e dove deve collocare ogni applet nella pagina web, ciòè:

 dove acquisire i file delle classi

o Il browser recupera i file delle classi da Internet, oppure da una directory del
computer dell’utente, ed esegue automaticamente l’applet, utilizzando un runtime
di Java esterno oppure la JVM predefinita.

 come posizione l’applet nella pagina web (dimensione, posizione, e così via)

o impostando gli appositi attributi messi a disposizione dal linguaggio HTML

Oltre alla stessa applet, la pagina web può contenere tutti gli altri elementi HTML che si è soliti
vedere nelle pagine web: diversi font, elenchi puntati, immagini, link e così via. Il linguaggio di
programmazione java, quindi, non è uno strumento per progettare pagine HTML, ma uno
strumento per dare loro vita.
Un’ applet semplice
Un’ applet è semplicemente una classe Java che estende la classe java.applet.Applet. Anche se il
pacchetto java.applet non fa parte del pacchetto AWT, un’applet è un componente AWT.
Utilizzeremo Swing per implementare le applet, estendendo la classe JApplet cioè la superclasse
delle applet Swing. Infatti JApplet è una sottoclasse immediata della classe Applet ordinaria.

 Il seguente esempio riporta il codice di un’applet semplice

import javax.swing.*;
public class HelloWorldApplet extends JApplet {
public void init() {
JLabel label = new JLabel(“Hello World!”,
SwingCostants.CENTER);
add(label);
}
}

Visualizzare le applet
Per eseguire l’applet si devono portare a termine I due passaggi indicate di seguito:

1. Compilare i file sorgente Java nei file delle classi

2. Creare un file HTML che dica al browser il primo file di classe da caricare e come
dimensionare l’applet.

E’ prassi comune, anche se non obbligatoria dare al file HTML lo stesso nome della classe relativa
all’applet. In questo modo, rispettando la consuetudine si denomina il file HelloWorldApplet.html.

 Di seguito è riportato il suo contenuto:

<applet code=”HelloWorldApplet.class” width=”300” height=”200”>


</applet>

Prima di visualizzare l’applet in un browser, è preferibile verificarla nel programma applet viewer
(visualizzatore di applet) che fa parte di JDK.

 Per utilizzare applet viewer si deve digitare quando segue nella riga di comando:

appletviewer HelloWorldApplet.html

L’argomento della riga di comando per il programma applet viewer è il nome del file HTML,
non il file della classe.

L’applet viewer può andare bene nella prima fase di test di un programma, ma a un certo punto
diventa necessario eseguire le applet in un browser per vederle nello stesso modo in cui le può
vedere un utente. Per visualizzare correttamente l’applet è necessario avere un browser
compatibile con Java2. Dopo avere installato e configurato Java Plug-in, è sufficiente caricare il file
HTML nel browser. Se l’applet non viene visualizzata, è probabile che il browser utilizza una
propria macchina virtuale, per cui è necessario configurare questa al posto di Java Plug-in.

Convertire le applicazioni in applet


E’ facile convertire un’applicazione Java che utilizza AWT e che si può avviare con il comando java,
in un applet incorporabile in una pagina web, lasciando invariato il codice dell’interfaccia utente.

Di seguito sono indicati i passi da osservare per convertire un’applicazione in un’applet.

1. Si costruisce una pagina HTML con il tag appropriato per caricare il codice dell’applet

2. Si mette a disposizione una sottoclasse public della classe JApplet e si implementa il


metodo public void init.

3. Si sposta il codice di inizializzazione dal costruttore del frame nel metodo init dell’applet. Il
browser definisce un’istanza della classe applet per conto proprio e chiama il metodo init.

4. Si rimuove la chiamata setSize; il dimensionamento delle applet è impostato con i


parametri width e height del file HTML

5. Si rimuove la chiamata setDefaultCloseOperation. Non si può chiudere un applet; il suo


funzionamento cessa quando si esce dal browser

6. Si rimuove la chiamata setTitle. Le applet non possono avere barra di totolo; ovviamente,
si può dare un titolo alla pagina web utilizzando il tag HTML <title>

7. Non si chiama setVisible(true). L’applet viene visualizzata automaticamente.


Ciclo di vita di un’applet
Quattro metodi void della classe Applet definiscono il framework sul quale si costruiscono le
applet più significative. Di seguito è riportata una breve descrizione di questi metodi, le situazione
nelle quali sono chiamati e il codice da utilizzare con ciascuno di essi.

init

Questo metodo riguarda le inizializzazioni necessarie. Viene chiamato dopo aver eseguito i
tag param del tag applet. Le applet possono avere un costruttore predefinito, ma si
preferisce di solito eseguire l’inizializzazione nel metodo init piuttosto che nel costruttore
predefinito.

start

Questo metodo viene chiamato automaticamente dopo che il browser ha chiamato il


metodo init. Viene chiamato anche ogni volta che l’utente ritorna alla pagina che contiene
l’applet dopo che si è spostato su altre pagine. A differenza del metodo init, il metodo start
può essere chiamato più volte. Il metodo start è il punto in cui solitamente si riavvia un
thread dell’applet, per esempio per riprendere un’animazione. Se l’applet non fa nulla che
deve essere sospeso quando l’utente lascia la pagina web corrente, non è necessario
implementare questo metodo (né il metodo stop).

stop

Questo metodo viene chiamato automaticamente quando l’utente si sposta dalla pagina
nella quale si trova l’applet. Può pertanto essere chiamato più volte nella stessa applet. Il
suo scopo è quello di permettere di interrompere un’attività che consuma tempo e può
rallentare il sistema quando l’utente non presta attenzione all’applet. Può essere
implementato per esempio, per interrompere un’animazione o una riproduzione audio.

destroy

Questo metodo viene chiamato solo quando si chiude il browser in modo normale. Dato
che le applet esistono su una pagina HTML, non ha senso lasciare risorse occupate dopo
che l’utente ha abbandonato la pagina che contiene l’applet. In questo caso si possono
rilasciare le risorse effettuando l’override del metodo destroy
Fondamenti della sicurezza
Dato che le applet vengono progettate per essere caricate da un sito remoto ed eseguite in locale,
il problema della sicurezza assume un’importanza fondamentale. Se l’utente attiva Java in un
browser, questo può scaricare il codice dell’applet nella pagina web ed eseguirlo immediatamente.
L’utente non ha la possibilità di confermare o annullare l’esecuzione delle singole applet.
L’ambiente di esecuzione con limitazioni per le applet prende il nome di sandbox. Le applet
eseguite nella sandbox non possono alterare il sistema dell’utente o spiare al suo interno.

Java prevede tre meccanismi distinti per migliorare la sicurezza:

1. Il codice del programma è interpretato dalla JVM, non direttamente dalla CPU

Dato che la macchina virtuale verifica tutte le istruzioni critiche e le aree di


programma, un’ applet pericolosa, o scritta male, non riesce a provocare un crash
del computer, a sovrascrivere la memoria di sistema o modificare i privilegi di
accesso al sistema operativo.

2. Un gestore della sicurezza verifica le operazioni sensibili nella libreria runtime di Java

Il gestore di sicurezza delle applet genera un’eccezione SecurityException ogni volta


che l’utente tenta di violare una delle regole d’accesso.

3. E’ possibile firmare le applet per identificarne l’origine

Un’applet con firma è contrassegnata da un certificato che corrisponde all’identità


di chi ha firmato l’applet. Le tecniche di crittografia garantiscono che un certificato
di questo tipo non possa essere falsificato. Se la firma viene riconosciuta dall’utente,
si può scegli ere di dare all’applet privilegi di accesso aggiuntivi.
Finestre pop-up nelle applet
E’ possibile creare un frame pop-up per guadagnare spazio sullo schermo.

 Per impostare una finestra pop-up, si utilizza un JFrame senza chiamare il metodo
setDefaultCloseOperation:

frame = new CalculatorFrame();


frame.setTitle(“Calculator”);
frame.setSize(200, 200);
// creiamo un pulsante che visualizza/nasconde il frame al clic
JButton calcButton = new JButton(“Calculator”);
calcButton.adddActionListener(new
ActionListener() {
public void actionPerformed(ActionEvent event) {
frame.setVisible(!frame.isVisible());
}
});
Tag e attributi HTML delle applet
 La forma base del tag applet è indicata nel seguente esempio:

<applet code=”NomeClasse.class” width=”300” height=”100”>


</applet>

L’attributo code assegna il nome del file della classe e deve includere l’estensione .class; gli
attribute width e height definiscono la dimensione della finestra in pixel. Il testo tra i tag
<applet> e </applet> viene visualizzato solo se il browser non è in grado di visualizzare le
applet. Gli attributi code, width e height sono obbligatori: se manca uno di questi attributi,
il browser non può caricare l’applet.
Tutte queste informazioni vengono di solito incorporate in una pagina HTML come
nell’esempio seguente:

<html>
<head>
<title>HelloWorldApplet</title>
</head>
<body>
<p>La riga di testo successiva è un’applet:</p>
<applet code=”HelloWorldApplet.class” width=”300” height=”100”>
Se il browser può visualizzare Java, qui si vedrà un’applet
</applet>
</body>
</html>
Attributi di posizionamento dell’applet
Di seguito è riportata una breve presentazione degli attributi che si possono, o si devono, utilizzare
nel tag applet per definire la posizione dell’applet.

 width, height

Questi attributi sono necessari per definire la larghezza e l’altezza dell’applet.

 align

Questo attributo definisce l’allineamento dell’applet e prevede due opzioni di base.


L’applet può essere un blocco con il testo che le scorre attorno oppure risulta inline e
quindi mobile all’interno di una riga di testo, come se si trattasse di un carattere di testo
sovradimensionato. I primi due valori (left e right) impostano l’applet in modo che il testo
possa scorrerle attorno, gli altri attributi fanno invece scorrere l’applet insieme al testo. Le
opzioni disponibili sono descritte nella seguente tabella:

Attributo Descrizione
left Colloca l’applet lungo il margine sinistro della pagina. Il testo della
pagina scorre a destra dell’applet
right Colloca l’applet lungo il margine destro della pagina. Il testo della pagina
scorre a sinsitra dell’applet
top Fa coincidere la parte superiore dell’applet con la parte superiore della
riga corrente
texttop Fa coincidere la parte superiore dell’applet con la parte superiore del
testo della riga corrente
middle Fa coincidere la parte centrale dell’applet con la linea di base del testo
della riga corrente
absmiddle Fa coincidere la parte centrale dell’applet con la parte centrale della riga
corrente
baseline Fa coincidere la parte inferiore dell’applet con la linea di base del testo
della riga corrente
bottom Fa coincidere la parte inferiore dell’applet con la parte inferiore del testo
della riga corrente
absbottom Fa coincidere la parte inferiore dell’applet con la parte inferiore della
riga corrente
vspace, hspace Questi attributi facoltativi definiscono lo spazio in pixel sopra e sotto
l’applet (vspace) e ai lati dell’applet (hspace)
Attributi dell’applet per il codice
Gli attributi dell’applet indicati e descritti di seguito dicono al browser come localizzare il codice
dell’applet.

 code

Questo attributo definisce il nome del file della classe dell’applet. Il nome del percorso
deve coincidere con il pacchetto della classe dell’applet. Per esempio:

code=”com/mycompany/MyApplet.class”

oppure

code=”com.company.MyApplet.class”

Dopo che il caricature delle classi del browser ha caricato la classe che contiene l’applet,
può rendersi conto che sono necessari altri file delle classi e li carica.

 codebase

Questo attributo facoltativo è un URL che individua i file della classe. Di solito si tratta di un
URL relativo che fa riferimento a una directory secondaria

aDirectory
|--MyPage.html
|--myApplets/
|--CalculatorApplet.class

In questo caso si può utilizzare il tag indicato di seguito nel file MyPage.html:

<applet code=”CalculatorApplet.class” codebase=”myApplets” . . . >

 archive

Questo attributo facoltativo elenca il file o i file dell’archivio Java che contengono le classi e
le altre risorse utilizzate dall’applet. Questi file vengono prelevati dal web server prima di
caricare l’applet in modo da accelerare significativamente il caricamento, dato che è
necessaria una sola richiesta http per caricare un file JAR (Java Archive) che contiene molti
più file piccoli. Più file JAR sono separati da virgole:

<applet code=”CalculatorApplet.class” archive=”CalculatorClasses.jar”,


“othersArchive.jar width=”…” height=”…”>
 object

Questo attributo permette di specificare il nome di un file che contiene l’oggetto applet
serializzato. Un oggetto è serializzato quando si scrivono tutti i suoi campi istanza in un file.
Per visualizzare l’applet l’oggetto deve essere deserializzato dal file per ritornare allo stato
precedente. Quando si utilizza questo attributo non viene chiamato il metodo init ma il
metodo start dell’applet. Prima di serializzare un oggetto applet, si deve chiamare il suo
metodo stop. Questa funzione è utile quando si implementa un browser che ricarica
automaticamente le sue applet e le restituisce nello stesso stato che avevano quando il
browser era chiuso. SI tratta di una funziona abbastanza specialistica che di solito i
progettisti delle pagine web non incontrano.
In ogni tag applet devono essere presenti gli attributi di code o object, come nell’esempio:
<applet object=”CalculatorApplet.ser” width=”100” height=”150”>

 name

Chi lavora con gli script desidera assegnare all’applet un attributo name per identificarla.

Utilizzare i parametri per passare informazioni alle applet


Così come le applicazioni possono utilizzare informazioni della riga di comando, le applet possono
utilizzare parametri incorporati nel file HTML, mediante la definizione di un tag di nome param
seguito dall’impostazione degli attributi definiti.

 Si consideri per esempio di voler permettere alla pagina web di determinare lo stile del
font da utilizzare nell’applet e di voler aggiungere un parametro size relativo al font:

<applet code=”HelloWorldApplet.class” width=”200” height=”200”>


<param name=”font” value=”Helvetica”/>
<param name=”size” value=”24”/>
</applet>

 Il codice che segue indica come si possono ricavare I parametri dalla classe Applet:

public void init() {


String fontName = getParameter(“font”);
int fontSize = Integer.parseInt(getParameter(“size”);
}

I parametri vengono sempre restituiti come stringhe. E’ necessario pertanto convertire la


stringa in un tipo numerico, quando necessario.
Multimedialità
Le applet possono gestire immagini e audio. Di solito i file che contengono queste informazioni
vengono indicato come URL, per cui vale la pena considerare prima la definizione degli URL.

Incapsulare gli URL


Un URL non è altro che una descrizione di una risorsa di Internet. Per esempio,
http://java.sun.com/index.html” dice al browser di utilizzare il protocollo di trasferimento di
ipertesti per il file index.html che si trova sul server java.sun.com. Java ha una classe URL che
incapsula gli URL.

 Per costruire un URL si assegna una stringa al costruttore come segue:

Url u = new URL(http://java.sun.com/index.html);

Questa istruzione prende il nome di URL assoluto dato che viene definite il nome complete
della risorsa.

 Un altro costruttore URL può utilizzare un URL relativo:

URL data = new URL(u, “data/planets.dat”);

In questo caso si specifica il file planets.dat, che si trova nella directory secondaria data
dell’URL u.

 Per ricavare l’URL della pagina HTML che contiene l’applet si utilizza il metodo

Url u = getDocumentBase();

 Per ricavare l’URL della directory del codebase dell’applet si ricorre al metodo

Url u = getCodeBase();
Ottenere i file multimediali

 I metodi getImage e getAudioClip permettono di ottenere i file delle immagini e degli


audio, come nel seguente esempio:

Image cat = getImage(getCodeBase(), “image/cat.gif”);


AudioClip meow = getAudioClip(getCodeBase(), “audio/meow.au”);

 Per riprodurre un clip audio è sufficiente richiamare il suo metodo play. Si può anche
chiamare il metodo play della classe Applet senza avere caricato il clip audio:

play(getCodeBase(), “audio/meow.au”);

Per effettuare un download più veloce, gli oggetti multimediali possono essere memorizzati in file
JAR. I metodi getImage e getAudioClip/play cercano automaticamente nei file JAR dell’applet. Se il
file immagine o audio si trova nel file JAR, viene caricato immediatamente, altrimenti il browser lo
richiede al server web.

Il contesto delle applet


Per comunicare con il browser, un’applet chiama il metodo getAppletContext, il quale restituisce
un oggetto che implementa un’interfaccia di tipo AppletContext. Si può pensare
all’implementazione concreta dell’interfaccia AppletContext come a un percorso di comunicazione
tra l’applet e il browser circostante.

Inter-applet communication
Una pagina web può contenere più di un’ applet. In particolare, se contiene più applet dello stesso
codebase, questo possono comunicare tra loro anche se si tratta di una tecnica avanzata che non
si userà spesso.

Se nel file HTML si assegnano attributi name a ogni applet, si può utilizzare il metodo getApplet
dell’interfaccia AppletContext per recuperarne il riferimento.

 Si assuma per esempio che il file HTML contenga il tag indicato di seguito:

<applet code=”Chart.class” width=”100” height=”100” name=”Chart1”>

 Si consideri ora la seguente chiamata:

Applet chart1 = getAppletContext().getApplet(“Chart1”);

Si possono anche elencare tutte le applet su una pagina web, che sia o meno presente un
attributo name. Il metodo getApplets restituisce un oggetto di enumerazione.
 Di seguito + indicato un ciclo che visualizza i nomi delle classi di tutte le applet della pagina
corrente:
Enumeration e = getAppletContext().getApplets();
while(e.hasMoreElements) {
Object a = e.nextElement();
System.out.println(a.getClass().getName());
}

 Un’applet non può comunicare con un’applet di una pagina web differente.

Visualizzare i vari elementi nel browser


E’ possibile accedere a due aree dei browser: la riga di stato e l’area di visualizzazione della pagina
web. In entrambi i casi si utilizzano metodi della classe AppletContext.

 Il modo più semplice per dire al browser di mostrare una pagina web diversa, consiste nel
chiamare showDocument con un argomento, l’URL della pagina che si vuole visualizzare:

URL u = new URL(http://java.sun.com/index.html);


getAppletContext.showDocument(u);

Questa chiamata, però, apre la nuova pagina web nella stessa finestra della pagina
corrente, disattivando quindi l’applet. Per ritornare all’applet, l’utente dovrà fare clic sul
pulsante BACK del browser.

 Si può dire al browser di visualizzare il documento in un’altra finestra fornendo un secondo


parametro nella chiamata di showDocument, tra quelli illustrati nella seguente tabella:

Parametro di destinazione Posizione


“_self” o nessuno Visualizza il documento nel frame corrente
“_parent” Visualizza il documento nel frame genitore
“_top” Visualizza il documento nel frame di livello maggiore
“_blank” Visualizza il documento in una finestra di livello
superiore e senza nome
Qualsiasi altra stringa Visualizza il documento nel frame che ha questo
nome. Se non esiste un frame con questo nome, apre
una nuova finestra e assegnandoglielo

Esempio:

getAppletContext.showDocument(u, “_top”);

Potrebbero piacerti anche