Changeset 73
- Timestamp:
- 02/24/08 19:10:22 (5 years ago)
- Files:
-
- 1 modified
-
documentation/trunk/doc.tex (modified) (21 diffs)
Legend:
- Unmodified
- Added
- Removed
-
documentation/trunk/doc.tex
r72 r73 44 44 Dann wird das Google Web Toolkit erklÀrt und eine BrÃŒcke zu Java geschlagen. 45 45 Das Google Web Toolkit versucht den Desktop-Entwicklungs-Zyklus auf Web-Anwendungen zu ÃŒbertragen. 46 Es werden Grundlegende Java-Kenntnisse und der sichere Umgang mit einer Entwicklungsumgebung vorausgesetzt. 46 47 \end{abstract} 47 48 \newpage 48 49 \tableofcontents 49 50 \newpage … … 60 61 Moderne Web-Anwendungen lassen sich komponentenweise kombinieren, sie greifen ineinander ÃŒber und reagieren sofort Benutzeraktionen. 61 62 62 Die BrÃŒcke zwischen Web- und Desktop-Welt wird durch gleiche Bedienkonzepte wie z.B. Drag -Drop, AutovervollstÀndigenoder 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. 63 64 64 65 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 66 66 Weiter wird auf garantierte Stolpersteine eingegangen und letztendlich eine mögliche Antwort auf verschiedene Probleme prÀsentiert: 67 67 Das Google Web Toolkit. … … 82 82 die durch asynchrone Verbindungen in einer interaktiven Umgebung beliebige Datenmengen bewÀltigen können. 83 83 84 Der Client schickt HTTP- Requestsan 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. 85 85 86 86 \subsection{Document Object Model} \label{sec_ajax_dom} … … 97 97 98 98 In einer Client-Server-Architektur lÀsst sich DOM sowohl im Backend zur Dokumentengenerierung, 99 als auch und im Frontend zu r dynamischen Manipulierungnutzen.99 als auch und im Frontend zum dynamischen Manipulieren nutzen. 100 100 101 101 \subsection{JavaScript} \label{sec_ajax_javascript} … … 107 107 JavaScript lÀuft in einer Sandbox und schrÀnkt darÃŒber den Zugriff auf Netzwerkfunktionen oder das Dateisystem ein. 108 108 109 Skripte werden in das HTML-Dokument eingebettet, um auf E ventszu 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. 110 110 111 111 Ein simples Beispiel ist der Aufruf der alert-Funktion. … … 135 135 136 136 Normale Websites laden in einem Rutsch. 137 Dazu formuliert der Client eine n HTTP-Requestmit Hostnamen und Pfad.138 Wird die URL www.foo.com/ajax.html im Browser aufgerufen, wird d er folgende HTTP-Requestgesendet: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: 139 139 140 140 \begin{lstlisting} … … 158 158 \end{lstlisting} 159 159 160 Klickt man auf einen Link werden wieder und wieder neue HTTP- Requestsgeschickt 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. 161 161 162 162 Das folgende Sequenzdiagramm beschreibt den Ablauf von Anfrage und Antwort. … … 173 173 sondern es stattdessen wÀhrend der Laufzeit nachgeladen werden kann. 174 174 WÀhrend des Ladevorgangs kann der Benutzer weiter mit der Seite interagieren, 175 da der Browser dafÃŒr sorgt, dass d er asynchrone Requestin einem eigenen Thread ablÀuft.175 da der Browser dafÃŒr sorgt, dass die asynchrone Anfrage in einem eigenen Thread ablÀuft. 176 176 177 177 Zudem ist keine Socketverbindung auf Ebene von TCP oder UDP notwendig. … … 180 180 So funktioniert das Zusammenspiel der drei Technologien: 181 181 Die Ajax-Engine reagiert auf einen Klick in der BenutzeroberflÀche, 182 schickt daraufhin eine HTTP- Requestan den Server und sobald dieser antwortet,182 schickt daraufhin eine HTTP-Anfrage an den Server und sobald dieser antwortet, 183 183 wertet sie die Antwort aus und fÃŒgt die Informationen mit DOM-Manipulationen in das eigentlich Dokument wieder ein. 184 184 … … 186 186 \centering 187 187 \includegraphics{img/http-ajax.eps} 188 \caption{Ein AJAX RequestÃŒber HTTP.}188 \caption{Eine AJAX Anfrage ÃŒber HTTP.} 189 189 \label{fig:http-ajax} 190 190 \end{figure} … … 196 196 Dieser besteht aus dem XMLHttpRequest im Browser und der Skriptsprache JavaScript, ÃŒber das dieser angesprochen wird. 197 197 198 \subsection{E ventHandler} \label{sec_ajax_eventhandler}199 Die HTTP-Anfragen werden durch JavaScript E ventsausgelöst.198 \subsection{Ereignisbehandlung mit EventHandlern} \label{sec_ajax_eventhandler} 199 Die HTTP-Anfragen werden durch JavaScript Ereignisse ausgelöst. 200 200 EventHandler sind das Bindeglied zwischen HTML und JavaScript. 201 201 Das W3-Konsortium hat sie als HTML-Attribut in den Sprachstandard aufgenommen. … … 208 208 \end{lstlisting} 209 209 210 Es sind alle erdenklichen E ventsmöglich.210 Es sind alle erdenklichen Ereignisse möglich. 211 211 JavaScript kann genauso auf das Fokussieren oder Verlassen von Eingabefeldern reagieren, 212 212 wie auf das Ãberfahren eines Elements mit der Maus. … … 214 214 \subsection{XMLHTTP als Kommunikationsschnittstelle} \label{sec_ajax_xmlhttprequest} 215 215 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. 217 217 Wurde ein Event ausgelöst und eine Anfrage abgeschickt, ÃŒbernimmt das XMLHttpRequest den Aufruf der Callback-Methode. 218 218 … … 230 230 \subsection{VollstÀndiges Beispiel} \label{sec_ajax_example} 231 231 Nun ist alles bekannt, was benötigt wird, um die Funktion foo() zu implementieren. 232 Sie soll eine n AJAX RequestausfÃŒhren, um eine Liste von Namen nachzuladen.233 Dazu wird die AJAX Klasse initialisiert und ein GET-Requestan 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. 234 234 Diese liefert im Beispiel folgendes XML Dokument. 235 235 \begin{lstlisting}[language=xml] … … 265 265 Bei der normalen GUI-Programmierung kann die Anwendung bereits innerhalb der Entwicklungsumgebung debuggt und getestet werden. 266 266 Da JavaScript-Anwendungen aber erst beim Endbenutzer interpretiert werden, 267 benötigt der Entwickler verschiedene Testsysteme aus Betriebs ystem- und Browserkombinationen.268 Auch der komplette Klick-Lebens yklus 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. 269 269 Es werden Testszenarien gebraucht die eine ServerÃŒberlastung emulieren. 270 270 … … 274 274 Wie der Titel dieser Ausarbeitung nahe legt, heiÃt die Lösung fÃŒr all diese Probleme 'Google Web Toolkit' (oder kurz GWT). 275 275 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. 277 277 Dieses Kernkonzept wird in den folgenden Kapiteln erlÀutert. 278 278 … … 336 336 337 337 AuÃerdem wird der Quelltext komprimiert und komplett in JavaScript Dateien ausgelagert. 338 Dadurch kann die gesamte Anwendung vom Browser gecachedwerden.338 Dadurch kann die gesamte Anwendung vom Browser zwischengespeichert werden. 339 339 340 340 FÃŒr jede Kombination aus Gebietsschema und Browsertyp wird eine einzelne JavaScript Datei erstellt. … … 350 350 351 351 \subsection{ImageBundles} \label{sec_tec_gwt_imagebundles} 352 Ein weiterer Grundprozess des GWT ist es die Anzahl an HTTP- Requestsso 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. 353 353 Auch hierfÃŒr sorgt der Compiler. 354 In den meisten Websites sind es Bilder, die die meisten HTTP- Requestsverursachen.354 In den meisten Websites sind es Bilder, die die meisten HTTP-Anfragen verursachen. 355 355 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: 357 357 358 358 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- Requestladen.360 Selbst wenn der Besucher die Seite bereits besucht hat und alle Bilder nur aus dem Cachedes 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, 361 361 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 gecachedwird.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. 363 363 Eingebunden werden die Bilder weiterhin ÃŒber die 50 Bilder-Tags in ihrer OriginalgröÃe. 364 364 Per CSS werden Sie aber so verschoben, dass der Endanwender, bis auf den Geschwindigkeitsvorteil keinen Unterschied mehr merkt. … … 504 504 505 505 Die Implementierung funktioniert mit der Schnittstelle HistoryListener, die onHistoryChanged(String token) implementiert. 506 D er token lÀsst sich wie ein Dateiname behandeln.507 Dadurch kann jede GUI-Aktion durch ein enToken abgebildet werden.506 Das Token lÀsst sich wie ein Dateiname behandeln. 507 Dadurch kann jede GUI-Aktion durch ein Token abgebildet werden. 508 508 509 509 … … 528 528 529 529 Die Sprache wird je nach Browserkonfiguration automatisch gewÀhlt. 530 Mit dem GET-Parameter localelÀsst sie sich aber auch erzwingen.530 Mit dem GET-Parameter 'locale' lÀsst sie sich aber auch erzwingen. 531 531 532 532 … … 538 538 bietet das GWT ÃŒber JSNI die Möglichkeit normalen JavaScript Code einzubinden. 539 539 540 Soll eine solche Methode geschrieben werden, wird das SchlÃŒsselwort nativeund eine spezielle Kommentarsyntax verwendet.540 Soll eine solche Methode geschrieben werden, wird das SchlÃŒsselwort 'native' und eine spezielle Kommentarsyntax verwendet. 541 541 Wie im folgenden Beispiel zu sehen, ist selbst ein Zugriff auf Attribute und Methoden des GWT möglich. 542 542 543 Der Zugriff auf window und documentist 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. 544 544 545 545 \begin{lstlisting}[language=java]
