tâches personnalisées. Il en existe une
notamment qui est souvent très utile, il
s'agit de la zone "-post-compile" :
<target name="-post-compile">
<!-- Empty placeholder ... -->
<!-- You can override this target ... -->
</target>
Nous utiliserons donc la tâche <move> afin
d'obtenir notre déplacement :
<target name="-post-compile">
<move todir="${build.web.dir}">
<fileset dir="${build.classes.dir}" />
</move>
</target>
Tâche move
permet le déplacement ou le renommage de
fichiers ou un répertoire, ou pour les
renommer, nous pouvons utiliser l'élément
fileset, qui permet de manipuler des jeux de
fichiers. Voici les attributs possibles pour
cette tâche move :
file
Spécifie le fichier à déplacer.
Obligatoire, en l'absence de
spécification de fileset.
tofile
Spécifie le fichier de destination du
déplacement. tofile ou todir doit être
spécifié.
todir
Le répertoire vers lequel a lieu le
déplacement. tofile ou todir doit être
spécifié.
Voici quelques exemples d'utilisation :
<move file="faux.java" tofile="vrai.java" /
>
renomme un fichier.
<move file="echec.java" todir="jeu/" />
déplacement d'un fichier.
<move todir="premier">
<fileset dir="deuxième" />
</move>
renomme le répertoire.
tâche fileset
Les jeux de fichiers (marqueurs <fileset>)
sont utilisés pour spécifier des ensembles de
fichiers. Ces marqueurs sont normalement
des marqueurs internes à d'autres
marqueurs comme move,copy,delete, etc.
dir
Répertoire d'origine pour la définition
des fichiers.
includes
Liste des noms de fichiers, séparés par
des virgules. Si omis, tous les fichiers
sont ajoutés.
excludes
Liste de tous les fichiers à exclure.
tâche copy
Permet de copier plusieurs fichiers dans un
répertoire. Les fichiers du répertoire source
ne sont copiés que s'ils sont plus récents que
ceux du répertoire de destination ou
lorsqu'ils n'existent pas déjà dans le
répertoire de destination.
file
Le fichier à copier. Au cas où aucun
élément fileset n'est spécifié, file est un
attribut obligatoire.
tofile
Fichier de destination. Est utilisé si
l'attribut file est défini.
todir
Répertoire de destination. A spécifier
lors de la définition de l'attribut file ou
d'un jeu de fichiers.
}
class Texte extends JLabel implements MouseListener {
private Color couleurSurvol, couleurNormale;
public Texte(String invite) {
super(invite);
this.setFont(new Font("Verdana", Font.BOLD, 28));
this.addMouseListener(this);
}
public void setCouleurSurvol(Color couleur) {
couleurSurvol = couleur;
}
public void setCouleurNormale(Color couleur) {
this.setForeground(couleurNormale = couleur);
}
public void mouseEntered(MouseEvent e) {
this.setForeground(couleurSurvol);
}
public void mouseExited(MouseEvent e) {
this.setForeground(couleurNormale);
}
public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>C'est chouette...</title>
</head>
<body>
<h2 align="center">C'est chouette...</h2>
<hr />
<div align="center">
<applet code="texte.TexteApplet.class" width="350" height="250"></applet>
</div>
</body>
</html>
Analyse de l'applet
L'applet TexteApplet de cette étude utilise trois classes : l'applet elle-même TexteApplet,PanneauImage et Texte. Nous
savons que la balise <applet> fait référence au fichier de classes qui contient la classe applet :
<applet code="texte.TexteApplet.class" width="350" height="250"></applet>
Lorsque le navigateur lit cette ligne, il se connecte au serveur Web et recherche le fichier "TexteApplet.class". Le
chargeur de classes de la machine virtuelle du navigateur charge la classe TexteApplet de ce fichier. Lors du
processus de chargement, le chargeur de classes doit résoudre les références aux autres classes utilisées par cette
classe. Il sait alors qu'il a éventuellement besoin de plus d'une classe pour exécuter l'applet et, en ce cas, se
connecte de nouveau au serveur Web, un pour chaque fichier de classe. Le chargement d'une applet peut alors
nécessiter plusieurs minutes pour peu que le réseau soit lent.
Il faut bien comprendre que ce temps de chargement n'est pas dû à la taille des fichiers classes, relativement
petits, mais à la surcharge considérable découlant d'une connexion avec un serveur Web.
Java supporte donc maintenant une méthode améliorée pour le chargement de fichiers de classes : elle permet de
rassembler tous les fichiers de classes nécessaires en un seul fichier. Ce fichier peut alors être chargé grâce à une
requête HTTP unique vers ce serveur. Ces fichiers sont appelés fichiers JAR (acronyme de "Java Archive"). Ils
peuvent contenir à la fois des fichiers de classes et d'autres types de fichiers comme des fichiers images et audios.
Les fichiers JAR peuvent également être compressés au format de compression classique ZIP, ce qui réduit le
temps de téléchargement.
Compression des fichiers
Il est possible de compresser des éléments de fichier JAR avec le standard de compression ZIP. Les fichiers JAR sont
totalement compatibles avec les archives ZIP bien connues des utilisateurs Windows.
La compression accélère le transfert de classes sur un réseau. Un rapide survol de la distribution SDK montre
qu'un fichier de classe classique se trouve réduit d'environ 40% après compression. Les fichiers texte de type
HTML ou ASCII sont réduits de plus de 75%, donc à un quart de leur taille d'origine ! Par contre, les fichiers
images ne gagnent rien à être compressés ; les formats d'image courants possèdent une compression interne.
En termes d'envoi sur le réseau, la compression n'est pas le seul avantage d'un fichier JAR. Placer toutes les
classes dans un seul fichier JAR les rend téléchargeables en une seule transaction. Supprimer le coût des
requêtes HTTP est une réelle économie, dans la mesure où un fichier de classe est généralement de petite taille, et
qu'une applet en utilise beaucoup. D'un autre côté, sur une connexion à faible débit, le temps de démarrage peut
augmenter si un gros fichier JAR doit être descendu avant que l'applet ne soit lancée.
Création d'une archive par l'intermédiare de l'utilitaire jar
L'utilitaire jar livré avec le SDK permet de créer et de lire les fichiers JAR. Dans l'installation par défaut, cet outil se trouve
dans le répertoire <jdk/bin>. Son interface utilisateur ressemble à la commande tar (tape archive) du monde d'UNIX.
La commande jar doit se conformer à la syntaxe suivante :