Zur Vorbereitung macht Ihr
cd ~/MeinProgrammverzeichnisFuerDasFuenfteProgramm ln -s ~co2-001/webum das
web
-Package verfügbar zu haben. In Euren Java-Dateien müßt
Ihr dann (wo diese Klassen benutzt werden) ein
import web.*;schreiben. Aber das kennt Ihr ja alles schon. Dokumentation ist natürlich auch verfügbar.
Test.java
an und probiert es am besten selbst einmal aus.
An ihm könnt Ihr ganz leicht die drei Schritte sehen, die Ihr zum verarbeiten von WWW-Seiten durchführen müßt:
SimpleUserAgent
erzeugt werden. Der benötigt einen Namen, unter dem er sich bei
den abgefragten Servern vorstellt. Hier könnt Ihr Euch etwas
ausdenken, solange der String relativ kurz ist. Der
SimpleUserAgent
wird bei beim fünften Programm
nur ein Mal pro Suchvorgang
erzeugt und dann zum Abfragen aller Seiten benutzt.
Das Erzeugen neuer SimpleUserAgents
für jede Seite
ist Ressourcenverschwendung.
SimpleUserAgent
in Form von WebPage
-Instanzen geben
lassen (retrievePage
).
WebPage
läßt sich dann bequem wie
eine Liste durchlaufen, wobei all die HTML-Steuerbefehle
automatisch übersprungen werden. Mit getCurrent
bekommt Ihr dabei das aktuelle PageItem
, was entweder für
ein normales Wort oder die URL eines Links steht.
Mit getType
könnt
Ihr abfragen, was es ist.
Mit getTitle
läßt sich der Titel dieser Web-Seite erfragen, so daß Ihr ihn zusammen
mit der URL angeben/abspeichern könnt. So erfährt der Benutzer Eurer
Suchmaschine nicht nur, unter welcher URL sein Suchbegriff zu finden ist,
sondern auch, was der Titel der jeweiligen Seite ist.
SimpleUserAgent
(noch?) nicht, Seiten außerhalb
unseres Fachbereichs abzurufen. Wenn Ihr es probiert, erhaltet Ihr
eine normale IOException
mit dem Inhalt "Site
off limits
", ähnlich dem, was passiert, wenn Ihr z.B. eine
URL ansprecht, die es gar nicht gibt. Das passiert zum Beispiel
dann, wenn Ihr sie auf einer Seite gefunden habt, wo sie jemand falsch
eingetragen hat.
Da Ihr außerdem vermeiden sollt, Seiten mehrfach abzurufen, steigt
SimpleUserAgent
sofort aus, sobald er erkennt, daß er
solche eine Seite schon mal geholt hat. Das machen wir so, weil Ihr es
sonst wahrscheinlich nichteinmal merken würdet, wenn Ihr Seiten
mehrfach anfragt. (Und er wirft nicht bloß eine Exception, weil viele
von Euch die eh nur auffangen und dann ignorieren catch(Exception e)
{}
"...)