Changeset 67
- Timestamp:
- 01/26/08 13:56:47 (5 years ago)
- Files:
-
- 1 modified
-
documentation/trunk/doc.tex (modified) (21 diffs)
Legend:
- Unmodified
- Added
- Removed
-
documentation/trunk/doc.tex
r66 r67 79 79 die durch asynchrone Verbindungen in einer interaktiven Umgebung beliebige Datenmengen bewÀltigen können. 80 80 81 HTTP-Requests können an den Server geschickt werden, ohne dass die eigentliche Seite neu geladen werden mussoder 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} … … 104 104 JavaScript lÀuft in einer Sandbox und schrÀnkt darÃŒber den Zugriff auf Netzwerkfunktionen oder das Dateisystem ein. 105 105 106 JavaScriptswerden in das HTML-Dokument eingebettet, um auf Events zu reagieren oder die DOM ReprÀsentierung der Website dynamisch zu manipulieren.106 Skripte werden in das HTML-Dokument eingebettet, um auf Events zu reagieren oder die DOM ReprÀsentierung der Website dynamisch zu manipulieren. 107 107 108 108 Ein simples Beispiel ist der Aufruf der alert-Funktion. … … 133 133 Der andere Computer antwortet mit einem Inhalt. 134 134 135 Normale Websites werden in einem Rutsch geladen.135 Normale Websites laden in einem Rutsch. 136 136 Dazu formuliert man einen HTTP-Request mit Hostnamen und Pfad. 137 137 Wird die URL www.foo.com/ajax.html im Browser aufgerufen, wird der folgende HTTP-Request gesendet: … … 192 192 193 193 \section{AJAX Programmierung} \label{sec:ajax_programming} 194 FÃŒr AJAX Kunstwerke gibt es viele unterschiedliche JavaScript basierte Frameworks,195 fÃŒr das VerstÀndnis genÃŒgt es aber sich den AJAX-Kern anzuschauen.194 FÃŒr fertige AJAX Kunstwerke gibt es viele verschiedene JavaScript basierte Frameworks. 195 FÃŒr das VerstÀndnis genÃŒgt es aber sich den AJAX-Kern anzuschauen. 196 196 Dieser besteht aus dem XMLHttpRequest im Browser und JavaScript, ÃŒber das dieser angesprochen wird. 197 197 … … 221 221 \subsection{Callback Methoden} \label{sec_ajax_callback} 222 222 Die Callback Methode wird bei jeder der vier readyState-Ãnderungen aufgerufen. 223 Erst beim Status Vie wsteht das gesamte Dokument zur VerfÃŒgung.223 Erst beim Status Vier steht das gesamte Dokument zur VerfÃŒgung. 224 224 225 225 Wann und ob die readyStates tatsÀchlich wechseln, kann auf Grund vieler Einflussfaktoren wie Bandbreite und Serverauslastung nie garantieren werden. … … 228 228 229 229 \subsection{Beispiel} \label{sec_ajax_example} 230 Nun ist alles bekannt, was benötigt wird um die Funktion foo() zu implementieren.230 Nun ist alles bekannt, was benötigt wird, um die Funktion foo() zu implementieren. 231 231 Sie soll einen AJAX Request ausfÃŒhren, um eine Liste von Namen nachzuladen. 232 232 Dazu wird die AJAX Klasse initialisiert und ein GET-Request an backend.php geschickt. … … 243 243 \begin{lstlisting}[caption={Beispiel}\label{lst:ajax_example},captionpos=b,language=javascript] 244 244 function foo() { 245 var req = new XMLHttpRequest(); 245 var req = new XMLHttpRequest(); //mozilla implementierung 246 246 req.open('get', 'backend.php'); 247 247 req.onreadystatechange = function() { … … 264 264 Bei der normalen GUI-Programmierung kann die Anwendung bereits innerhalb der IDE debuggt und getestet werden. 265 265 Da JavaScript-Anwendungen aber erst beim Endbenutzer interpretiert werden, 266 b raucht man verschiedene Testsysteme aus Betriebsystemund Browserkombinationen.266 benötigt der Entwickler verschiedene Testsysteme aus Betriebsystem- und Browserkombinationen. 267 267 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 unmöglich zu testen. 268 268 Es werden Testszenarien gebraucht die eine ServerÃŒberlastung emulieren. … … 278 278 \section{Google Web Toolkit} \label{sec:gwt} 279 279 \subsection{EinfÃŒhrung in das Google Web Toolkit} \label{sec_gwt_intro} 280 Das Google Web Toolkit ist ein Java Framework zum Entwickeln von Web-Anwendungen, fÃŒr die man keine Java Umgebung braucht.280 Das Google Web Toolkit ist ein Java Framework zum Entwickeln von Web-Anwendungen, fÃŒr die keine Java Umgebung gebraucht wird. 281 281 So widersprÃŒchlich das Konzept klingen mag, um so mehr ÃŒberzeugt es durch die vielen Vorteile. 282 282 … … 297 297 Eine gute IDE unterstÃŒtzt dabei mit Debugging-Möglichkeit, Refactoring-Tools und einer Unit-Testing-Integration. 298 298 299 Ãfter wird man wÀhrend des Testens in den Hosted-Mode wechseln, der einen Browser innerhalb einer Java VirtualMachine emuliert.300 Entsprechende Break-Points vorausgesetzt, kann man die Anwendung auch hier Testen.299 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. 301 301 302 302 Skriptsprachen-Programmierer mÃŒssen ihr 'Try and Run' Konzept nicht verwerfen, … … 305 305 306 306 Wurde entschieden den fertig konfigurierten Tomcat-Server des Toolkits zur Prototype-Backend-Implementierung zu verwenden, 307 kann man den kompletten Anwendungszyklus debuggen.307 kann der komplette Anwendungszyklus debuggt werden. 308 308 Dadurch kann ein GUI Klick von vorne, bis hinten debuggt werden, wie es sonst mit AJAX nicht möglich gewesen wÀre. 309 309 … … 318 318 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 319 so wie ein klassischer Java Compiler aus Java-Code Bytecode erstellt. 320 Der Unterschied ist, dass man den erstellten Code ohne Java Runtime Umgebung und mit jedem aktuellen Browser ausfÃŒhren kann.320 Der Unterschied ist, dass der erstellte Code ohne Java Runtime Umgebung und mit jedem aktuellen Browser ausgefÃŒhrt werden kann. 321 321 322 322 Beim Compilieren wird entschieden welche Funktionen des GWT ÃŒberhaupt genutzt werden. … … 331 331 die er tatsÀchlich benötigt. 332 332 333 Hatte man fÃŒr einen Framework-Einsatz noch vorher zwischen sauberem Code und Mengen an unbenutztem Framework-Code abwÀgen wollen,334 kann m an mit dem GWT fast nur sparen.333 Wurde vor einen Framework-Einsatz vorher noch zwischen sauberem Code und Mengen an unbenutztem Framework-Code abgewogen, 334 kann mit dem GWT fast nur gespart werden. 335 335 336 336 Die eigentliche HTML Datei sorgt nur fÃŒr die Einbindung des JavaScripts. … … 341 341 In den meisten Websites sind es Bilder, die die meisten HTTP-Requests verursachen. 342 342 Daher haben sich die GWT Entwickler das Konzept der ImageBundles ÃŒberlegt. 343 Vielleicht sieht man den enormen Vorteil anhand eines Beispiels.343 Vielleicht wird der Vorteil anhand eines Beispiels gebuwsster: 344 344 345 345 Typische WYSIWYG-Editoren bringen etwa 50 Buttons mit, die dem Anwender eine Office-Àhnliche OberflÀche vermitteln sollen. … … 358 358 359 359 ImageBundles werden als Interface geschrieben. 360 Will man Bilder zentral verwalten fasst man sie einfach per Ableiten zusammen und der Compiler erstellt ein einziges Bild.360 Sollen die Bilder zentral verwaltet werden, mÃŒssen sie einfach per Ableiten zusammengefasst werden und der Compiler erstellt ein einziges Bild. 361 361 362 362 … … 365 365 Damit das Gesamtsystem aber ÃŒberhaupt funktionieren kann, benötigt jede Anwendung auch ein Backend. 366 366 FÃŒr die Anbindung an das Backend nutzt das GWT 'Remote Procedure Calls' (kurz RPC), 367 ÃŒber die man eine Model-View-Controller Architektur umsetzen kann.367 ÃŒber die eine Model-View-Controller Architektur umgesetzt werden kann. 368 368 369 369 FÃŒr die Prototyp-Entwicklung des Backends bringt das Google Web Toolkit einen Tomcat Server mit. 370 Damit kann man die Anwendung komplett debuggen.371 370 Das Toolkit fasst also alles benötige in einem Paket zusammen. 372 371 Falls kein Applikation-Server zur VerfÃŒgung steht, … … 431 430 \end{lstlisting} 432 431 433 Wi ll man die Anwendung mit dem mitgelieferten Tomcat-Server testen,432 Wird die Anwendung mit dem mitgelieferten Tomcat-Server getestet, 434 433 muss das Backend das MailService-Interface implementieren. 435 434 Komplexe Datentypen sind erlaubt. 436 435 437 436 438 \section{Basiselemente des GWT} \label{sec:basics} 437 \section{Elemente des GWT} \label{sec:elements} 438 Neben den behandelten Performance-Vorteilen, durch die erst eine Reaktionszeit Àhnlich der von Desktop- möglich wurde, 439 bringt das GWT Basiselemente fÃŒr die GUI-Programmierung und Konzepte um die Usability von Web-Anwendungen zu erhöhen mit. 440 439 441 \subsection{Panels} \label{sec:gwt_panels} 440 442 Wer grafische OberflÀchen bereits mit Java erstellt hat, kennt das Layout-Manager-Konzept von Swing und AWT. … … 449 451 \centering 450 452 \includegraphics{img/panel.eps} 451 \caption{Das DockPanel gleicht dem TODOvon AWT.}453 \caption{Das DockPanel zur Anordnung von Komponenten Àhnelt dem BorderLayout von AWT.} 452 454 \end{figure} 453 455 … … 455 457 Hinter Widgets versteckt sich der deutsche Begriff 'grafisches Bedienelement'. 456 458 Das GWT versteht sich auf Web- und so will es auch die gewohnten Browser-Elemente aus Usability-Aspekten behalten. 457 Neben den fÃŒr HTML Entwickler bekannten Elementen wie Eingabefeld, Button und Auswahlbox bringt das GWT aber noch weitere Widgets mit,458 die man von Desktop-Applikationen bereits kennt.Dazu zÀhlen der Tree fÃŒr eine Baumdarstellung eines Verzeichnisbaums,459 Neben den fÃŒr HTML Entwickler bekannten Elementen wie Eingabefeld, Button und Auswahlbox bringt das GWT aber noch weitere, aus Desktop-Applikationen bekannte Widgets mit. 460 Dazu zÀhlen der Tree fÃŒr eine Baumdarstellung eines Verzeichnisbaums, 459 461 die MenuBar fÃŒr eine MenÃŒleiste, 460 462 die TabBar fÃŒr das Container-Wechsel ÃŒber eine Reiterleiste, 461 463 das StackPanel oder die RichTextArea fÃŒr WYSIWYG-Editoren. 462 464 463 AuÃerdem findet manneben Kalender- und Zeichenwidgets auch 'Drag & Drop' Elemente in der aktiven OpenSource Community hinter dem GWT.465 AuÃerdem gibt es neben Kalender- und Zeichenwidgets auch 'Drag & Drop' Elemente in der aktiven OpenSource Community hinter dem GWT. 464 466 465 467 \begin{figure}[htp] … … 468 470 \caption{Neben altbekannten Formular-Elemente werden auch neue Widgets mitgeliefert.} 469 471 \end{figure} 470 471 472 \subsubsection{Beispiel 'Hello World!'} \label{sec_gwt_widgets_hello_world}473 Mit dem Wissen ÃŒber Widgets und Panels sollten Sie nun das erste <<Hello Word>> verstehen können.474 475 \begin{lstlisting}[caption={Java Hello World}\label{lst:hello_world_java},captionpos=b,language=java]476 import com.google.gwt.core.client.EntryPoint;477 import com.google.gwt.user.client.Window;478 import com.google.gwt.user.client.ui.*;479 480 /**481 * HelloWorld application.482 */483 public class Hello implements EntryPoint {484 485 public void onModuleLoad() {486 Button b = new Button("Click me", new ClickListener() {487 public void onClick(Widget sender) {488 Window.alert("Hello, AJAX");489 }490 });491 492 RootPanel.get().add(b);493 }494 }495 \end{lstlisting}496 497 Ãffnet man den Quelltext der Datei im Web-Mode,498 sieht man, das selbst diese simple Anwendung wie beschrieben durch das Bootstrap-Skript ausgelagert wird.499 500 \begin{lstlisting}[caption={HTML Hello World}\label{lst:hello_world_html},captionpos=b,language=html]501 <html>502 <head>503 <title>Hello</title>504 </head>505 <body bgcolor="white">506 <script language="javascript" src="Hello.nocache.js"></script>507 </body>508 </html>509 \end{lstlisting}510 511 512 \section{Arbeiten mit dem GWT} \label{sec:working}513 Neben den behandelten Performance-Vorteilen, durch die erst eine Reaktionszeit Àhnlich der von Desktop- möglich wurde,514 bringt das GWT noch weitere Konzepte mit um die Usability von Web-Anwendungen zu erhöhen.515 472 516 473 … … 657 614 658 615 616 \subsubsection{Beispiel 'Hello World!'} \label{sec_gwt_widgets_hello_world} 617 Mit dem Wissen ÃŒber Widgets und Panels sollten Sie nun das erste <<Hello Word>> verstehen können. 618 619 \begin{lstlisting}[caption={Java Hello World}\label{lst:hello_world_java},captionpos=b,language=java] 620 import com.google.gwt.core.client.EntryPoint; 621 import com.google.gwt.user.client.Window; 622 import com.google.gwt.user.client.ui.*; 623 624 /** 625 * HelloWorld application. 626 */ 627 public class Hello implements EntryPoint { 628 629 public void onModuleLoad() { 630 Button b = new Button("Click me", new ClickListener() { 631 public void onClick(Widget sender) { 632 Window.alert("Hello, AJAX"); 633 } 634 }); 635 636 RootPanel.get().add(b); 637 } 638 } 639 \end{lstlisting} 640 641 Wird der Quelltext der Datei im Web-Mode eingesehen, 642 sieht man, das selbst diese Anwendung, wie beschrieben durch das Bootstrap-Skript ausgelagert wird. 643 644 \begin{lstlisting}[caption={HTML Hello World}\label{lst:hello_world_html},captionpos=b,language=html] 645 <html> 646 <head> 647 <title>Hello</title> 648 </head> 649 <body bgcolor="white"> 650 <script language="javascript" src="Hello.nocache.js"></script> 651 </body> 652 </html> 653 \end{lstlisting} 654 655 659 656 \newpage 660 657
