PATH=/opt/net/java/jdk1.1.5/bin/:rest_du_path
CLASSPATH=./:/opt/net/java/APIs/swing-0.7/swing.jar:/opt/net/java/APIs/swing-0.7/jlf.jar:/opt/net/java/APIs/swing-0.7/motif.jar:/opt/net/java/APIs/swing-0.7/windows.jar).
> java Pasiphae
La fenetre principale suivante apparait:
Il y a deux onglets: celui visible initialement, "View", est celui ou sera affichee la hierarchie du site. Il ne contient rien pour l'instant. "Configure" permet de saisir des parametres:
Une fois ces parametres saisis, l'analyse est lance avec le bouton "Go !". Apres la phase de recherche (pour l'instant bloquante), la fenetre de visualisation est accessible. Voici deux resultats, de profondeur egal a 4:
Les radios button en haut de l'onglet "View" permettent de choisir le mode de visualisation: soir par nom d'URL, soir par titre de pages html (qui est le mode par defaut). Voici les meme exemples que precedemment, en mode URL:
On peut egalement "zoomer" une entree. Quand une entree est selectionnee dans l'arbre, un clic sur le bouton "Zoom" (ou un double clic sur l'entree) fait apparaitre une nouvelle fenetre. Cette derniere recense toutes les ressources utilisee par la page (liens html, image gif ou jpeg, divers fichiers accessibles (.ps, .ra, .mpeg, .txt, ...)), et les presentent dans des tables, rangees par categories MIME.
Voici trois exemples:
Trois remarques:
Dans Pasiphae la classe MIMEDoc est la classe mere de toutes les classes representant les differents objets MIME presents sur le web.
Dans la version courante de Pasiphae, plusieurs types MIME sont reconnus: text/plain (texte brut), text/html (page html), image/gif (image au format gif89a ou gif87a), image/jpeg(image au format jpeg), audio/x-mpeg (fichier audio au format mpeg), audio/x-pn-realaudio (fichier audio au format realaudio).
Chaque type MIME est implemente par une classe dont le nom et les methodes suivent des regles precises pour une raison que nous verrons plus bas. celles ci sont:
Chacune de ces classes derive donc de MIMEDoc et implemente un constructeur de la forme:
public MaClasse(HttpURLConnection urlc)et eventuellement une methode parse:
public Vector parse(HttpURLConnection urlc)
Le constructeur doit, a partir de l'objet HttpURLConnection passee en parametre etre capable d'extraire les donnees pertinentes pour la classe, a partir du header HTTP recu.
La methode parse, est elle destinee a parser le contenu du document lui meme. Par exemple, pour la classe TextHtml, c'est dans cette methode que le document Html est parse et que des champs tels que le titre, l'auteur et les differents liens contenus dans la page sont extraits.
Le nom de la classe suit les regles suivantes: si une classe correspond a un type MIME donne, le nom de celle ci doit reprendre le nom du type MIME, en capitalisant la premiere lettre de chacun des sous-type MIME, en supprimant le '/' entre les deux sous-type, et en remplacant chacun des '-' presents dans le nom d'un type MIME par un '_'.
Par exemple le type MIME audio/x-mpeg correspond dans Pasiphae a la classe AudioX_mpeg.
En dernier lieu chacune de ces classes implementent des accesseurs dont le nom commence par 'get': getTitle, getAuthor, getGenerator pour la classe TextHtml
En suivant les regles enoncees ci dessus, il est tres aise d'ecrire une classe correspondant a un type MIME non gere.
Par exemple, si l'on decide d'ecrire une classe qui analyse les fichier compresses au format gzip, c'est a dire correspondant au type MIME application/x-gzip, il faudra implementer une classe nommee ApplicationX_gzip, derivant de MIMEDoc, implementant un constructeur et la methode parse, et presentant par exemple un accesseur 'getCompressionRatio' indiquant le taux de compression du fichier.
Une fois ce fichier ecrit, seul sa compilation sera necessaire pour que le type MIME application/x-gzip soit pris en compte dans l'application lors de son prochain lancement (cf. ci-dessous)
Cette facilite d'ajouter de nouvelles classes correspondant aux differents type MIME est entierement due a l'utilisation de la reflexivite de Java.
Lorsque l'application recupere un document via le protocole HTTP, elle determine le type du document a partir du champ content-type du header HTTP. Une fois cette donnee connue, si une classe implementant ce type MIME existe (c.a.d une classe suivant les regles de nommage enoncees ci-dessus) alors son construicteur est appele pour cree un objet qui sera place dans notre hierarchie de document. Si une telle classe n'existe pas, alors une instance de la classe Unknown est cree.
Par la suite la methode parse() sera appelee sur l'objet nouvellement cree et si celui ci implemente cette methode, de nouvelles informations pourront etre recuperees.
La reflexivite est egalement utilisee dans l'interface graphique. Ainsi, l'interface graphique est capable, pour un objet MIMEDoc donne, de retrouver les methodes d'acces aux donnees membres. Ainsi, l'application sait retrouver les noms des champs a partir des methodes d'access, et donc les faire figurer dans les tables de la fenetre Zoom, en invoquant ces memes methodes.
Un test simple pour verifier cette affirmation consiste en:
String nouvelleColonne;
nouvelleColonne = "coucou !" ;
String getNouvelleColonne() { return nouvelleColonne; }
> javac MIMEDoc.java
A faire:
Ameliorations