Visualisierung der Linkstruktur von Web-Dokumenten auf Basis des Google Web APIs Studienarbeit im Fach Informatik Wintersemester 2005/2006 Universität Jena vorgelegt von Jens Fischer 20. März 2006 Abstract Diese Studienarbeit beschäftigt sich mit der Untersuchung der Linkstruktur von HTMLkodierten Webdokumenten. Dazu werden eingehende und ausgehende Links von Webdokumenten mit Hilfe des entwickelten Servlets GLinks untersucht und dargestellt. Im ersten Teil der Arbeit soll eine Übersicht der verwendeten Technologien gegeben werden. Dabei werden im Einzelnen Web Services und deren aktuell verwendeten Protokolle betrachtet. Danach wird ein Überblick über den Google Web Service gegeben und die Verwendung von Java Servlets kurz dargestellt. Im zweiten Teil der Arbeit wird die Umsetzung dieser Technologien in einem Java Servlet unter Nutzung des Google Web Service betrachtet. Hierbei sollen eingehende sowie ausgehende Links zu den jeweiligen Suchergebnissen ermittelt, angezeigt und mit einer komfortablen Navigation versehen werden. Zur Verdeutlichung der Funktionsweise werden einige Testläufe der Anwendung durchgeführt. 1 Inhaltsverzeichnis 1 Einleitung 3 2 Web Services 2.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Das Simple Object Access Protokoll - SOAP . . . . . . . 2.3 Die Web Service Description Language - WSDL . . . . . . 2.4 Universal Description, Discovery and Integration - UDDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 . 5 . 7 . 10 . 12 3 Der Google Web Service 14 3.1 Allgemeines über Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2 Der Google Web Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4 Java Servlets 17 5 Das 5.1 5.2 5.3 5.4 20 20 20 21 21 GoogleLinks-Servlet Zielstellung . . . . . . Arbeitsumgebung . . . Umsetzung . . . . . . Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Zusammenfassung und Ausblick 34 A WSDL-Dokument 36 B Einige UDDI-Server 38 C Exkurs: Das Hypertext Transfer Protocol - HTTP 39 D Glossar 42 E Wichtige Internetadressen 46 F Abkürzungen und Akronyme 46 Literaturverzeichnis 47 Index 50 2 1 Einleitung Das derzeitige World Wide Web (WWW) stellt eine riesige, verteilte Wissensbasis dar. Es besteht aus unzähligen HTML-Seiten, Dokumenten und sonstigen Informationsobjekten, die mit Hilfe von Suchmaschinen wie Google[1] durchsucht werden können. Die Ergebnisse solcher Suchmaschinen werden im allgemeinen in Form einer Liste mit Verknüpfungen oder Verweisen (Hyperlinks) zu den jeweiligen Seiten dargestellt. Hyperlinks entsprechen funktional einer Art Querverweis, sie können den Leser innerhalb des Dokumentes zu dem richtigen Textabschnitt bringen. Verweise können aber auch in andere Dokumente führen. Im WWW gestattet die Hypertext Markup Language (HTML) [2] die Verwendung von Hyperlinks innerhalb von Dokumenten. Mit einem Mausklick auf den Link wird das entsprechende Dokument bzw. die entsprechende Stelle im Dokument angezeigt. Diese Links sind unidirektional, d.h. dem Ziel des Links ist nicht bekannt, dass ein Link auf ihn verweist. Wird das Zieldokument umbenannt oder gelöscht, kann der Link im Normalfall, also ohne automatisierte Konsistenzprüfung oder ähnlichem, nicht automatisch korrigiert werden und es entsteht ein toter Link der zu keinem Dokument führt. Während der letzten Jahre ist im WWW neben der Nutzung als Informationsquelle ein weiteres Anwendungsgebiet entstanden. Es werden zunehmend vielfältige Arten von geschäftlichen Transaktionen abgewickelt, sowohl mit privatem als auch mit kommerziellem Hintergrund. Neben dem herkömmlichen browserbasiertem Zugang stellt eine stetig steigende Zahl von Dienstanbietern auch eine Programmierschnittstelle zur Anwendungsentwicklung bereit. Somit besteht die Möglichkeit, diese Dienste, genannt Web Services, direkt aus einer Softwareanwendung heraus zu nutzen. Aktuelle Technologien von Web Services basieren auf manuellen Verfahren zur Publikation, Auswahl und Integration in entsprechenden Anwendungen. Suchmaschinen sind derzeitig die einzige Möglichkeit den riesigen Datenbestand des WWWs zu durchsuchen. Sie verfügen über einen Webrobot (auch Crawler genannt, eine Softwarekomponente) der eigenständig das WWW durchsucht und aktiv neue Webseiten einliest. Der Crawler einer Suchmaschine kann Links in einem HTML-Dokument finden und weiterverfolgen. Auf diese Weise können Dokumente gefunden werden, die noch nicht im Datenbestand der Suchmaschine referenziert sind und werden entsprechend hinzugefügt. Diese Links werden unter anderem auch zur Einordnung der Priorität des Dokumentes verwendet. Grundsätzlich gilt: je mehr Links auf ein Dokument verweisen, desto wichtiger ist es. Dementsprechend wird bei der Anzeige von Suchergebnissen ein Dokument mit vielen eingehenden Links und somit hoher Priorität vor einem Dokument mit niedrigerer Priorität und weniger eingehenden Links aufgeführt. Die Untersuchung solcher Linkstrukturen von Dokumenten soll wesentlicher Bestandteil dieser Arbeit sein. Dabei wird unter anderem der Datenbestand der Suchmaschine Google verwendet. Im Laufe der Zeit hat sich Google zur weltweit bedeutendsten Suchmaschine entwickelt. Verantwortlich hierfür war neben einer hohen Performance und einer einfachen Bedienung vor allem die gegenüber anderen Suchmaschinen überlegene Qualität der Sucher- 3 gebnisse. Der Web Service von Google, das Google Web API [3], stellt eine komfortable Schnittstelle zur Suchmaschine Google bereit. Es kann auf die Inhalte von Googles Datenbestand in Form einer Suchanfrage zugegriffen werden. Die Ergebnisse können entsprechend weiterverarbeitet werden, in diesem Fall soll die Linkstruktur der Suchergebnisse betrachtet werden. Dabei sollen eingehende und ausgehende Links zu den jeweiligen Suchergebnissen ermittelt und in einer Webseite angezeigt werden. Eine Möglichkeit zur Erzeugung dynamischer Webseiten stellen Java Servlets [4] dar. Ein Servlet ist ein Programm, das von einem Browser eine Anfrage erhält und daraufhin dynamisch eine Webseite erstellt und an den Browser sendet. Während dieser Arbeit entstand ein solches Servlet, welches unter anderem den Google Web Service nutzt, um die Linksstruktur von Webdokumenten zu untersuchen. Die Inhalte dieser Arbeit gliedern sich folgendermaßen: Im ersten Kapitel werden die Möglichkeiten von Web Services vorgestellt. Die dazu verwendeten Protokolle werden im Einzelnen betrachtet und wesentliche Eigenschaften vorgestellt. Danach wird der Google Web Service Bestandteil des folgenden Kapitels sein. Die Java Servlet Technologie ist Gegenstand des vierten Kapitels. Im fünften Kapitel wird das entstandene Java Servlet detailiert vorgestellt. Abschließend wird eine kurze Zusammenfassung gegeben. 4 2 Web Services 2.1 Allgemeines A Web service is a software system identified by a URI [RFC 2396], whose public inter” faces and bindings are defined and described using XML. Its definition can be discovered by other software systems. These systems may then interact with the Web service in a manner prescribed by its definition, using XML based messages conveyed by Internet protocols [5].“ Das vorhergehende Zitat ist die offizielle Definition von Web Services des World Wide Web Consortium (W3C) [6]. Sinngemäß übersetzt sind Web Services also Softwareanwendungen, die mithilfe von XML-Nachrichten über das Internet kommunizieren. Mittlerweile existiert eine Vielzahl an Diensten, die man als Web Service bezeichnen kann (z.B. das Abfragen von Aktienkursen oder Suchmaschinenanfragen). Im Allgemeinen existieren bei den meisten momentanen Diensten nur eine Schnittstelle, die es dem Benutzer erlaubt die benötigten Daten einzugeben. Dies erfolgt in der Regel über ein HTML-Formular. Die Möglichkeit direkt aus einer Softwareanwendung auf den Web Service zuzugreifen besteht vielmals noch nicht. Dabei ist gerade diese Zugriffsart von zunehmender Bedeutung: Verschiedene Programme unterschiedlicher Unternehmen sollen unabhängig vom Betriebssystem kommunizieren können und die Abwicklung von Geschäften und Dienstleistungen über das Internet ermöglichen. Genau diese Aufgaben kann man mit Web Services realisieren. Web Services beziehen sich also im engeren technischem Sinn auf die automatisierte Kommunikation zwischen Anwendungen über das Internet und übernehmen eine Vermittlerrolle zwischen Client- und Serverapplikationen. Diese Vermittlerrolle ist nicht neu, sondern wurde bisher durch den Einsatz von Middleware-Technologien wie die Common Object Request Broker Architekture (CORBA) [7] übernommen. Durch die Verwendung von Web Services wird es verschiedenen Anwendungen ermöglicht, Daten auszutauschen und auf entfernten Rechner Funktionen aufzurufen (Remote Procedure Call - RPC). Dafür werden die folgenden Informationen benötigt: • eine komplette Übermittlung der Informationen (Simple Object Access Protocol SOAP [8]) • eine Beschreibung über den Aufbau der zu übermittelnden SOAP-Nachrichten (Web Service Description Language - WSDL [9]) • ein Verzeichnis vorhandener Dienste (Universal Description, Discovery and Integration - UDDI[10]) Der in Abbildung 1 dargestellte Protokollstack zeigt die auf den zugehörigen Schichten verwendeten Protokolle. Im Folgenden werden die verwendeten Schichten und deren Bedeutung kurz vorgestellt: • Service Discovery Layer (Dienst-Entdeckung-Schicht): Diese Schicht ist zuständig für eine zentrale Führung einer Dienste-Liste. 5 • Service Description Layer (Dienst-Beschreibung-Schicht): Diese Schicht ist zuständig für die einheitliche Beschreibung der Schnittstellen von Diensten. • XML Messaging Layer (XML-Nachrichtenschicht): Diese Schicht ist zuständig für Umwandlung bzw. Erstellung von Nachrichten in einheitlichem XML-Format. • Service Transport Layer (Dienst-Transport-Schicht): An dieser Stelle wird der Transport der Nachrichten zwischen den Anwendungen sowie das verwendete Protokoll festgelegt. Abbildung 1: Protokollstack Unter Verwendung dieser Technologien könnte eine Anfrage einer Anwendung zur Ermittlung eines Aktienkurses wie folgt ablaufen: Zunächst stellt der Client eine Anfrage an einen UDDI-Verzeichnisserver. Dieser sucht einen Web Service aus seinem Datenbestand und sendet die zum Aufruf benötigten Informationen sowie die Adresse des Dienstes in Form eines WSDL-Dokumentes an den Client zurück. Dieser verfügt nun über die notwendigen Informationen zum Formulieren einer SOAP-Nachricht und kann diese mit seinen eigenen Parametern versehen, in diesem Fall wäre dies zum Beispiel die Wertpapierkennnummer (WKN). Der Web Service Anbieter kann beim Eintreffen der Nachricht diese Parameter entsprechend auswerten und wird in diesem Beispiel den aktuellen Aktienkurs in Form einer SOAP-Nachricht an den Client senden. Dieser kann mit dem zugrunde liegendem WSDL-Dokument die erhaltenden Daten korrekt zuordnen und verarbeiten. Das verwendete Transportprotokoll kann dabei beliebig gewählt sein, meistens wird jedoch HTTP (Hypertext Transfer Protocol) [11] oder HTTPS (Hypertext Transfer Protocol Secure) [12] gewählt um den Transport auch durch Firewalls [13] zu gewährleisten. Die Grafik in Abbildung 2 soll den Vorgang verdeutlichen: Im Folgendem sollen die verwendeten Protokolle im Einzelnen betrachtet und vorgestellt werden. 6 Abbildung 2: Schema eines Web Service Aufrufes 2.2 Das Simple Object Access Protokoll - SOAP Das Simple Object Access Protocol (SOAP) stellt einen einfachen Mechanismus zum Austausch strukturierter und typisierter Informationen zur Verfügung. Es ist mittlerweile in der Version 1.2 spezifiziert, allerdings findet sich auch noch die Version 1.1, welche im Mai 2000 beim W3C eingereicht wurde, in Verwendung [14]. SOAP stellt eine einfache, XML-basierte Möglichkeit zur Beschreibung der internen Semantik zur Verfügung. Eine in SOAP verfasste Nachricht setzt sich aus 3 Teilen zusammen: Abbildung 3: Aufbau einer SOAP-Nachricht Der Envelope (Umschlag) ist ein alles umschließendes Element. Der Header ist ein optionaler Mechanismus zum Erweitern der Nachricht, der Body enthält die eigentliche Nachricht. Der SOAP-Envelope muss in jeder Nachricht enthalten sein und darf Deklarationen von 7 Namensräumen und zusätzlichen Attributen enthalten, sofern diese durch einen Namensraum qualifiziert sind. Mit ihm wird ein Regelwerk definiert, womit festgelegt wird, was in der Nachricht steht, von wem die Nachricht wie zu verarbeiten ist und ob einzelne Daten enthalten sein müssen oder optional sind. Der Header stellt eine flexible Erweiterung der Nachricht zur Verfügung. Diese Erweiterungen können ohne vorherige Kenntnisnahme des Empfängers vorgenommen werden, wie zum Beispiel Authentifizierungsmechanismen zur Vermeidung unberechtigter Aufrufe. Falls eine Nachricht auf dem Weg zum endgültigen Empfänger noch Zwischenstationen passiert, an denen schon Teile der Nachricht verarbeitet werden sollen, kann dies im Header festgelegt werden. Da die Verarbeitung des Headers in SOAP optional ist, kann die Verarbeitung für einzelne Empfänger durch Setzten des entsprechenden Attributes (mustUnderstand-Attribut) erzwungen werden. Der SOAP-Body beinhaltet die eigentliche Nachricht, also die Informationen die an Empfängerseite zum Ausführen eines Verarbeitungsprozesses benötigt werden. Die Kodierung der zu übermittelnden Daten erfolgt in einem einfachen Typsystem: Die aktuellen Daten werden zusammen mit dem zugrunde liegendem Datenmodell in die SOAPNachricht übernommen. Auf Empfängerseite können diese somit entsprechend verarbeitet werden. Um eine Nachricht korrekt verarbeiten zu können, benötigt eine SOAP-Anwendung die folgenden Informationen: • Die Form des Nachrichtenaustausches (Einweg, Frage/Antwort, Multicast) • Die Rolle der Anwendung in diesem Nachrichtenwechsel (Ist diese Anwendung der endgültige Empfänger?) • Den eventuellen Einsatz von RPC-Mechanismen • Die Datenrepräsentation und Datenkodierung Beim Eintreffen einer SOAP-Nachricht beim Empfänger werden zunächst diejenigen Teile der identifiziert, die zur Verarbeitung an diesem Empfänger vorgesehen sind. Anschließend wird überprüft, ob der Empfänger auch in der Lage ist, die für ihn bestimmten Nachrichtenteile korrekt zu verarbeiten. Falls nicht wird eine Fehlermeldung zurückgegeben und die Nachricht verworfen. Falls diese Anwendung nicht der endgültige Empfänger der Nachricht ist, wird der für diese Anwendung bestimmte Nachrichtenteil entfernt bevor sie zum nächsten Empfänger weitergeleitet wird. Als Transportprotokoll für die Nachricht wird vielmals HTTP verwendet. Die Verbindung von SOAP und HTTP bringt einige Vorteile mit sich, so wird die Flexibilität von SOAP mit der Stabilität und der reichhaltigen Funktionalität von HTTP kombiniert. SOAP folgt von sich aus dem HTTP-Request/Response (Frage/Antwort) Nachrichtenmodel: SOAP-Request-Parameter werden in einem HTTP-Request übermittelt, analog 8 werden SOAP-Response-Parameter in einem HTTP-Response transportiert. Das folgende Listing zeigt ein solches Request/Response-Schema am Beispiel des Zeitservice von www.nanonull.com [16]: POST /TimeService/TimeService.asmx HTTP/1.1 Host: www.nanonull.com Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://www.Nanonull.com/TimeService/getUTCTime" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getUTCTime xmlns="http://www.Nanonull.com/TimeService/" /> </soap:Body> </soap:Envelope> Listing 1: SOAP-Anfrage über HTTP Wie hier zu sehen ist, besitzt diese Nachricht keinen Header. Mit SOAPAction wird das Ziel der Nachricht definiert. Der Body der Nachricht beschreibt die Funktion getUTCTime. Eine entsprechende Antwort ist in Listing 2 dargestellt: HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getUTCTimeResponse xmlns="http://www.Nanonull.com/TimeService/"> <getUTCTimeResult>120000</getUTCTimeResult> </getUTCTimeResponse> </soap:Body> </soap:Envelope> Listing 2: SOAP Antwort über HTTP Bei der Funktion getUTCTimeRespone handelt es sich um die Antwort (Response) auf eine Anfrage. Als Parameter wird die aktuelle Coordinated Universal Time (UTC), hier 9 12:00:00 Uhr, geliefert. In Situationen mit erhöhtem Sicherheitsbedarf sollte folgendes berücksichtigt werden: SOAP ist kein sicheres Protokoll, sämtliche Daten werden im Klartext versendet. Mechanismen der Verschlüsselung oder Authentifizierung sind nicht vorgesehen. Somit ist nicht sichergestellt, das SOAP-Nachrichten nicht von Unbefugten gelesen oder mitgeschnittene SOAP-Requests sogar erneut ausgelöst werden können. Zurückzuführen ist diese Unsicherheit darauf, dass Aspekte der Sicherheit kein primäres Designziel waren. Angestrebt war die Entwicklung eines möglichst einfachen Protokolls, Sicherheitsaspekte wurden von vornherein an das Transportprotokoll oder die Anwendung delegiert. Ein sicheres Transportprotokoll ist unter anderem HTTPS. HTTPS ist eine sichere Variante des HTT-Protokolls, die Daten verschlüsselt übertragen kann. Die Verschlüsselung basiert dabei auf dem Secure Socket Layer (SSL) [15] und gewährleistet relativ sichere Transaktionen. Auch wenn HTTPS als eigenständiges Protokoll angesehen wird, besteht es eigentlich aus HTTP-Paketen, die SSL-verschlüsselt übertragen werden. Daher können generell alle Daten, die mittels HTTP übertragen werden können, auch mit HTTPS übertragen werden. So kann mit relativ geringem Aufwand eine sichere Kommunikation erfolgen. 2.3 Die Web Service Description Language - WSDL Nachdem im vorherigem Abschnitt eine kurze Übersicht über den Aufbau und die Funktion von SOAP-Nachrichten gegeben wurde, soll im Folgendem eine Möglichkeit zur Beschreibung von Web Services mittels der Web Service Description Language vorgestellt werden. Die erste Version von WSDL wurde im März 2001 beim W3C eingereicht [17]. Mittlerweile befindet sich das Protokoll in der Version 2. WSDL ist wie SOAP auch XML-basiert. Mit WSDL ist es möglich, das Interface eines Web Service zu beschreiben. Es enthält dabei gerade die Informationen, die ein Client benötigt um mit dem Web Service zu interagieren. Dies beinhaltet eine Beschreibung über den Aufbau der SOAP-Nachrichten und die Art und Weise wie mit ihnen zu verfahren ist. Insbesondere wird eine Auflistung aller möglichen ausführbaren Methoden geliefert, einschließlich der zum Aufruf benötigten Parameter sowie der zu erwartenden Rückgabewerte. Ein solches WSDL-Dokument kann im Allgemeinen von einem UDDI-Verzeichnisserver, welcher Gegenstand des nächsten Abschnitts ist, abgerufen werden. Ein WSDL-Dokument ist in 6 Teile unterteilt und wird von dem Wurzelelement <definitions> umschlossen. Die Reihenfolge der in Abbildung 4 dargestellten Elemente ist einzuhalten, da sich jeweils auf vorhergehende Elemente bezogen wird. Es folgt eine kurze Auflistung der Elemente mit ihrer Bedeutung: import> Hier besteht die Möglichkeit, bereits bestehende WSDL-Dokumente einzubinden. < 10 Abbildung 4: Aufbau eines WSDL-Dokumentes 11 types> Beschreibung der verwendeten Datentypen. < messages> Definition der Ein- und Ausgabeparamter. < portType> Zuordnung zu einzelnen Methoden, jede Methode ist dabei durch ein <operation>-Element definiert. < binding> An dieser Stelle wird das verwendete Trägerprotokoll festgelegt. < service> Hier wird der eigentliche Web Service definiert. Dabei handelt es sich um eine Ansammlung von Endpunkten bzw. Adressen untern denen der Service zu erreichen ist. Es ist weiterhin möglich an dieser Stelle mehrere Anschlüsse zu definieren, die entweder ein anderes Trägerprotokoll verwenden oder sich an verschieden Endpunkten befinden. Es muss jedoch in jedem Fall sichergestellt sein, das alle definierten Endpunkte sich gleich verhalten und über die gleiche Funktionalität verfügen. < Im Anhang findet der interessierte Leser ein WSDL-Dokument welches den bereits erwähnten Zeitservice von www.nanonull.com beschreibt. Nachdem nun dargelegt wurde, wie ein Web Service beschrieben werden kann, ist das Auffinden des Web Service Gegenstand des folgenden Abschnitts. 2.4 Universal Description, Discovery and Integration - UDDI Der Universal Description, Discovery and Integration Standard befindet sich aktuell in der Version 3.0, jedoch sind auch noch ältere Versionen in Verwendung. Ein UDDI-Verzeichnisserver ist eine Ansammlung von Web Services und deren Anbieter. Gern wird dieser Service auch mit den Gelben Seiten“ verglichen. Grundsätzlich können ” 3 verschiedene Informationstypen abgelegt werden: • Zum einen sind dies Business-Informationen über Unternehmen und deren Kontaktpersonen. Dieser Informationstyp trägt den Namen White Pages“ ” • Die so genannten Yellow Pages“ enthalten den eigentlichen Service, der vom Un” ternehmen angeboten wird. Vielmals bieten Unternehmen nicht nur einen Web Service an, sondern mehrere. Dementsprechend ist es an dieser Stelle möglich, alle Dienste des anbietenden Unternehmens abzufragen. • Ein weiterer Informationstyp sind die Green Pages“, welche technische Informa” tionen des Web Service enthalten. Technische Informationen sind in der Regel WSDL-Dokumente. Das XML-Schema eines UDDI-Eintrags ist in Abbildung 5 und Listing 3 dargestellt. 12 Abbildung 5: Aufbau eines UDDI-Eintrags Es existieren 4 verschiedene Elementtypen in einem solchen Eintrag. <BusinessEntity> repräsentiert einen Eintrag in der Registry, wobei dieser mehrere Dienste umfassen kann, die jeweils als <BuisinessTemplate> deklariert sind. Jedes <BusinessService>Element besitzt ein <BindingTemplate>-Element, welches die Adresse des Web Service enthält oder einen Verweis auf ein tModel. Ein tModel enthält Informationen zur technischen Beschreibung des Service, wie zum Beispiel ein WSDL-Dokument, das ebenfalls die Adresse des Web Service beinhaltet. <businessEntity businessKey="..."> <businessEntity businessKey="..."> <name> ... </name> <description> ... </ description > <contacts> ... </ contacts > <businessServices> <businessService serviceKey="..."> ... </businessService> ... </businessServices> </businessEntity> Listing 3: XML-Schema eines UDDI-Eintrags Um auf die Daten einer UDDI-Registry zuzugreifen oder neue Einträge hinzuzufügen, wird im Allgemeinen stets SOAP über HTTP verwendet. Im Anhang ist eine Auflistung 13 einiger UDDI-Server zu finden. Einige der anbietenden Unternehmen gleichen ihre Inhalte in regelmäßigen Abständen untereinander ab. Nach dieser kurzen Vorstellung der Web Service-Technologien wird nun ein konkreter Web Service vorgestellt. 3 Der Google Web Service 3.1 Allgemeines über Google Die Firma Google Inc. mit Sitz in Mountain View (USA) ist Betreiber der Suchmaschine Google. Am Tag der Firmengründung, dem 7. September 1998, ging die Suchmaschine offiziell ans Netz. Seit dem verzeichnet die Suchmaschine zunehmende Nutzerzahlen, so dass sie mittlerweile die populärste Suchmaschine sein dürfte. Aus der Vielzahl der im allgemeinen werbefinanzierten und somit kostenlosen Dienstleistungen soll an dieser Stelle ein Auswahl der populärsten Dienste vorgestellt werden. Ausführlichere Informationen zu allen Bereichen sind auf den Internetseiten von Google [1] zu finden. • Die Volltextsuche nach Textdokumenten im WWW ist die wohl bekannteste und am häufigsten genutzte Dienstleistung. Google ist in der Lage, neben der für Webseiten üblicherweise verwendeten Sprache HTML andere Dokumententypen wie etwa das Portable Document Format (PDF) von Adobe oder das Doc-Format von Microsoft zu untersuchen. Neben dieser großen Vielfalt an untersuchten Dokumenten hat auch die Relevanz der Dokumente maßgeblich zu Googles Erfolg beigetragen: Google schafft es im Vergleich zu anderen Suchmaschinen sehr gut, die am meisten relevanten Dokumente einer Suchanfrage auf vorderen Positionen anzuzeigen. • Googles Bildsuche findet Bilddateien im WWW und verwendet dazu Wörter im Dateinamen oder in HTML-Dokumenten, die ein Bild verwenden. Dabei werden die zur Zeit gängigsten Grafikformate wie JPEG, PNG und GIF unterstützt. Eine Suche nach Bildinhalten oder zu einem gegebenen Bild ähnlichen Bildern ist nicht möglich. • Google Groups ist ein umfangreiches Archiv von Newsgroup-Artikeln, die bis ins Jahr 1981 zurückreichen. Innerhalb der verschiedensprachigen Diskussionsforen kann nach Begriffen und Autoren gesucht werden. Zusätzlich wird das Anlegen von eigenen Diskussionsforen unabhängig vom Usenet [18] angeboten. • Das Webverzeichnis Google Directory bietet einen Überblick von Websites, die manuell nach Themen katalogisiert wurden. • Unter Googles Nachrichtendienst Google News werden regelmäßig die Seiten diverser Nachrichten-Webseiten mittels Really Simple Syndication - RSS [19] auf Neuigkeiten untersucht. Die so gefundenen Artikel werden gruppiert nach Themen oder bestimmten Ereignissen dargestellt und auf den Ursprung der Artikel verwiesen. 14 • Mit Froogle kann man nach bei Online-Händlern angebotenen Waren suchen und einen Preisvergleich durchführen. • Der E-Mail Service Gmail (in Deutschland Google Mail) ist Googles E-Mail-Dienst. Er zeichnet sich durch eine einfache webbasierte Benutzerschnittstelle und überdurchschnittlich viel Speicherplatz aus. • Googles Übersetzungsdienst bietet eine automatische Übersetzung zwischen einigen Sprachen für komplette Webseiten an. Zusätzlich können auch einzelne Wörter ober Sätze eingegeben und übersetzt werden. • Der Google Calendar ist ein von Google angebotener Onlinekalender. Er informiert unter anderen per E-Mail über bevorstehende Ereignisse und kann auch von mehreren Benutzern verwaltet werden. • Google Maps ist ein Dienst, mit dessen Hilfe Satellitenbilder angesehen werden können. Weiterhin stehen Funktionen wie Hotel- und Adress-Suche zur Verfügung, wobei die Ziele auf einem Satellitenbild entsprechend dargestellt werden. • Personalisierte Suche: Seit Mai 2005 bietet Google seinen Benutzern die Möglichkeit, eine personalisierte Startseite zu erstellen, um verschiedene bereits vorhandene Google-Dienste zu personalisieren. Zusätzlich werden weitere Informationen wie Wettervorhersagen und News angegeben. Dies stellt nur eine Auswahl der von Google angebotenen Dienste dar. Das vollständige Angebot ist auf den Webseiten von Google zu finden [1]. 3.2 Der Google Web Service Google stellt mit seinem Web Service eine einfache und komfortable Schnittstelle zum Zugriff auf die Suchmaschine zur Verfügung. Dabei stehen neben der von www.google.de bekannten Suche nach Internetdokumenten auch der Aufruf von Seiten aus dem Google Cache (Cache-Request, Cache = engl. Zwischenspeicher) sowie die eine Rechtschreibprüfung zur Korrektur von Tippfehlern (Spelling-Request) zur Verfügung. Im Folgendem soll die Verwendung als Suchmaschine näher betrachtet werden. Google stellt neben den bereits bekannten SOAP-Nachrichten weitere Möglichkeiten zum Zugriff auf seinen Service zur Verfügung. Dies sind unter anderem vorgefertigte Programmpakete bzw. Module, die für verschiedene Programmiersprachen Java [20] oder Visual Basic .NET [21] zur Verfügung stehen. Diese verwenden allesamt selbst SOAPNachrichten, sind jedoch ohne Kenntnisse in SOAP oder WSDL einfach in bestehende Programme zu integrieren. Um den Service zu nutzen, wird ein Zugangsschlüssel (key) benötigt. Diesen erhält man 15 nach erfolgter Anmeldung beim Google Web Service. Mit dem Schlüssel ist man berechtigt, bis zu 1.000 Suchanfragen an Google zu stellen. Pro Anfrage werden höchstens 10 Ergebnisse geliefert. Unterstützt werden in der Suchanfrage alle Möglichkeiten, die auch von Google’s Webseite bekannt sind. So ist es unter anderem Möglich, für ein Internetdokument alle bei Google bekannten eingehenden Links auflisten zu lassen, indem das Präfix link: vor die Adresse des entsprechenden Dokumentes gesetzt wird. Abbildung 6: Ausschnitt http://www.uni-jena.de einer Google-Suche 16 nach eingehenden Links für 4 Java Servlets Ein Servlet ist eine Webkomponente, die von einem Servlet-Container verwaltet wird ” und dynamischen Inhalt generiert. Servlets sind in der Regel kleine plattformunabhängige Java-Klassen. Ein Servlet kommuniziert“mit einem Webclient (z.B. einem Brow” ser) über Anfrage- und Antwort-Objekte (Request und Response), die in einem ServletContainer implementiert sind. Diese Anfrage- und Antwort Objekte können sowohl protkollunabhängig sein, als auch auf dem Hypertext-Transfer-Protokoll (HTTP) basieren. [22]“ Das vorhergehende Zitat stellt eine Definition von Servlets dar. Demzufolge ist ein Servlet ein kleines Programm, das eine Anfrage von einem Browser bekommt und darauf eine Webseite dynamisch erstellt und an den Browser sendet. Dynamisch bedeutet in diesem Zusammenhang, dass das Servlet individuell für jede Anfrage eine Seite anfertigt und diese an den Client sendet. Der dynamische Inhalt kann zum Beispiel aus einer Datenbank stammen. Die folgende Grafik (Abbildung 6) stellt ein typisches Anwendungsszenario von Servlets dar. Die wesentlichen Bestandteile eines Servlets sind die Schnittstellen ServletRequest und ServletRespone. Mittels ServletRequest ist es möglich Informationen vom bzw. über den anfragenden Client zu erhalten. Analog können mit ServletResponse Informationen vom Server zum Client gesendet werden. Die für die Servlet-Programmierung Abbildung 7: Typische Servlet-Konstellation 17 verwendeten Klassen befinden sich in den Paketen javax.servlet und javax.servlet.http. Ausführliche Beschreibung dieser Pakete und deren Verwendung finden sich auf den Internetseiten der Herstellerfirma SUN Microsystems [23]. Nach einem kurzen Überblick über die Funktionsweise soll nun der bereits angesprochene Servlet-Container näher betrachtet werden. Der Servlet-Container übernimmt eine Vermittlerrolle zwischen anfragendem Programm (z.B. Browser) und dem Servlet. Ein Servlet-Container enthält mehrere Servlets und führt diese durch ihren Lebenszyklus (siehe Lebenszyklus und Abbildung 8). Hierzu stellt der Container die Netzwerkservices bereit, wie zum Beispiel für Anfragen und Antworten der Clients (z.B. Browser). Im allgemeinen wird HTTP als Protokoll unterstützt, einige Servlet Container unterstützen auch andere Protokolle wie HTTPS. Abbildung 8: Servlet Lebenszyklus Der Lebenszyklus eines Servlets läuft folgendermaßen ab: Die Instanziierung des Servlets, also die Erzeugung einer konkreten Instanz der Servlet-Klasse, wird vom ServletContainer übernommen. Dies kann entweder beim Start des Containers erfolgen oder erst wenn eine konkrete Anfrage an das Servlet erfolgt. Nach dieser Instanziierung ist es in der Lage, vom Container weitergeleitete Anfragen entgegenzunehmen und zu beantworten. Dies geschieht durch den Aufruf der Methode init(ServletConfig). Durch die Initialisierung ist es möglich, auf die Konfigurationsdaten zuzugreifen und Operationen, die nur einmal durchgeführt werden müssen wie zum Beispiel das Öffnen einer Datenbankverbindung, zu definieren. Nach Möglichkeit sollten hier also alle Aktionen, die nur einmal durchgeführt werden, an dieser Stelle definiert werden. Falls während der Initialisierung des Servlets eine Fehlermeldung auftritt, die besagt, 18 dass das Servlet nicht im aktiven Zustand gesetzt werden konnte, so geschieht dies in der Regel durch die Ausgabe einer javax.servlet.UnavailableException oder javax.Servlet.ServletException. In beiden Fällen wird die destroy()-Methode zur Freigabe des Servlets nicht aufgerufen. Wenn die Initialisierung erfolgreich beendet wurde, also ohne Ausgabe einer Exception, ist das Servlet bereit um Anfragen zu beantworten. Dies geschieht mit der service()-Methode. Die service()-Methode kann für eine Instanz des Servlets beliebig oft vom ServletContainer aufgerufen werden. Außerdem können auch mehrere Instanzen eines Servlets parallel im Servlet-Container existieren um zum Beispiel die Anzahl der Anfragen, die beantwortet werden können, zu erhöhen. Auch während der Bearbeitung von Anfragen kann das Servlet die beiden bereits erwähnten Fehlermeldungen ausgeben. Dabei bedeutet die javax.Servlet.ServletException an dieser Stelle, das ein Fehler in der Bearbeitung einer Anfrage hervorgerufen wurden und der Servlet-Container die erforderlichen Maßnahmen ergreift um die Anfrage zu beenden. Die Fehlermeldung javax.servlet.UnavailableException besagt, dass das Servlet kurzfristig oder permanent nicht in der Lage ist, eine Anfrage zu bearbeiten. Im Falle einer permanenten Störung wird die destroy()-Methode aufgerufen und die Instanz des fehlerhaften Servlets beendet, andernfalls wird bei kurzfristigen Störungen keine Anfrage seitens des ServletContainers mehr an dieses Servlet geleitet. Der Client erhält dann als Antwort den HTTP-Statuscode 503 - Service unavailable“. ” Der Servlet-Container ist verantwortlich für die Freigabe bzw. Beendigung der ServletInstanz. Dazu ruft er die Methode destroy() auf. In dieser Methode muss sichergestellt werden, dass alle Daten gesichert werden und noch aktive Verbindungen, z.B. zu Datenbanken, korrekt beendet werden. In der Regel beendet der Servlet-Container eine Servlet Instanz, wenn Speicher freigegeben werden soll, der Server heruntergefahren wird oder längere Zeit keine Anfrage an das Servlet gestellt wurde. Nach Aufruf der destroy()Methode ist es nicht mehr möglich, Anfragen an das Servlet zu stellen. Im folgendem Abschnitt soll das im Rahmen der Studienarbeit entstandene Servlet GLinks“vorgestellt werden. ” 19 5 Das GoogleLinks-Servlet 5.1 Zielstellung Das angestrebtes Ziel dieser Arbeit war die Entwicklung eines Servlets, mit dem es möglich ist, die Linkstruktur von HTML-kodierten Internetdokumenten zu untersuchen. Grundlage dafür ist das Google-API, mit dessen Hilfe die zu untersuchenden Webseiten zunächst gesucht werden, aber auch eingehende Links mit der in Abschnitt 3 vorgestellten Funktion gesucht werden können. Die Suche nach ausgehenden Links übernimmt das Servlet selbst. Um eine einfache und intuitive Bedienung zu gewährleisten, ist das Design an die Webseiten von Google angepasst, zusätzlich besteht jedoch für jeden Link die Möglichkeit, nach eingehenden bzw. ausgehenden Links zu suchen und diese entsprechend in übersichtlicher Form darzustellen. 5.2 Arbeitsumgebung Zur Entwicklung und zum Betrieb des Servlets wurden folgende Programme eingesetzt: • SUN NetBeans: NetBeans [24] ist eine Entwicklungsumgebung, die für Java geschrieben wurde, aber grundsätzlich jede Programmiersprache unterstützt. NetBeans selbst ist vollständig in Java geschrieben und kann somit auf jeder beliebigen Plattform mit einer Java 2 kompatiblen Virtual Machine eingesetzt werden. Verwendet wurde hier die Version 4.1, mittlerweile ist auch die Version 5 erschienen. NetBeans ist kostenfrei erhältlich. Der Quellcode ist öffentlich verfügbar und unterliegt der SUN Public License (SPL) [25]. • Apache Tomcat: Apache Tomcat [26] ist im Rahmen des Jakarta Projektes der Apache Software Foundation [27] entstanden und stellt eine Umgebung zur Ausführung von Java-Code auf Webservern dar. Dabei handelt es sich um einen Servlet-Container der neben Servlets auch Java Server Pages (JSP) ausführen kann. Auch wenn Apache Tomcat einen Webserver integriert hat, so wird jedoch vielmals der Apache2 Webserver mit Tomcat als Erweiterung eingesetzt. Die aktuelle Version ist 5.5.16 und ist kostenfrei erhältlich. • Apache2 Webserver: [28] Der Apache Webserver ist ein Produkt der Apache Software Foundation und der meistverbreitete Webserver im Internet. Zurückzuführen ist dies auf die breite Unterstützung verschiedener Betriebssysteme, so werden neben Windows auch Unix, Linux, MacOS sowie weitere Systeme unterstützt. Die aktuelle Version ist 2.2.0 und ist kostenfrei erhältlich. • Java2 Runtime Environment: Das Java Runtime Environment (JRE) ist eine Java Laufzeitumgebung der Firma SUN. Bestandteile sind unter anderem die Java Virtual Machine, welche zum Ausführen von Java-Anwendungen benötigt wird. Die aktuelle Version ist 1.5.0 02-b09 und ist kostenfrei auf der Webseite von SUN erhältlich. • OpenOffice.org: OpenOffice.org ist ein umfangreiches Softwarepaket und bezeichnet sich selbst als Die freie Office-Suite“. Die aktuelle Version ist 2.0.2 und ” 20 steht auf der gleichnamigen Webseite kostenfrei zur Verfügung. Verwendet wurde OpenOffice.org in erster Linie zur Erstellung und Bearbeitung von Grafiken. Weiterhin wird zur Kommunikation mit dem Servlet eine Client-Software benötigt, normalerweise ein beliebiger Browser. Ebenso wird das Google API verwendet. 5.3 Umsetzung Um eine möglichst einfache und intuitive Nutzung zu erlauben, ist der Ablauf bei Suchanfragen an den Ablauf einer herkömmlichen Google-Suche angepasst: Zentrales Element der Startseite ist das Eingabefeld des Suchbegriffes. Weiterhin kann die Suche an dieser Stelle auf deutschsprachige Dokumente beschränkt werden. Da mit einem Zugangsschlüssel zum Google Web Sevice nur maximal 1.000 Anfragen pro Tag möglich sind, gibt es an dieser Stelle die Möglichkeit zur Eingabe alternativer Zugangsschlüssel. Erfolgt an dieser Stelle keine Angabe, so wird der dem Servlet zugeordnete Standardschlüssel verwendet. Für detaillierte Ergebnisse ist es an dieser Stelle schon möglich, zwischen einer normalen und detaillierten Ansicht zu wählen. Die detaillierte Ansicht untersucht automatisch alle vom Google Web Service gelieferten Ergebnisse nach eingehenden und ausgehenden Links. Als Voreinstellung ist die schnellere Normalansicht gewählt. Es kann zu jedem Zeitpunkt zwischen den beiden Ansichten gewechselt werden. Nach Eingabe der Daten in das Formularfeld erfolgt der Aufruf des GoogleLinks-Servlet durch Betätigen der Enter-Taste bzw. des Suchknopfes. Die Formulardaten werden nun vom Servlet verarbeitet. Dieses stellt eine Anfrage an den Web Service von Google um die benötigten Resultate, also die Suchergebnisse, zu erhalten. Die Suchergebnisse werden nun dargestellt, wobei das Design sich ebenfalls an einer typischen Google-Ergebnissseite orientiert. Falls die detaillierte Ansicht ausgewählt wurde, werden an dieser Stelle bereits die Anzahl der ein- und ausgehenden Links für alle Suchergebnisse angezeigt. Andernfalls steht für jedes Suchergebnis ein Link zum Erfragen der eingehenden Links sowie ein Link zum Erfragen der ausgehenden Links zur Verfügung. Nach Aufruf einer dieser Links werden die Resultate an entsprechender Stelle angezeigt. 5.4 Implementierung Die Startseite index.html Als Ausgangspunkt wird die Webseite index.html verwendet. In ihr wird neben des verwendeten Zeichensatzes auch festgelegt, wer Empfänger der Formulardaten ist, in diesem Fall also das Servlet GoogleLinks. Zum Übermitteln der Daten wird die HTTPMethode get verwendet. get fordert die Informationen eines Servers unter Angabe einer Internetadresse (URL) an. Das heißt, die zu übertragenen Daten werden in der URL übermittelt und entspricht folgendem Schema: 21 http://host/Servlet?Parameter1=Wert1?Parameter2=... Alternativ kann die Übertragung mittels der HTTP Post-Methode erfolgen, wobei die Daten hierbei nicht in der URL übermittelt werden sondern nicht sichtbar im HTTPHeader. Detaillierte Informationen zum HTTP-Standard sind im Anhang zu finden. Listing 4:Auszug aus index.html Das Servlet GoogleLinks Die Klasse GLinks erbt von der abstrakten Klasse HttpServlet aus dem zugehörigen Paket javax.servlet.http. Nach der Initialisierung des Servlets wird die Methode doGet() aufgerufen. Alternativ kann auch die Methode doPost() verwendet werden, beide übergeben Objekte der Klassen HttpServletRequest und HttpServletResponse an die Methode ProcessRequest. Es werden bei jedem Aufruf des Servlets folgende Parameter übergeben: TextBox: Enthält den Suchbegriff bzw. die Suchbegriffe. PushButton: Der Wert des Search“-Buttons ” meta: Falls nur deutsche Webseiten gesucht werden sollen, wird dies hier festgelegt. Page: Legt fest, welche Seite der Suchergebnisse angezeigt werden soll. Item: Legt das zu untersuchende Element in der Ergebnissliste fest. ItemPage: Legt fest, welche Operation für das in Item festgelegte Element ausgeführt werden soll. InOut: Legt fest, ob es sich um eingehende oder ausgehende Links handeln soll. CheckBox: Legt die Form der Ansicht fest:detailiert oder kompakt. key: der verwendete Zugangsschlüssel für das Google-API UseCache: Legt fest, ob Daten aus dem Cache verwendet werden sollen. Die beim Aufruf übergebenen Parameter werden vom Servlet-Container immer unter einem Namen und dem dazugehörigen Wert gespeichert. Es ist möglich, das unter einem Parameternamen mehrere Werte vorhanden sind. Um in einem Servlet auf diese Parameter zugreifen zu können, werden von der Schnittstelle javax.servlet.ServletRequest folgende Methoden bereitgestellt: • Die Methode getParamterNames() liefert ein Enumeration-Objekt (Auflistung) der Namen aller verwendeten Parameter. Die Namen können der Reihe nach mit enumeration.getNextElement() aus dem Objekt geholt werden. Mit der Methode hasMoreElements() kann festgestellt werden, ob sich noch mehr Namen in der Auflistung befinden. • Mit der Methode getParamterValues(String name) wird ein Feld (Array) geliefert, welches zu den angegebenen Namen die entsprechenden Werte beinhaltet. • Mit getParameter(String name) erhält man einen String, der den ersten Wert enthält, den man mit getParamterValues(String name) erhalten würde. public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 22 res.setContentType("text/html; charset=UTF-8"); . . . Enumeration parameterNamen = req.getParameterNames(); Enumeration parNames = req.getParameterNames(); . . . } Listing 4: Auszug aus GLinks.java Die so eingelesenen Parameter (Listing 4) werden alle in einem Objekt der Klasse ParameterValues verwaltet. Aufruf des Google Web Service Nachdem alle erforderlichen Parameter vorhanden sind, folgt im nächsten Schritt die Anfrage an das Google-API. Dazu wird zunächst das Paket com.google.soap.search eingebunden. Die wesentlichen Klassen des Google API sind dabei GoogleSearch und GoogleSearchResult, wobei GoogleSearch die Suche unter Berücksichtung der gesetzten Parameter ausführt und als Ergebnis ein Objekt vom Typ GoogleSearchResult liefert. GoogleSearch s = new GoogleSearch(); s.setStartResult ((par.getPage() * 10)); s.setKey (par.getKey()); s.setLanguageRestricts (par.getLanguage()); s.setQueryString (par.getTextBox()); try { GoogleSearchResult r = s.doSearch(); result = new SearchValueArray (r, par.getPage(),0, "base", par); . . . }catch (Exception e ) {System.out.println (e.toString());} Listing 5: Auszug aus GLinks.java Die vom Google Web Service gelieferten Suchergebnisse werden in das Objekt result vom Typ SearchValueArray übernommen. Die Funktion dieser Klasse wird im Folgendem näher erläutert. 23 Die Klasse SearchValueArray Die Klasse SearchValueArray ist zentrale Klasse des Servlets und stellt eine Vielzahl von Operationen bereit. Sie enthält zum einen alle Ergebnisse der Google-Suche, zum anderen die verwendeten Parameter. Wesentliches Element dieser Klasse ist die Datenstruktur: ein Feld (Array) vom Typ SearchValueType. In ihm werden die von Google gelieferten Suchergebnisse sowie gegebenenfalls die ebenfalls von Google gelieferten Ergebnisse für eingehende Links auf Webseiten gespeichert, ebenso die selbst erzeugten Ergebnisse für ausgehende Links. Abbildung 9: Array vom Typ SearchValueType Nach erfolgter Suche wird eine Google-typische Ergebnisseite angezeigt. Zusätzlich enthält jeder Eintrag einen Link zum Erfragen der eingehenden Links (get Inbound Links) und ausgehenden Links(get Outbound Links) sowie die Google-typischen Links für Cached Pages (C) oder Similar Pages (S) (Abb. 10). Abbildung 10: Beispiel für ein einzelnes Suchergebnis An dieser Stelle beginnt die eigentliche Aufgabe des Servlets: Die Untersuchung der Linkstruktur von Webseiten. Durch Aufruf des get Inbound Links-Link werden die zu der entsprechenden Webseite eingehenden Links ermittelt. Dazu wird ebenfalls wieder eine Anfrage an den Google Web Service getätigt, welcher die ihm bekannten eingehenden 24 Links übermittelt. Verwendet wird hierbei die bereits vorgestellte Funktion Link:URL von Google. void setSingleInboundLinks (int arrayID, int page, ParameterValues par) { GoogleSearch f = new GoogleSearch (); f.setKey (par.getKey()); f.setQueryString ("link:"+ this.result[arrayID].getURL()); f.setStartResult (page * 10); try {GoogleSearchResult t = f.doSearch(); SearchValueArray temp = new SearchValueArray(t, page, this.result[arrayID].getLevel()+1, "in"); ... this.insertArray (temp.result, arrayID); } catch (Exception e) {System.out.println (e.toString());} }//setSingleInboundLinks Listing 6: Auszug aus der Methode setSingleInboundLindLinks Um die Ergebnisse entsprechend in der Datenstruktur zu verwalten, sind in der Klasse SearchValueArray einfache Feldoperationen wie das Einfügen und Löschen von Elementen an beliebigen Positionen implementiert. Auf diese Weise können die Ergebnisse einer Anfrage nach eingehenden Links für eine Webseite an entsprechender Stelle eingefügt werden. Um diese Elemente als eingehende Links für einen bestimmten Eintrag zu identifizieren, wird die Variable level gegenüber des zu untersuchenden Eintrags um eins erhöht. Analog ist die Funktionsweise für Untersuchung auf ausgehende Links, jedoch wird dazu nicht der Google Web Service verwendet sondern das Dokument eingelesen und nach vorhandenen Links gescannt. Diese werden dann ebenfalls an entsprechender Stelle in der Datenstruktur eingefügt. Weitere Methoden der Klasse SearchValueArray werden nachfolgend in den entsprechenden Kapiteln vorgestellt. Untersuchen von Webseiten nach ausgehenden Links Nachdem das Vorgehen für die Suche nach eingehenden Links auf Webseiten bereits mehrmals kurz erwähnt wurde, soll sich dieser Abschnitt mit der Suche nach ausgehenden Links beschäftigen. Dazu wird die zu untersuchende Webseite zeilenweise eingelesen und nach allen möglichen Vorkommen von Links gescannt. Viele Webserver verweigern den Zugriff auf ihre Dokumente, wenn dieser nicht über einen Browser erfolgt. Aus diesem Grund ist es notwendig, das Sevlet als Browser auszugeben. Dazu wird der User-Agent entsprechend gesetzt, hier Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0). Dennoch sind einige wenige Webserver in der Lage festzustellen, dass diese Anfrage nicht von einem Browser kommt und reagieren mit einem entsprechenden Statuscode (403/404 siehe Anhang zum HTTP-Protokoll). 25 try { URL v = new URL (this.result[arrayID].getURL()); URLConnection conn = v.openConnection(); conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); Reader is = new InputStreamReader (conn.getInputStream()); BufferedReader in = new BufferedReader (is); ... for ( String s; ( s = in.readLine() ) != null; ) { ... } //for ... this.insertArray(res, getNextLinkOnThisLevel (arrayID)-1); ... } catch (Exception e) {System.out.println (e.toString());} } Listing 7: Auszug aus der Methode setSingleOutboundLinks Nachdem alle Links der zu untersuchenden Webseite identifiziert wurden, werden diese nun analog zu den eingehenden Links an entsprechender Stelle in der Datenstruktur eingefügt. Für den Fall das die detaillierte Ansicht gewählt wurde, werden für alle Ergebnisse der Suche parallel die eingehenden und ausgehenden Links untersucht, jedoch wird nur die Anzahl der Links angezeigt, nicht die Ergebnisse. Dazu wird ein Array verwendet, welches für jeden zu untersuchenden Eintrag einen Thread enthält (Siehe Listing 9). Thread [] threadArray = new Thread [this.result.length]; GLinksOutThread[] outLinksArray = new GLinksOutThread[this.result.length]; try { for (int i=0; i<=this.result.length-1; i++) { outLinksArray[i] = new GLinksOutThread (this.result[i].getURL()); threadArray[i]=new Thread (outLinksArray[i]); threadArray[i].start(); } }catch (Exception e ) {System.out.println (e.toString());} Listing 8: Auszug aus der Methode SetAllOutboundLinksNumber Zwischenspeicherung (Caching) Um bereits bekannte Ergebnisse nicht in jedem Schritt neu abfragen zu müssen, werden diese zwischengespeichert. Dadurch werden erhebliche Geschwindigkeitsvorteile erzielt. Weiterhin wird damit die Verwendung der Navigation innerhalb des Browsers (Vor- und 26 Zurück-Schaltflächen) ermöglicht, ohne das irgendwelche zeitintensiven Operationen ausgeführt werden müssen: Es wird lediglich das bereits gespeicherte Ergebnis erneut gesendet. Dazu wird muss jede Anfrage eindeutig identifiziert werden können. Um dies zu ermöglichen, wird bei jeder Anfrage an das Servlet ein Zeitstempel gesetzt und dieser zusammen mit den Daten gespeichert. Neben dem Zeitstempel sind auch der Suchbegriff und die angezeigte Seite relevant. Jede Suche wird dabei in einer einzelnen Datei der Form tempXXX.ser im automatisch erzeugten Temp-Ordner gespeichert, wobei XXX durch die entsprechende Speicherplatznummer ersetzt wird. Die Anzahl der zu speichernden Einträge kann individuell verändert werden, die jeweils älteste Anfrage wird durch die aktuelle überschrieben. Eine Übersicht der gespeicherten Suchanfragen befindet sich in der Datei tempIndex.ser, über welche die zu ladende bzw. die zu überschreibende Datei identifiziert wird. Durch diese Form des Caching ist auch möglich, das mehrere Nutzer das Servlet zur selben Zeit verwenden. Im folgendem soll anhand eines konkreten Testlaufes die Arbeitsweise des Servlets noch einmal näher erläutert werden. Testlauf In diesem Abschnitt wird ein Testlauf für die Webseite der Universität Jena (http://www.uni-jena.de) durchgeführt. Dazu wird als Suchbegriff uni-jena verwendet. Alle anderen Optionen können bei den Standardeinstellungen belassen werden. Nach dem Ausführen Abbildung 11: Die Startseite index.html der Suche wird zunächst die Google-ähnliche Ergebnissseite angezeigt, wobei an erster 27 Stelle die Webseite der Universität Jena aufgelistet ist. Die Suche erfolgte wie bereits beschrieben durch eine Anfrage an den Google Web Service, welcher die ersten 10 Ergebnisse zur Suche nach uni-jena wie erwartet geliefert hat. Die Suchergebnisse sind identisch mit einer Google-Suche über die Google Webseite. Als Erstes soll eine Suche Abbildung 12: Ergebnisseite für die Suche nach uni-jena nach eingehenden Links durchgeführt werden. Dazu wird der entsprechende Link zum Erfragen der Inbound-Links angewählt. Die erforderlichen Paramerter werden nun auf die oben beschriebene Art und Weise an das Servlet weitergeleitet und verarbeitet. Zum Erfragen der eingehenden Links einer Webseite wird ebenfalls auf den Google Web Service zurückgegriffen. Die Auflistung der angeforderten Links erscheint direkt unter der untersuchten URL und hebt sich farbig vom restlichen Dokument ab. Auch hier kann für jeden Eintrag nach ein- und ausgehenden Links gesucht werden. Um schnellstmöglich zu dem angefordertem Ergebnis, also zu der Linkliste, zu gelangen, wird mittels gesetzter Sprungmarken (Anker) direkt nach Aufruf die entsprechende Stelle im Webdokument angezeigt. Hauptaugenmerk bei der Entwicklung des Servlets war eine einfache und in- 28 tuitive Navigation. So wird jede Linkliste, egal ob ein- oder ausgehend, farblich hinterlegt und mit einer einfachen Navigation am Kopf der Liste versehen. Damit ist es möglich, innerhalb einer Linkliste seitenweise zu blättern, die Anzahl der angezeigten Ergebnisse in 10er-Schritten zu erweitern oder die Liste zu schließen. Wird ein Element der Linkliste wieder nach eingehenden oder ausgehenden Links untersucht, so erscheint eine neue Linkliste, ebenfalls farblich hinterlegt, an entsprechender Position. Auf diese Art und Weise ist es möglich, die Linkstruktur beliebig weit zu verfolgen. Für ausgehende Links verfährt man analog. Wie bereits erwähnt wird hierbei die zu untersuchende Webseite eingelesen und nach Links gescannt. Dabei werden neben den herkömmlichen HTML-Links auch Links erfasst, die sich hinter Bildern befinden, ebenso Links innerhalb einer Image-Map, also einer Grafik, die in verschiedenen Bereichen mit verschiedenen Links hinterlegt ist. Ein typisches Beispiel für eine Image-Map ist eine Weltkarte, in der ein Kontinent oder ein Land durch anklicken mit der Maus ausgewählt wird. Falls die Links relativ zum Dokument gesetzt sind, also nicht vollständig mit Serveradresse und eventuellen Verzeichnissen, so wird dies innerhalb der Linklisten automatisch ergänzt. Gegenstand der folgenden Betrachtung ist der Wechsel zwischen der kompakten Ansicht und der detaillierten Ansicht. Zwischen diesen beiden Ansichten kann jederzeit gewechselt werden. In der detaillierten Ansicht werden zu jedem Eintrag der Linkliste automatisch die Anzahl der eingehenden und ausgehenden Links angezeigt. Dies bring natürlich eine größerer Zeitverzögerung gegenüber der Kompaktansicht mit sich, denn für jeden Eintrag werden die eingehenden Links am Google Web Service erfragt, wobei dort mit relativ konstanter Dauer der Anfragen zu rechnen ist. Wesentlich weniger vorhersehbar ist die Dauer der Untersuchung nach ausgehenden Links: Dazu wird jeder Eintrag einzeln eingelesen und nach Links untersucht. Je nach Anbindung und Verfügbarkeit der jeweiligen Webserver sowie der Größe der zu untersuchenden Webseiten ist mit einer gewissen Verzögerung zu rechnen. Falls eine Webseite nicht erreichbar ist, so wird nach einer gewissen Zeit der HTTP-Statuscode 403/403 ausgegeben (Siehe Anhang: Exkurs zum HTTP-Standard). Falls Links hinter Bildern hinterlegt sind, so wird die durch die Anzeige Image-Link kenntlich gemacht. Durch das Zeigen mit der Maus aus den Image-Link wird mittels JavaScript eine Bildvorschau angezeigt. 29 Abbildung 13: Ausgehende Links für http://www.uni-jena.de 30 Abbildung 14: Eingehende Links für http://www.uni-jena.de 31 <script> <!-tt = null; document.onmousemove = updateTT; function updateTT(e) { x = (document.all) ? window.event.x + document.body.scrollLeft : e.pageX; y = (document.all) ? window.event.y + document.body.scrollTop : e.pageY; if (tt != null) { tt.style.left = (x + 20) + "px"; tt.style.top = (y + 20) + "px"; } } function showTT(id) { tt = document.getElementById(id); tt.style.display = "block" } function hideTT() { tt.style.display = "none"; } //--> </script> . . . <DIV class="tooltip" ID="29"> <P> <img src="http://www.uni-jena.de/skin/unijena/images/unibund_small.jpg" width="50%"> </P> </DIV> <a href="http://www.univerbund.de"ONMOUSEOVER="showTT(’29’)" ONMOUSEOUT="hideTT()">&diams; Image-Link </a> Listing 9: Tooltip-Funktion mittels JavaScript Mittels der Navigationsleiste oberhalb jeder Linkliste kann durch anwählen des X-Zeichen jederzeit die Liste wieder geschlossen werden. Aufgrund der gewählten Datenstruktur kann das Webdokument beliebig viele Einträge annehmen und verwalten. 32 Abbildung 15: Bildvorschau mittels JavaScript 33 6 Zusammenfassung und Ausblick Das Servlet GLinks stellt eine einfache Möglichkeit zur Untersuchung der Linkstruktur von Webdokumenten bereit. Dabei wird auf den Web Service von Google zur Untersuchung nach eingehenden Links zurückgegriffen. Für ausgehende Links werden die zu untersuchenden Webseiten zeilenweise eingelesen und nach Links untersucht. Während eine Anfrage an den Google Web Service in der Regel relativ schnell abläuft, so kann es beim Einlesen und untersuchen nach ausgehenden Links teilweise zu Verzögerungen durch langsame Server oder langsame Serveranbindung. Außerdem spielt auch die Größe der zu untersuchenden Seite eine Rolle. Standardmäßig wird die Kompaktansicht verwendet, welche gegenüber der Detailansicht schneller arbeitet, aber auch weniger Informationen liefert, so wird Anzahl der ein- ausgehenden Links erst auf Anfrage geliefert. Um trotzdem schnellstmöglich die Ergebnisse zu erhalten, wurden die Anfragen in Detailansicht parallelisiert. Um bereits bekannt Ergebnisse nicht mehrmals abzufragen, wurde eine einfache und effektive Caching-Strategie verwendet. Um eine bessere Anschaulichkeit zu bewirken, wäre es teilweise vorteilhaft die Ergebnisse grafisch darstellen zu können um einen besseren Überblick über die Verweistruktur zu erlangen. Eine grafische Darstellung könnte dabei ähnlich wie in Abb. 16 aussehen. Der Google Web Service stellt nur 1.000 Anfragen pro verwendeten Schlüssel bereit, wobei jede Anfrage nur höchstens 10 Ergebnisse liefert. Durch parallele Abfragen wird das zur Verfügung gestellte Kontigent schnell verbraucht, so dass ein eine unbeschränkte Anzahl von Suchanfragen wünschenswert wäre. Weiterhin wäre es denkbar, GLinks selbst in Form eines Web Service bereitzustellen. Die Verwendung des Google Web Service zur Untersuchung eingehender Links stellt eine ausgereifte Möglichkeit dar, Google verfügt momentan über den größten Datenbestand von Webseiten. Dennoch kann es vorkommen, das einige Einträge nicht mehr aktuell sind oder unter anderen Adressen zu finden sind. Bei einem solchen Datenbestand können die Einträge nur in gewissen Zeitabständen auf Erreichbarkeit bzw. Änderung untersucht werden. Trotz alledem stellt der Google Web Service eine zuverlässige Möglichkeit zum Zugriff auf den Datenbestand einer Suchmaschine dar. Zudem ist er momentan der einzige Service seiner Art und hervorragend geeignet für die Untersuchung nach eingehenden Links. Auch wenn er sich erst im Beta-Stadium befindet liefert er dennoch sehr zuverlässig und in relativ kurzer Zeit die gewünschten Ergebnisse. Die zur Verfügung gestellte API für verschiedene Programmiersprachen erlaubt es auch ohne tiefgründige Kenntnisse in Web Service Technologien den von Google angebotenen Service zu verwenden. Generell sind Web Services ein relativ neuer Service, der sich jedoch zunehmender Beliebtheit erfreut und sich auch in Zukunft weiter verbreiten wird. 34 35 Abbildung 16: Mögliche grafische Darstellung der Linkstruktur A WSDL-Dokument WSDL-Dokument zur Beschreibung des Web Service von www.nanonull.com <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.Nanonull.com/TimeService/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.Nanonull.com/TimeService/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <s:schema elementFormDefault="qualified" targetNamespace="http://www.Nanonull.com/TimeService/"> <s:element name="getUTCTime"> <s:complexType /> </s:element> <s:element name="getUTCTimeResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="getUTCTimeResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> </s:schema> </wsdl:types> <wsdl:message name="getUTCTimeSoapIn"> <wsdl:part name="parameters" element="tns:getUTCTime" /> </wsdl:message> <wsdl:message name="getUTCTimeSoapOut"> <wsdl:part name="parameters" element="tns:getUTCTimeResponse" /> </wsdl:message> <wsdl:portType name="TimeServiceSoap"> <wsdl:operation name="getUTCTime"> <wsdl:input message="tns:getUTCTimeSoapIn" /> <wsdl:output message="tns:getUTCTimeSoapOut" /> </wsdl:operation> 36 </wsdl:portType> <wsdl:binding name="TimeServiceSoap" type="tns:TimeServiceSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <wsdl:operation name="getUTCTime"> <soap:operation SoapAction="http://www.Nanonull.com/TimeService/getUTCTime" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="TimeService"> <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">A sample Time service </documentation> <wsdl:port name="TimeServiceSoap" binding="tns:TimeServiceSoap"> <soap:address location="http://www.nanonull.com/TimeService/TimeService.asmx" /> </wsdl:port> </wsdl:service> </wsdl:definitions> 37 B Einige UDDI-Server uddi.microsoft.com Microsoft’s UDDI Business Registry Node uddi.ibm.com IBM’s UDDI Business Registry Node uddi.sap.com SAP’s UDDI Business Registry Node www.ntt.com/uddi/index-e.html NTT Com’s UDDI Business Registry Node Weiterhin werden folgende Server zu Testzwecken vor dem eigentlichen Eintragen in das UDDI-Verzeichnis zur Verfügung gestellt: test.uddi.microsoft.com Microsoft’s Test UDDI Registry. uddi.ibm.com/testregistry/registry.html IBM’s Test UDDI Registry. udditest.sap.com SAP’s Test UDDI Registry 38 C Exkurs: Das Hypertext Transfer Protocol - HTTP Im Folgendem soll eine kurze Übersicht über HTTP gegeben werden. Dieser Abschnitt ist aus [22], Seite 369-370 übernommen. Das Hypertext-Transfer-Protocol wurde 1989 von Tim Berners-Lee am CERN in Genf entwickelt. Informationen, die über diesen Exkurs hinausgehen, können beim W3C unter http://w3c.org/Protocols nachgelesen werden. Das HTTP ist dabei in RFC 2616 festgelegt. Die aktuelle Version des Protokoll ist HTTP 1.1. Diese Version sollten auch alle ServletContainer unterstützen. Seine Funktion besteht grundlegend darin, Daten zu übertragen. Dies geschieht mit Hilfe eines Anfrage/Antwort-Schemas. Eine HTTP-Antwort besteht immer aus einem Kopf (Head), der unter anderem den Typ der Daten beschreibt. Dies geschieht durch so genannte Multipurpose Internet Mail Extension (MIME), die in RFC 2045 festgelegt sind. Sie dienen dazu, einem Client anzuzeigen, um welchen Typ von Daten es sich handelt, und der Client somit die erforderlichen Maßnahmen einleiten kann, um diese Daten zu verarbeiten. Ein Browser wird z.B. Daten vom Typ text/html anders handhaben als Daten vom Typ html/pdf. [...] Ferner enthält ein Kopf z.B. Informationen zu [...] Status-Codes. Überdies kann eine Antwort einen Rumpf enthalten, der die eigentlichen Daten enthält. Die Befehle, die vom Client an den Server gestellt werden können sind folgende: • OPTION : Dieser Befehl stellt eine Anfrage an den Server, der dem Client die verfügbaren Kommunikations-Optionen des Servers zurückgibt. • GET : GET fordert die Informationen eines Servers unter Angabe eines Uniform Resource Identifiers (URI) an. Ein GET -Befehl wird zum Beispiel bei jedem Aufruf einer Seite durch einen Browser gestellt. Dabei liefert der Server die Seite, deren Quelle in einem URI ausgedrückt wird, an den Client. • HEAD: Der HEAD-Befehl liefert ähnlich dem GET -Befehl die Informationen unter Angabe eines URI. Allerdings ohne den Rumpf. Der Server liefert nur den Kopf. • POST : Der POST -Befehl sendet Daten an einen bestimmten URI, worauf der Server entweder ein Okay“sendet oder meldet, dass er zu diesen Daten keine Ant” wort generieren kann: No Content“. Dies geschieht z.B. durch Absenden eines ” HTML-Formulars aus dem Browser. Dabei werden die Informationen, die in Formularfelder und -auswahlstrukturen eingegeben bzw. ausgewählt wurden, an den Server gesendet. Diese Informationen besitzen immer einen Namen und einen Wert. Sie stehen im Kopf der Anfrage und heißen Parameter. • PUT : Mit dem PUT -Befehl kann man beispielsweise eine Datei an einen bestimmten URI auf einem Server senden. • DELETE : Der Befehl DELETE fragt beim Server an, ob die Quelle eines URI gelöscht wird, allerdings ohne Garantie des Servers. 39 • TRACE : Der TRACE -Befehl erlaubt dem Client zu überprüfen, welche Daten beim Server angekommen sind, um diese dann auszuwerten oder mithilfe dieser Informationen Test durchzuführen. • CONNECT : Dieser Befehl wird beim Gebrauch eines Proxies benutzt, der dynamisch zu einem Tunnel werden kann (z.B. SSL-Tunnel). Die am häufigsten benutzten Befehle hiervon sind GET und POST. Mithilfe dieser ist es möglich, Daten von einem Servlet zu holen (GET) oder Informationen an ein Servlet zu senden (POST), das diese dann verarbeiten soll. Im Browser bedeutet dies nichts anderes, als einen URI in die Adresszeile einzugeben. Der Server liefert daraufhin die angeforderte Seite, die der Browser je nach MIME-Typ darstellt. Jede Antwort des Servers enthält ferner einen so genannten Status Code (SC). Statuscodes sind dreistellige Zahlen und können durch ihre erste Ziffer in folgende Gruppen unterteilt werden: Statuscodes der Form 2xx bedeuten, dass die Anfrage des Clients erfolgreich empfangen, verstanden und akzeptiert wurde (Successful). Beispiele: 200 OK 204 No Content - Der Server hat die Anfrage verstanden, hat aber keinen Inhalt, den er im Rumpf an den Client senden soll. Statuscodes der Form 3xx bedeuten, dass weitere Maßnahmen vom Client eingeleitet werden müssen, um die Anfrage zu vervollständigen (Redirection). Beispiele: 301 Moved Permanently - Der angefragte URI wurde dauerhaft an eine der mitgesandten URIs verlegt. 302 Not Modified - Die Seite wurde seit der letzten Anfrage nicht verändert und es wird deshalb kein Rumpf mitgeliefert. Statuscodes 4xx bedeuten einen Fehler beim Client. Beispiele: 403 Forbidden - Der Server hat die Anfrage verstanden, verweigert aber, eine Seite auszugeben. 404 Not Found - Der Server hat nichts Passendes zum angefragten URI gefunden. Statuscodes der Form 5xx besagen einen Fehler beim Server. Beispiele: 40 500 Internal Server Error - Der Server konnte unerwartet eine Anfrage nicht erfüllen. 501 Not Implemented - Der Server unterstützt die Funktion der Anfrage nicht. 41 D Glossar API: Das Application Programming Interface (API) ist eine Schnittstelle zur Anwendungsprogrammierung, die von einem Betriebssystem oder von einem anderen Softwaresystem weiteren Programmen zur Verfügung gestellt wird. Dabei wird die Verwendung der Schnittstellen auf Quelltextebene definiert. Browser: Ein spezielles Programm, mit dem man über das WWW Zugang zu WWWServern erlangen und von diesem angeforderte Dokumente anzeigen kann. Client: Bezeichnet ein Programm, dass einen Server kontaktiert und von diesem Informationen anfordert. Der im WWW eingesetzte Browser ist in diesem Sinne ein Client. Aber es gibt auch andere Clients im WWW, die WWW-Server kontaktieren und Informationen von diesen herunterladen, wie z.B. Suchmaschinen oder Agenten. CORBA: Die Common Object Request Broker Architecture, kurz CORBA, ist eine objektorientierte Middleware, die plattformübergreifende Protokolle und Dienste definiert und von der Object Management Group (OMG) entwickelt wird. CORBA vereinfacht das Erstellen verteilter Anwendungen in heterogenen Umgebungen. Firewall: Eine Firewall (engl. Brandwand bzw. Brandschutzmauer) ist ein System aus Software- und Hardwarekomponenten, das den Zugriff zwischen verschiedenen Rechnernetzen beschränkt, um ein Sicherheitskonzept umzusetzen. Hardwarekomponenten einer Firewall sind Rechner mit Netzwerkschnittstellen wie Router oder Hosts; Softwarekomponenten sind beispielsweise Paketfilter oder Proxyserver. Ein häufiger Einsatzzweck einer Firewall besteht darin, den Datenverkehr zwischen einem zu schützenden lokalen Netzwerk (LAN) und dem Internet zu kontrollieren. Google: Google ist die Internet-Suchmaschine der Firma Google Inc. mit Sitz in Mountain View (USA). Die Firma wurde am 7. September 1998 von Larry Page und Sergey Brin gegründet. Am gleichen Tag wurde eine erste Testversion des Programms auf den Markt gebracht. Noch im selben Jahr ging die Suchmaschine offiziell ans Netz und ist mittlerweile eine der meistgenutzten Suchmaschinen im WWW. HTML: Hypertext Markup Language, das einheitliche Dokumentenformat für Hypermedia-Dokumente im WWW. Dokumente, die im WWW übertragen und vom Browser dargestellt werden sollen, sind in HTML kodiert. HTTP: Hypertext Transfer Protocol, das Protokoll, das die Kommunikation von Browsern und WWW-Servern im WWW regelt. Fordert ein Browser ein Dokument vom WWW-Server an oder beantwortet der WWW-Server eine Anfrage, muß diese Anfrage den Konventionen des HTTP-Protokolls gehorchen. 42 HTTPS: HTTPS steht für Hypertext Transfer Protocol Secure und ist ein Netzwerkprotokoll, das eine gesicherte HTTP-Verbindung zwischen Rechnern ermöglicht. Hyperlink: Als Hyperlink (auch kurz Link; aus dem Englischen für Verknüpfung, Verbindung, Verweis) bezeichnet man einen Verweis auf ein anderes Dokument in einem Hypertext, der durch das Hypertextsystem automatisch verfolgt werden kann. Hypertext: Hypertext ist eine nicht-lineare Organisation von Objekten, deren netzartige Struktur durch logische Verbindungen (Verweise, Links) zwischen Wissenseinheiten (Knoten, z. B. Texten oder Textteilen) hergestellt wird (Verweis-KnotenKonzept). Die Begriffe Hypertext und Hypermedia werden meistens synonym benutzt; Hypertext betont dabei jedoch den textuellen Anteil, Hypermedia dagegen mehr den multimedialen. Java: Java ist eine objektorientierte Programmiersprache und als solche ein eingetragenes Warenzeichen der Firma Sun Microsystems. Java-Programme werden in einer speziellen Umgebung, der Java-Laufzeitumgebung oder Java-Plattform ausgeführt, deren wichtigster Bestandteil die Java Virtual Machine ist. Dazu werden JavaProgramme in Bytecode übersetzt, der von der virtuellen Maschine ausgeführt wird. Java-Programme laufen in aller Regel ohne weitere Anpassungen auf verschiedenen Computern und Betriebssystemen. JRE: JRE steht im engeren Sinne für Java Runtime Environment (deutsch Java-Laufzeitumgebung) des US-Unternehmens Sun Microsystems. Sie liefert unter anderem die Java VM (Virtual Machine). Sie wird benötigt, um Java-Applikationen auszuführen. Die JRE kann in der jeweils neusten Version auf der Homepage von Sun Microsystems heruntergeladen werden. Namensdienst: (Naming Service), ein Netzwerkanwendungsprogramm, das logische, leicht merkbare Namen einer Ressource oder einer Person auf numerische Netzwerkadressen abbildet. Netzanwendung: Ein Anwendungsprogramm, dessen Ablauf den Zugriff auf Ressourcen einschließt, die nicht lokal auf dem ausführenden Rechner liegen, sondern auf einem entfernten Rechner über das Netzwerk zugegriffen werden. RFC: Die Requests for Comments (kurz RFC; zu deutsch Aufforderung zu Kommentaren) sind eine Reihe von technischen und organisatorischen Dokumenten des RFC-Editor zum Internet (ursprünglich ARPANET), die am 7. April 1969 begonnen wurden. Bei der ersten Veröffentlichung noch im ursprünglichen Wortsinne zur Diskussion gestellt, behalten RFC auch dann ihren Namen, wenn sie sich durch allgemeine Akzeptanz und Gebrauch zum Standard entwickelt haben. 43 RPC: Remote Procedure Call, oder kurz RPC, ist ein Netzwerkprotokoll auf der Anwendungsschicht des TCP/IP Referenzmodells. Mit Hilfe von RPC können über ein Netzwerk Funktionsaufrufe auf entfernten Rechnern durchgeführt werden. RSS: RSS (Abkürzung für Really Simple Syndication, zu deutsch etwa echt einfache ” Verbreitung“) ist eine Technologie, die es dem Nutzer ermöglicht, die Inhalte einer Webseite –oder Teile davon –zu abonnieren. Server: Bezeichnet einen Prozess, der von Clients kontaktiert wird, um diesen Informationen zurück zu liefern. Oft wird auch der Rechner, auf dem ein Server-Prozess abläuft als Server bezeichnet. Servlet: Als Servlets bezeichnet man Java-Klassen, deren Instanzen innerhalb eines Webservers Anfragen von Clients entgegen nehmen und beantworten. Solche Klassen müssen immer die Schnittstelle javax.servlet.Servlet oder eine davon abgeleitete (normalerweise javax.servlet.http.HttpServlet) implementieren. Der Inhalt der Antworten kann dabei dynamisch, also im Moment der Anfrage, erstellt werden und muss nicht bereits statisch (etwa in Form einer HTML-Seite) für den Webserver verfügbar sein. SOAP: Das Simple Object Access Protocol (SOAP) ist ein Protokoll, mit dessen Hilfe Daten zwischen Systemen ausgetauscht und Remote Procedure Calls (RPC) durchgeführt werden können. SOAP stützt sich auf die Dienste anderer Standards, XML zur Repräsentation der Daten und Internet-Protokolle der Transport- und Anwendungsschicht zur Übertragung der Nachrichten. Die gängigste Kombination ist SOAP über HTTP. SPL: SSL: Transport Layer Security (TLS) oder Secure Sockets Layer (SSL) ist ein Verschlüsselungsprotokoll für Datenübertragungen im Internet. TLS 1.0 und 1.1 sind die standardisierten Weiterentwicklungen von SSL 3.0. Hier wird die Abkürzung SSL für beide Bezeichnungen verwendet. Im OSI-Modell ist SSL oberhalb der Transportschicht (z.B. TCP) und unter Applikationsprotokollen wie HTTP oder SMTP angesiedelt. SSL arbeitet transparent, so dass es leicht eingesetzt werden kann, um Protokollen ohne eigene Sicherheitsmechanismen abgesicherte Verbindungen zur Verfügung zu stellen. Zudem ist es erweiterbar, um Flexibilität und Zukunftssicherheit bei den verwendeten Verschlüsselungstechniken zu gewährleisten. UDDI: Universal Description, Discovery and Integration (UDDI) bezeichnet einen Verzeichnisdienst, der die zentrale Rolle in einem Umfeld von dynamischen Web Services spielen soll. 44 W3C: Das World Wide Web Consortium, oder auch W3C, ist das Gremium zur Standardisierung das World Wide Web betreffender Techniken. Gründer und Vorsitzender des W3C ist Tim Berners-Lee. Es wurde 1994 gegründet. Web Service: Ein Web Service ist eine Software-Anwendung, die mit einem Uniform Resource Identifier (URI) eindeutig identifizierbar ist und deren Schnittstellen mit der Auszeichnungssprache XML definiert, beschrieben und gefunden werden können. Ein Web Service unterstützt die direkte Interaktion mit anderen SoftwareAgenten unter Verwendung XML-basierter Nachrichten durch den Austausch über internetbasierte Protokolle. WSDL: WSDL - Die Web Services Description Language (WSDL) definiert einen plattform-, programmiersprachen- und protokollunabhängigen XML-Spezifikation zur Beschreibung von Netzwerkdiensten (Web Services) zum Austausch von Nachrichten. WWW: Das World Wide Web (kurz Web, WWW oder deutsch: Weltweites Netz, Weltweites Netzwerk; wörtlich: web = Gewebe, Netz) ist ein über das Internet abrufbares Hypertext-System. Das WWW wird im allgemeinen Sprachgebrauch oft mit dem Internet gleichgesetzt, obwohl es jünger ist und nur eine mögliche Nutzung des Internets darstellt (so wie im Gegenzug das Internet nur eine von verschiedenen möglichem Serververbünden ist). Es gibt durchaus Internet-Dienste, die nicht in das WWW integriert sind wie zum Beispiel E-Mail oder Telnet. XML: XML - Abkürzung für Extensible Markup Language, eine 1998 vom World-WideWeb-Consortium standardisierte Sprache, mit der sich Auszeichnungssprachen definieren lassen. Insbesondere können bestimmte Teile von XML selbst definiert und im gleichen Dokument auch genutzt werden. Dadurch werden der Seitenaufbau und die Behandlung von Daten mit XML erheblich flexibler. 45 E Wichtige Internetadressen • Webseite des World Wide Web Consortium: http://www.w3c.org/ • Homepage der Firma Sun Microsystems http://www.sun.com/ • Homepage der Programmiersprache Java http://www.java.com/ • Webseite des Google API http://www.google.com/apis/ F Abkürzungen und Akronyme API HTML HTTP HTTPS JRE RFC RPC RSS SOAP SPL SSL UDDI W3C WSDL WWW XML Application Programming Interface Hypertext Markup Language Hypertext Transfer Protocol Hypertext Transfer Protocol Secure Java Runtime Environment Request for Common Remote Procedure Call Really Simple Syndication Simple Object Access Protocol Sun Public License Secure Socket Layer Universal Description, Discovery and Integration World Wide Web Community Web Service Description Language World Wide Web Extensible Markup Language 46 Literatur [1] Homepage der Suchmaschine Google: www.google.de, [2] HTML Activity Page des W3C: http://www.w3.org/MarkUp/ . [3] Homepage des Google Webservice: http://www.google.com/api . [4] Java Servlet Homepage: http://java.sun.com/products/servlet/ . [5] Web Service Architecture Requirement des W3C: http://www.w3.org/TR/wsa-reqs/ [6] Homepage des World Wide Web Consortium – W3C: http://www.w3c.org/ [7] CORBA Homepage der Object Management Group: http://www.corba.org/ [8] SOAP Homepage des W3C: http://www.w3.org/TR/soap/ [9] WSDL Homepage des W3C: http://www.w3.org/TR/wsdl [10] UDDI Homepage von OASIS: http://www.uddi.org/ [11] HTTP Homepage des W3C: http://www.w3.org/Protocols/ [12] HTTPS Request for Common der Internet Engineering Task Force: http://www.ietf.org/rfc/rfc2818.txt [13] Firewalls - Internet Intern M. Fordermaier, A. Stolz, erschienen bei Data Becker, 1. Auflage 2001 47 [14] SOAP Submission Request to W3C: http://www.w3.org/Submission/2000/05/ [15] SSL/TLS Strong Encryption - An Introduction by Apache Software Foundation: http://httpd.apache.org/docs/2.0/ssl/ssl intro.html [16] Timeservice von www.nanonull.com (in Verantwortung von Altova - www.altova.com): http://www.nanonull.com/TimeService/TimeService.asmx [17] SOAP Submission Request to W3C: http://www.w3.org/Submission/2001/07/ [18] Usenet Newsgroup - RFC 1036 des W3C http://www.w3.org/Protocols/rfc1036/rfc1036.html [19] RSS 2.0 Specification - Technology at Harvard Law http://blogs.law.harvard.edu/tech/rss [20] Homepage der Programmiersprache Java (in Verantwortung von SUN Microsystems - www.sun.com): http://java.sun.com/ [21] Homepage der Programmiersprache .Net (in Verantwortung von Microsoft - www.microsoft.com): http://www.microsoft.com/net/default.mspx [22] JavaServer Pages und Servlets - Internet Intern M. Brantner, S. Schmidt, B. Wabnitz, D. Wabnitz, erschienen bei Data Becker, 1. Auflage 2001 [23] Java Servlet Homepage (in Verantwortung von SUN Microsystems - www.sun.com): http://java.sun.com/products/servlet/ 48 [24] Homepage der Entwicklungsumgebung NetBeans: http://www.netbeans.org [25] SUN Public License: http://www.opensource.org/licenses/sunpublic.php [26] Homepage des Apache2 Webserver (in Verantwortung von [27]): http://httpd.apache.org/ [27] Homepage der Apache Software Foundation: http://www.apache.org [28] Homepage von Tomcat (in Verantwortung von [27]): http://tomcat.apache.org 49 Index .NET, 15 RSS, 44 Abstract, 1 Apache Tomcat, 20 Apache2 Webserver, 20 API, 42 Server, 44 Servlet, 4, 17, 44 Servlet Exception, 19 Servlet Lebenszyklus, 18 Servlet-Container, 18 SOAP, 7, 44 SOAP-Body, 8 SOAP-Envelope, 7 SOAP-Header, 7 SPL, 20, 44 SSL, 10, 44 SUN, 20 SUN Microsystems, 18 Browser, 42 Cache, 15 Client, 42 CORBA, 5, 42 Firewall, 6, 42 Google, 3, 42 Google Web API, 4 Google Web Service, 14 Tomcat, 20 UDDI, 12, 44 HTML, 3, 42 HTTP, 6, 42 HTTP Exkurs, 39 HTTPS, 6, 43 Hyperlink, 43 Hypertext, 43 W3C, 5, 45, 46 Web Service, 45 Web Services, 5 Webserver, 20 WSDL, 10, 45 WWW, 3, 45, 46 Internetadressen, 46 XML, 45 Java, 15, 43 Java Runtime Environment, 20 JRE, 20, 43 MIME, 39 Namensdienst, 43 NetBeans, 20 Netzanwendungen, 43 Protokollstack, 5 Prozess, 44 Rechner, 43 Ressource, 43 RFC, 43 RPC, 5, 44 50 Abbildungsverzeichnis 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Protokollstack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schema eines Web Service Aufrufes . . . . . . . . . . . . . . . . . . . . . . Aufbau einer SOAP-Nachricht . . . . . . . . . . . . . . . . . . . . . . . . . Aufbau eines WSDL-Dokumentes . . . . . . . . . . . . . . . . . . . . . . . Aufbau eines UDDI-Eintrags . . . . . . . . . . . . . . . . . . . . . . . . . Ausschnitt einer Google-Suche nach eingehenden Links für http://www.unijena.de . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Typische Servlet-Konstellation . . . . . . . . . . . . . . . . . . . . . . . . Servlet Lebenszyklus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Array vom Typ SearchValueType . . . . . . . . . . . . . . . . . . . . . . Beispiel für ein einzelnes Suchergebnis . . . . . . . . . . . . . . . . . . . . Die Startseite index.html . . . . . . . . . . . . . . . . . . . . . . . . . . . Ergebinsseite für die Suche nach uni-jena . . . . . . . . . . . . . . . . . . Ausgehende Links für http://www.uni-jena.de . . . . . . . . . . . . . . Eingehende Links für http://www.uni-jena.de . . . . . . . . . . . . . . Bildvorschau mittels JavaScript . . . . . . . . . . . . . . . . . . . . . . . . Mögliche grafische Darstellung der Linkstruktur . . . . . . . . . . . . . . . 51 6 7 7 11 13 16 17 18 24 24 27 28 30 31 33 35