Changeset 68
- Timestamp:
- 02/16/08 10:18:53 (5 years ago)
- Location:
- documentation/trunk
- Files:
-
- 1 added
- 1 modified
-
doc.tex (modified) (12 diffs)
-
img/http-ajax2.png (added)
Legend:
- Unmodified
- Added
- Removed
-
documentation/trunk/doc.tex
r67 r68 55 55 56 56 Besonders im professionellen Umfeld wird wegen der einfachen clientseitigen Einrichtung und der strikten Server/Client Trennung verstÀrkt auf Web-Anwendungen gebaut. 57 Moderne Web-Anwendungen lassen sich kom binieren, sie greifen ineinander ÃŒber und sie reagieren sofort auf das, was der Benutzer macht.57 Moderne Web-Anwendungen lassen sich komponentenweise kombinieren, sie greifen ineinander ÃŒber und sie reagieren sofort auf das, was der Benutzer macht. 58 58 59 59 Die BrÃŒcke zwischen Web- und Desktop-Welt wird durch gleiche Bedienkonzepte wie z.B. Drag-Drop, AutovervollstÀndigen oder die sofortige Formularvalidierung geschlagen. … … 76 76 HTTP zum Nachladen von Daten. 77 77 78 Das Zusammenspiel dieser Technologien erlaubt dynamische Websites,78 Das Zusammenspiel dieser drei Technologien erlaubt dynamische Websites, 79 79 die durch asynchrone Verbindungen in einer interaktiven Umgebung beliebige Datenmengen bewÀltigen können. 80 80 81 Der Client schickt HTTP-Requests an den Server, ohne dass die eigentliche Seite neu geladen wird oder der Benutzer wÀhrenddessen warten muss.81 Der Client schickt HTTP-Requests an den Server, ohne dass die eigentliche Seite neu geladen wird, oder der Benutzer wÀhrenddessen warten muss. 82 82 83 83 \subsection{Document Object Model} \label{sec_ajax_dom} 84 Das Document Object Model (kurz DOM) ist eine vom W3-Konsortium verabschiedete Norm fÃŒr die Definition einer Baumstruktur und ihrer Traversierungsfunktionen .85 Mit DOM lÀsst sich da s gesamteHTML Dokument in ein dynamisches Objekt binden.84 Das Document Object Model (kurz DOM) ist eine vom W3-Konsortium verabschiedete Norm fÃŒr die Definition einer Baumstruktur und ihrer Traversierungsfunktionen in XML. 85 Mit DOM lÀsst sich damit auch ein komplettes HTML Dokument in ein dynamisches Objekt binden. 86 86 87 87 Das Beispiel zeigt den DOM-Baum einer Standard-Web-Seite, mit Head- und Body-Bereich und mehreren Unterknoten. … … 173 173 WÀhrend des Ladevorgangs kann der Benutzer weiter mit der Seite interagieren, 174 174 da der Browser dafÃŒr sorgt, dass der asynchrone Request in einem eigenen Thread ablÀuft. 175 Dazu ist keine Socketverbindung ÃŒber TCP oder UDP notwendig. 176 175 176 Zudem ist keine Socketverbindung auf Ebene von TCP oder UDP notwendig. 177 177 Verwendet man AJAX, genÃŒgt es in der Regel einzig Daten per HTTP zu ÃŒbertragen. 178 Das EinfÃŒgen in den DOM Baum macht dann JavaScript. 179 So funktioniert das Zusammenspiel der drei Technologien. 178 179 Das EinfÃŒgen in den DOM Baum erledigt dann JavaScript. 180 So funktioniert das Zusammenspiel der drei Technologien: 181 182 Die Ajax-Engine reagiert auf einen Klick in der BenutzeroberflÀche, 183 schickt daraufhin eine HTTP-Request an den Server und sobald dieser antwortet, 184 wertet sie die Antwort aus und fÃŒgt die Informationen mit DOM-Manipulationen in das eigentlich Dokument wieder ein. 180 185 181 186 \begin{figure}[htp] … … 185 190 \label{fig:http-ajax} 186 191 \end{figure} 187 188 Die Ajax-Engine reagiert auf einen Klick in der BenutzeroberflÀche,189 schickt daraufhin eine HTTP-Request an den Server und sobald dieser antwortet,190 wertet sie die Antwort aus und fÃŒgt die Informationen mit DOM-Manipulationen in das eigentlich Dokument wieder ein.191 192 192 193 … … 268 269 Es werden Testszenarien gebraucht die eine ServerÃŒberlastung emulieren. 269 270 270 Selbst fÃŒr den Benutzer ergeben sich Nachteile, denn das Navigieren ÃŒber die Browserfunktionen oder das Neuladen der Seite können ohne ein ausgeklÃŒgeltes Konzept zu Fehlverhalten fÃŒhren. 271 Selbst fÃŒr den Benutzer ergeben sich Nachteile. 272 Denn das Navigieren ÃŒber die Browserfunktionen oder das Neuladen der Seite können ohne ein ausgeklÃŒgeltes Konzept zu Fehlverhalten fÃŒhren. 271 273 272 274 Wie der Titel dieser Ausarbeitung nahe legt, heiÃt die Lösung fÃŒr all diese Probleme 'Google Web Toolkit' (oder kurz GWT). … … 286 288 287 289 Entwickler können ihre fÃŒr Java bevorzugte Entwicklungsumgebung benutzen. 288 Dabei brauchen sie sich nicht mit HTML, JavaScript und vor allem den ganzen Browser-Workarounds auseinander zu setzen.290 Dabei brauchen sie sich nicht mit HTML, JavaScript und vor allem den ganzen Browser-Workarounds auseinander zu setzen. 289 291 Sie können GUIs programmieren, wie sie es bereits von SWING und AWT gewohnt sind, 290 292 ohne dabei auf vorhandene Build- und Testing-Tools verzichten zu mÃŒssen. … … 293 295 \subsection{Entwicklungszyklus} \label{sec_devcycle} 294 296 Das GWT arbeitet mit einer Standard-Verzeichnisstruktur, die entweder manuell oder unterstÃŒtzt durch die mitgelieferten Skripte erstellt werden kann. 297 FÃŒr Eclipse wird erst ein Projektverzeichnis zum Import in den Workspace erstellt und dann in Schritt zwei die Anwendung angelegt. 298 % auch wenn es wieder ein foren-tipp ist, der tipp muss einfach rein 299 Die Schritte sollten in einem eigenen Verzeichnis durchgefÃŒhrt werden, da die Verzeichnisstruktur direkt im ausfÃŒhrenden Verzeichnis abgelegt wird. 300 \begin{lstlisting}[\label{lst:devcycle_projectCreator},language=bash] 301 ./../gwtpfad/projectCreator -eclipse MeineErstesProjekt 302 ./../gwtpfad/applicationCreator -eclipse MeineErstesProjekt com.gwt.client.MeineErsteAnwendung 303 \end{lstlisting} 295 304 296 305 Geeignete Entwicklungsumgebungen können das Projektverzeichnis dann als normales Java-Projekt importieren und die eigentiche Programmierung kann beginnen. 297 Eine gute IDE unterstÃŒtzt dabei mit Debugging-Möglichkeit, Refactoring-Tools und einer Unit-Testing-Integration. 306 Die IDE kann dabei mit Debugging-Möglichkeit, Refactoring-Tools und einer Unit-Testing-Integration unterstÃŒtzen. 307 Die Standard-Verzeichnisstruktur enthÀlt bereits ein einfaches 'Hello World' das in den nÀchsten Schritten zu einer Anwendung wachsen soll. 298 308 299 309 WÀhrend des Testens wird öfter in den Hosted-Mode gewechselt, der einen Browser innerhalb einer Java VirtualMachine emuliert. 300 Entsprechende Break-Points vorausgesetzt, kann die Anwendung hier live getestet werden.310 Die Anwendung kann hier live getestet und - entsprechende Break-Points vorausgesetzt - auch debuggt werden. 301 311 302 312 Skriptsprachen-Programmierer mÃŒssen ihr 'Try and Run' Konzept nicht verwerfen, 303 da der Hosted-Mode-Browser sie weder durch umstÀndliche IDE-Prozesse, noch durch lange Kompilierzeiten ausbremst. 313 da der Hosted-Mode-Browser sie weder durch umstÀndliche IDE-Prozesse, 314 noch durch lange Kompilierzeiten ausbremst. 304 315 Ãnderungen im Java Quelltext Code werden 'Just in time' ÃŒbernommen. 305 316 … … 317 328 \subsection{Compiler} \label{sec_tec_compiler} 318 329 Der Compiler ist das HerzstÃŒck des GWT. Er verarbeitet den programmierten Java-Code und erstellt daraus einen neuen Code aus HTML und JavaScript - 319 so wie ein klassischer Java Compiler aus Java-Code Bytecode erstellt.330 so wie ein klassischer Java Compiler aus Java-Code einen Bytecode erstellt. 320 331 Der Unterschied ist, dass der erstellte Code ohne Java Runtime Umgebung und mit jedem aktuellen Browser ausgefÃŒhrt werden kann. 321 332 … … 363 374 \subsection{Remote Procedure Call} \label{sec_tec_gwt_rpc} 364 375 Bisher wurden die optimierten Frontend-Prozesse von GWT vorgestellt. 365 Damit das Gesamtsystem aber ÃŒberhaupt funktionieren kann, benötigt jede Anwendung auch ein Backend. 366 FÃŒr die Anbindung an das Backend nutzt das GWT 'Remote Procedure Calls' (kurz RPC), 376 FÃŒr die Anbindung an ein Backend nutzt das GWT 'Remote Procedure Calls' (kurz RPC), 367 377 ÃŒber die eine Model-View-Controller Architektur umgesetzt werden kann. 368 378 379 Das Toolkit fasst also alles benötige in einem Paket zusammen. 369 380 FÃŒr die Prototyp-Entwicklung des Backends bringt das Google Web Toolkit einen Tomcat Server mit. 370 Das Toolkit fasst also alles benötige in einem Paket zusammen.371 381 Falls kein Applikation-Server zur VerfÃŒgung steht, 372 382 stellt dies durch die Standardisierung von Remote Procedure Calls auch kein Problem dar und 373 es können andere Programmiersprachen wie zum BeispielPHP, Python oder C\# im Backend genutzt werden.383 es können andere Programmiersprachen wie PHP, Python oder C\# im Backend genutzt werden. 374 384 375 385 Eine Besonderheit der RPC Implementierung des GWT, … … 377 387 sind die polymorphen Klassenhierarchien und das Durchreichen von Exceptions. 378 388 379 Die Implementierung von RemoteProcedure Calls erstreckt sich ÃŒber mehrere Dateien. 380 Es wird die Beispielanwendung der AJAX-Programmierung implementiert. 389 Die Implementierung von RemoteProcedure Calls erstreckt sich ÃŒber mehrere Klassen und Interfaces. 390 Aufbauen auf dem 'Hello World' wird nun die Beispielanwendung der AJAX-Programmierung implementiert. 391 392 Nach Konvention sollten dazu neben dem existierenden Client-Paket noch ein "rpc" und ein "server" Paket angelegt werden. 393 Das rpc-Paket wird die folgende Klassenstruktur abbilden. 381 394 382 395 \begin{figure}[htp] … … 386 399 \label{fig:rpc} 387 400 \end{figure} 401 402 \newpage 388 403 389 404 MailService ist ein Interface das RemoteService erweitert und die tatsÀchliche Implementierung beschreibt. … … 408 423 409 424 Der emailService Proxy ist eine MailServiceAsync Instanz, wird aber vom GWT initialisiert. 425 Hier wird er mit der URL des RPC Moduls des GWT initialisiert. 426 Alternativ kann man hier einen Pfad zur eigenen RPC Implementierung eintragen. 410 427 \begin{lstlisting}[caption={emailServiceAsync}\label{lst:gwtsample_emailserviceasync},captionpos=b,language=java] 411 428 MailServiceAsync emailService =
