Changeset 73

Show
Ignore:
Timestamp:
02/24/08 19:10:22 (5 years ago)
Author:
d0nut
Message:

english -> german

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • documentation/trunk/doc.tex

    r72 r73  
    4444Dann wird das Google Web Toolkit erklÀrt und eine BrÃŒcke zu Java geschlagen. 
    4545Das Google Web Toolkit versucht den Desktop-Entwicklungs-Zyklus auf Web-Anwendungen zu ÃŒbertragen. 
     46Es werden Grundlegende Java-Kenntnisse und der sichere Umgang mit einer Entwicklungsumgebung vorausgesetzt. 
    4647\end{abstract} 
    47  
     48\newpage 
    4849\tableofcontents 
    4950\newpage 
     
    6061        Moderne Web-Anwendungen lassen sich komponentenweise kombinieren, sie greifen ineinander ÃŒber und reagieren sofort Benutzeraktionen. 
    6162         
    62         Die BrÃŒcke zwischen Web- und Desktop-Welt wird durch gleiche Bedienkonzepte wie z.B. Drag-Drop, AutovervollstÀndigen oder die sofortige Formularvalidierung geschlagen. 
     63        Die BrÃŒcke zwischen Web- und Desktop-Welt wird durch gleiche Bedienkonzepte wie z.B. Drag\&Drop, AutovervollstÀndigung oder die sofortige Formularvalidierung geschlagen. 
    6364 
    6465        In den folgenden Kapiteln wird erlÀutert, was die grundlegende Technologie 'AJAX' ausmacht und wie man sie als Programmierer fÃŒr sich nutzen kann. 
    65  
    6666        Weiter wird auf garantierte Stolpersteine eingegangen und letztendlich eine mögliche Antwort auf verschiedene Probleme prÀsentiert: 
    6767        Das Google Web Toolkit. 
     
    8282        die durch asynchrone Verbindungen in einer interaktiven Umgebung beliebige Datenmengen bewÀltigen können. 
    8383         
    84         Der Client schickt HTTP-Requests an den Server, ohne dass die eigentliche Seite neu geladen wird, oder der Benutzer wÀhrenddessen warten muss. 
     84        Der Client schickt HTTP-Anfragen an den Server, ohne dass die eigentliche Seite neu geladen wird, oder der Benutzer wÀhrenddessen warten muss. 
    8585         
    8686        \subsection{Document Object Model} \label{sec_ajax_dom} 
     
    9797         
    9898        In einer Client-Server-Architektur lÀsst sich DOM sowohl im Backend zur Dokumentengenerierung, 
    99         als auch und im Frontend zur dynamischen Manipulierung nutzen. 
     99        als auch und im Frontend zum dynamischen Manipulieren nutzen. 
    100100 
    101101        \subsection{JavaScript} \label{sec_ajax_javascript} 
     
    107107        JavaScript lÀuft in einer Sandbox und schrÀnkt darÃŒber den Zugriff auf Netzwerkfunktionen oder das Dateisystem ein. 
    108108 
    109         Skripte werden in das HTML-Dokument eingebettet, um auf Events zu reagieren oder die DOM ReprÀsentierung der Website dynamisch zu manipulieren. 
     109        Skripte werden in das HTML-Dokument eingebettet, um auf Ereignisse zu reagieren oder die DOM ReprÀsentierung der Website dynamisch zu manipulieren. 
    110110 
    111111        Ein simples Beispiel ist der Aufruf der alert-Funktion. 
     
    135135 
    136136        Normale Websites laden in einem Rutsch. 
    137         Dazu formuliert der Client einen HTTP-Request mit Hostnamen und Pfad. 
    138         Wird die URL www.foo.com/ajax.html im Browser aufgerufen, wird der folgende HTTP-Request gesendet: 
     137        Dazu formuliert der Client eine HTTP-Anfrage mit Hostnamen und Pfad. 
     138        Wird die URL www.foo.com/ajax.html im Browser aufgerufen, wird die folgende Anfrage gesendet: 
    139139         
    140140\begin{lstlisting} 
     
    158158\end{lstlisting} 
    159159         
    160         Klickt man auf einen Link werden wieder und wieder neue HTTP-Requests geschickt und das komplette Dokument neu ÃŒbertragen. 
     160        Klickt man auf einen Link werden wieder und wieder neue HTTP-Anfragen geschickt und das komplette Dokument neu ÃŒbertragen. 
    161161         
    162162        Das folgende Sequenzdiagramm beschreibt den Ablauf von Anfrage und Antwort. 
     
    173173        sondern es stattdessen wÀhrend der Laufzeit nachgeladen werden kann. 
    174174        WÀhrend des Ladevorgangs kann der Benutzer weiter mit der Seite interagieren, 
    175         da der Browser dafÃŒr sorgt, dass der asynchrone Request in einem eigenen Thread ablÀuft. 
     175        da der Browser dafÃŒr sorgt, dass die asynchrone Anfrage in einem eigenen Thread ablÀuft. 
    176176 
    177177        Zudem ist keine Socketverbindung auf Ebene von TCP oder UDP notwendig.   
     
    180180        So funktioniert das Zusammenspiel der drei Technologien: 
    181181        Die Ajax-Engine reagiert auf einen Klick in der BenutzeroberflÀche, 
    182         schickt daraufhin eine HTTP-Request an den Server und sobald dieser antwortet, 
     182        schickt daraufhin eine HTTP-Anfrage an den Server und sobald dieser antwortet, 
    183183        wertet sie die Antwort aus und fÃŒgt die Informationen mit DOM-Manipulationen in das eigentlich Dokument wieder ein. 
    184184 
     
    186186        \centering 
    187187        \includegraphics{img/http-ajax.eps} 
    188         \caption{Ein AJAX Request ÃŒber HTTP.} 
     188        \caption{Eine AJAX Anfrage ÃŒber HTTP.} 
    189189        \label{fig:http-ajax} 
    190190        \end{figure} 
     
    196196        Dieser besteht aus dem XMLHttpRequest im Browser und der Skriptsprache JavaScript, ÃŒber das dieser angesprochen wird. 
    197197         
    198         \subsection{EventHandler} \label{sec_ajax_eventhandler} 
    199         Die HTTP-Anfragen werden durch JavaScript Events ausgelöst. 
     198        \subsection{Ereignisbehandlung mit EventHandlern} \label{sec_ajax_eventhandler} 
     199        Die HTTP-Anfragen werden durch JavaScript Ereignisse ausgelöst. 
    200200        EventHandler sind das Bindeglied zwischen HTML und JavaScript. 
    201201        Das W3-Konsortium hat sie als HTML-Attribut in den Sprachstandard aufgenommen. 
     
    208208\end{lstlisting} 
    209209 
    210         Es sind alle erdenklichen Events möglich. 
     210        Es sind alle erdenklichen Ereignisse möglich. 
    211211        JavaScript kann genauso auf das Fokussieren oder Verlassen von Eingabefeldern reagieren,  
    212212        wie auf das Überfahren eines Elements mit der Maus.     
     
    214214        \subsection{XMLHTTP als Kommunikationsschnittstelle} \label{sec_ajax_xmlhttprequest} 
    215215        Das XMLHttpRequest Objekt ist eine API, die den HTTP-Zugriff auf Websites der eigenen Domain\footnote{W3C-Vorschlag fÃŒr eine Cross-Site-Extension in 'XMLHttpRequest 2' unter http://lists.w3.org/Archives/Public/public-webapi/2006Jun/0012.html} erlaubt. 
    216         FÃŒr die Kommunikation ÃŒber das HTTP-Protokoll werden die beiden gebrÀuchlichsten Request-Methoden POST und GET genutzt. 
     216        FÃŒr die Kommunikation ÃŒber das HTTP-Protokoll werden die beiden gebrÀuchlichsten Anfrage-Methoden POST und GET genutzt. 
    217217        Wurde ein Event ausgelöst und eine Anfrage abgeschickt, ÃŒbernimmt das XMLHttpRequest den Aufruf der Callback-Methode. 
    218218 
     
    230230        \subsection{VollstÀndiges Beispiel} \label{sec_ajax_example} 
    231231        Nun ist alles bekannt, was benötigt wird, um die Funktion foo() zu implementieren. 
    232         Sie soll einen AJAX Request ausfÃŒhren, um eine Liste von Namen nachzuladen. 
    233         Dazu wird die AJAX Klasse initialisiert und ein GET-Request an backend.php geschickt. 
     232        Sie soll eine AJAX Anfrage ausfÃŒhren, um eine Liste von Namen nachzuladen. 
     233        Dazu wird die AJAX Klasse initialisiert und eine GET-Anfrage an backend.php geschickt. 
    234234        Diese liefert im Beispiel folgendes XML Dokument. 
    235235\begin{lstlisting}[language=xml]  
     
    265265        Bei der normalen GUI-Programmierung kann die Anwendung bereits innerhalb der Entwicklungsumgebung debuggt und getestet werden. 
    266266        Da JavaScript-Anwendungen aber erst beim Endbenutzer interpretiert werden, 
    267         benötigt der Entwickler verschiedene Testsysteme aus Betriebsystem- und Browserkombinationen. 
    268         Auch der komplette Klick-Lebensyklus wird durch das besondere Verhalten der Callback-Methoden und die strikte Trennung zwischen der JavaScript-Frontend-Implementierung und der Backend-Implementierung schier unmöglich zu testen. 
     267        benötigt der Entwickler verschiedene Testsysteme aus Betriebssystem- und Browserkombinationen. 
     268        Auch der komplette Klick-Lebenszyklus wird durch das besondere Verhalten der Callback-Methoden und die strikte Trennung zwischen der JavaScript-Frontend-Implementierung und der Backend-Implementierung schier unmöglich zu testen. 
    269269        Es werden Testszenarien gebraucht die eine ServerÃŒberlastung emulieren. 
    270270         
     
    274274        Wie der Titel dieser Ausarbeitung nahe legt, heißt die Lösung fÃŒr all diese Probleme 'Google Web Toolkit' (oder kurz GWT). 
    275275 
    276         Das GWT erlaubt eine Entwicklung fern von HTML und JavaScript und verwendet dazu hundertprozent reines Java. 
     276        Das GWT erlaubt eine Entwicklung fern von HTML und JavaScript und verwendet dazu hundertprozentig reines Java. 
    277277        Dieses Kernkonzept wird in den folgenden Kapiteln erlÀutert. 
    278278 
     
    336336 
    337337        Außerdem wird der Quelltext komprimiert und komplett in JavaScript Dateien ausgelagert. 
    338         Dadurch kann die gesamte Anwendung vom Browser gecached werden. 
     338        Dadurch kann die gesamte Anwendung vom Browser zwischengespeichert werden. 
    339339 
    340340        FÃŒr jede Kombination aus Gebietsschema und Browsertyp wird eine einzelne JavaScript Datei erstellt. 
     
    350350 
    351351        \subsection{ImageBundles} \label{sec_tec_gwt_imagebundles} 
    352         Ein weiterer Grundprozess des GWT ist es die Anzahl an HTTP-Requests so gering wie möglich zu halten. 
     352        Ein weiterer Grundprozess des GWT ist es die Anzahl an HTTP-Anfragen so gering wie möglich zu halten. 
    353353        Auch hierfÃŒr sorgt der Compiler. 
    354         In den meisten Websites sind es Bilder, die die meisten HTTP-Requests verursachen. 
     354        In den meisten Websites sind es Bilder, die die meisten HTTP-Anfragen verursachen. 
    355355        Daher haben sich die GWT Entwickler das Konzept der ImageBundles ÃŒberlegt. 
    356         Vielleicht wird der Vorteil anhand eines Beispiels gebuwsster: 
     356        Vielleicht wird der Vorteil anhand eines Beispiels bewusster: 
    357357 
    358358        Typische WYSIWYG-Editoren bringen etwa 50 Buttons mit, die dem Anwender eine Office-Àhnliche OberflÀche vermitteln sollen. 
    359         Ein Browser wÃŒrde an dieser Stelle 50 Bilder-Tags im HTML-Quelltext sehen und alle 50 Bilder per HTTP-Request laden. 
    360         Selbst wenn der Besucher die Seite bereits besucht hat und alle Bilder nur aus dem Cache des Browsers geladen werden mÃŒssen,  
     359        Ein Browser wÃŒrde an dieser Stelle 50 Bilder-Tags im HTML-Quelltext sehen und alle 50 Bilder per HTTP-Anfrage laden. 
     360        Selbst wenn der Besucher die Seite bereits besucht hat und alle Bilder nur aus dem Zwischenspeicher des Browsers geladen werden mÃŒssen,  
    361361        mÃŒssen 50 Verbindungen aufgebaut werden um nachzufragen, ob sich eines der Bilder geÀndert hat. 
    362         Das GWT macht nun aus den 50 Bildern nur ein einziges Bild, das die selbe Datenmenge mitbringt, nur einmalig geladen werden muss und trotzdem gecached wird. 
     362        Das GWT macht nun aus den 50 Bildern nur ein einziges Bild, das die selbe Datenmenge mitbringt, nur einmalig geladen werden muss und trotzdem zwischengespeichert wird. 
    363363        Eingebunden werden die Bilder weiterhin ÃŒber die 50 Bilder-Tags in ihrer Originalgröße. 
    364364        Per CSS werden Sie aber so verschoben, dass der Endanwender, bis auf den Geschwindigkeitsvorteil keinen Unterschied mehr merkt. 
     
    504504         
    505505        Die Implementierung funktioniert mit der Schnittstelle HistoryListener, die onHistoryChanged(String token) implementiert. 
    506         Der token lÀsst sich wie ein Dateiname behandeln. 
    507         Dadurch kann jede GUI-Aktion durch einen Token abgebildet werden. 
     506        Das Token lÀsst sich wie ein Dateiname behandeln. 
     507        Dadurch kann jede GUI-Aktion durch ein Token abgebildet werden. 
    508508 
    509509 
     
    528528         
    529529        Die Sprache wird je nach Browserkonfiguration automatisch gewÀhlt.  
    530         Mit dem GET-Parameter locale lÀsst sie sich aber auch erzwingen. 
     530        Mit dem GET-Parameter 'locale' lÀsst sie sich aber auch erzwingen. 
    531531 
    532532 
     
    538538        bietet das GWT ÃŒber JSNI die Möglichkeit normalen JavaScript Code einzubinden. 
    539539 
    540         Soll eine solche Methode geschrieben werden, wird das SchlÃŒsselwort native und eine spezielle Kommentarsyntax verwendet. 
     540        Soll eine solche Methode geschrieben werden, wird das SchlÃŒsselwort 'native' und eine spezielle Kommentarsyntax verwendet. 
    541541        Wie im folgenden Beispiel zu sehen, ist selbst ein Zugriff auf Attribute und Methoden des GWT möglich. 
    542542         
    543         Der Zugriff auf window und document ist gekapselt und nur ÃŒber die Variablen \$wnd und \$doc möglich. 
     543        Der Zugriff auf 'window' und 'document' ist gekapselt und nur ÃŒber die Variablen \$wnd und \$doc möglich. 
    544544 
    545545\begin{lstlisting}[language=java]