XI - Java et le web : les Applets

 

Une applet est une application qui s'exécute au sein d'une page HTML visionnée via un navigateur web. Un tel navigateur comporte sa propre implémentation de la machine virtuelle Java, que nous avons présentée plus haut. Dans ce chapitre, nous allons voir comment écrire une applet en Java et comment l'afficher dans une page web.

 

1. Présentation

Une applet se distingue des applications standard, comme celles que nous avons vues jusqu'à maintenant, de part leur structure et leurs capacités d'accès à des ressources. Par exemple, une applet ne peut pas accéder en lecture ou en écriture au disque dur de la machine sur laquelle elle est exécutée et ne peut communiquer qu'avec le serveur dont elle est issue. Il faut en effet signaler que dans le cas d'une applet, les classes la composant se trouvent sur le serveur, et non pas en local. La JVM intégrée au navigateur (et en particulier le chargeur de classes) doit donc être capable d'aller chercher les classes dont l'applet a besoin, durant son exécution. A noter qu'à défaut de navigateur, il est possible d'exécuter une applet en utilisant le programme appletviewer, livré avec le JDK.

Voyons maintenant comment on appelle une applet à partir d'une page HTML.

 

2. Applets et HTML

Afin de permettre l'inclusion d'une applet dans une page web, Sun a défini un tag HTML nommé <APPLET>. Ce tag admet trois attributs obligatoires, à savoir :

Exemple :

<APPLET CODE=exemple.class WIDTH=100 HEIGHT=100>Applet Java</APPLET>

Le texte situé entre les balises <APPLET> et </APPLET> est affiché si le navigateur utilisé pour visionner la page contenant cette applet n'est pas compatible Java. Il est également possible d'utiliser l'attribut ALT="texte" de la balise <APPLET> mais cela produit le même résultat, tout en étant limité dans le contenu de cette chaîne de texte. Cette balise reconnaît aussi un attribut ALIGN qui permet, très classiquement, de spécifier l'alignement horizontal de l'applet. Un autre attribut peut être intéressant, il s'agit de CODEBASE, qui permet de spécifier une URL ou le chemin d'accès aux différents fichiers composant l'applet. Il existe d'autres attributs que nous ne listerons pas ici car ils ne sont pas souvent utilisés.

Avant de voir comment programmer une applet en Java, signalons la possibilité de spécifier une liste d'arguments, spécifiés dans le code HTML, qui seront passés en argument à l'applet au moment de son exécution. On utilise pour se faire la balise <PARAM NAME=nom VALUE="valeur"> dans laquelle on associe un nom à chaque valeur passée en argument, afin de pouvoir les retrouver coté applet. Noter que cette balise s'utilise entre les balises <APPLET> et </APPLET>.

Exemple :

<APPLET CODE=exemple.class WIDTH=100 HEIGHT=100>

<PARAM NAME=arg VALUE="test">

</APPLET>

Si l'on désire passer plusieurs arguments, il suffit de mettre plusieurs balises <PARAM> les unes à la suite des autres. Nous verrons bientôt comment récupérer ces arguments dans une applet. Etudions maintenant la programmation d'applets Java.

 

3. Programmation d'applets

Au niveau du code, ce qui différencie le plus une application classique d'une applet est l'absence de méthode main(). En effet, on crée une applet en dérivant la classe Applet (qui est d'ailleurs issue de la classe Component de l'AWT) et en redéfinissant un certain nombre des méthodes exécutées tout au long du cycle de vie d'une applet, à savoir :

Il faut noter qu'il n'est pas nécessaire de toujours redéfinir toutes ces méthodes, en pratique on peut ne redéfinir que paint() et utiliser le constructeur de la classe héritée d'Applet pour initialiser l'applet (celui-ci est en effet appelé avant la méthode init(), lorsqu'elle est redéfinie).

Prenons l'exemple d'une Applet minimale :

// MiniApplet.java

//

import java.applet.*;

import java.awt.*;

import java.util.*;

public class MiniApplet extends Applet {

public void paint(Graphics g) {

g.drawString ("Je suis une Applet Java!", 15, 15);

}

}

Dans cet exemple, on crée une classe MiniApplet dérivée de la classe Applet. On ne redéfinit que la méthode paint() dans laquelle on appelle drawString() qui permet d'afficher du texte à l'écran, en spécifiant les coordonnées de celui-ci (15,15). L'objet g, passé en argument de la méthode paint() est issu de la classe Graphics et permet d'effectuer des tracés dans la zone d'exécution de l'applet.

Afin de lancer l'applet précédente, on crée un fichier HTML dont le contenu est le suivant :

<!-- MiniApplet.html -->

<HTML>

<HEAD>

<TITLE>Mini Applet</TITLE>

</HEAD>

<BODY>

<APPLET CODE=MiniApplet.class WIDTH=200 HEIGHT=100 ALIGN=MIDDLE></APPLET>

</BODY>

</HTML>

L'exécution de cette Applet se fait en lançant l'Appletviewer comme suit :

appletviewer MiniApplet.html, on obtient alors à l'écran l'affichage suivant :

On peut bien sûr utiliser un navigateur web. Avec Netscape, on obtient :

 

Prenons un autre exemple, tout aussi simple, montrant comment exploiter les arguments d'une applet, issus du fichier HTML :

// AppletArgs.java

//

import java.applet.*;

import java.awt.*;

import java.util.*;

public class AppletArgs extends Applet {

public void paint(Graphics g) {

String param = getParameter("nom");

g.drawString ("Je suis une Applet Java!",

15, 15);

g.drawString ("Valeur du parametre nom : "

+ param, 15, 30);

}

}

On constate que c'est grâce à la méthode getParameter() que l'on récupère la valeur associée au nom indiqué en argument, dans une chaîne de caractères.

Le fichier HTML appelant cette applet est reproduit ci-dessous :

<HTML>

<HEAD>

<TITLE>AppletArgs</TITLE>

</HEAD>

<BODY>

<APPLET CODE=AppletArgs.class WIDTH=200 HEIGHT=100 ALIGN=MIDDLE>

<PARAM NAME=nom VALUE="test!">

</APPLET>

</BODY>

</HTML>

Il serait possible de présenter de nombreux exemples d'applets, beaucoup plus complexes, effectuant des tracés ou jouant des animations, du son etc. mais nous sortirions du cadre de cette étude qui a plus pour objet de présenter une technologie telle que Java plutôt que de constituer un document de référence sur son API. Il peut être cependant intéressant de consulter les exemples d'applets livrés avec le JDK.