62
Werkzeugkasten Das Google Web Toolkit (GWT) Rüdiger Schobbert emesit GmbH & Co. KG

Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

WerkzeugkastenDas Google Web Toolkit (GWT)

Rüdiger Schobbertemesit GmbH & Co. KG

Page 2: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2

Agenda

• Einführung• Los geht's• Bestandteile eines Projekts• GWT in der näheren Betrachtung• Ausblick auf GWT 2.0

Page 3: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 3

Einführung...

Page 4: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 4

Was verspricht GWT?

Google sagt:

„GWT's mission is to radically improve the web experience for users by enabling developers to use existing Java tools to build no-compromise AJAX for any modern browser.“

„With Google Web Toolkit (GWT), you write your AJAX front-end in the Java programming language which GWT then cross-compiles into optimized JavaScript that automatically works across all major browsers.“

Page 5: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 5

Stärken von GWT?

• Code wird in Java geschrieben• Jede Lieblings-IDE kann verwendet werden• Als Bytecode in einem speziellen Webbrowser

debuggen (Hosted Mode)• Cross-compile in optimiertes JavaScript (Web Mode)• Benötigt kein Browser Plugin• Beinhaltet umfangreiche Cross-Browser Bibliotheken

• User Interface (DOM, Widgets)• Client/Server Kommunikation (XHR, RPC, JSON)• Applikations-Infrastruktur (History, Timers, Unittesting, i18n)• Externe Services (Gadgets, Gears, Google Maps)

Page 6: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 6

Was ist GWT?

• (Noch) ein Toolkit für die Entwicklung von Webanwendungen

• Besteht aus • Java Klassenbibliothek• Verschiedene Werkzeuge

• Java-to-JavaScript Compiler• Wandelt den clientseitigen Java Code in JavaScript um• 'Echter' Compiler

• Dead code elimination (classes/methods/-parameters/fields)• Inlinen von Methoden

• Beachtet Browser Inkompatibilitäten• Erzeugt hochoptimierten JavaScript Code

Page 7: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 7

Warum GWT?

• Aus Entwicklersicht:• dieselbe Programmiersprache (Java) mit allen Vorteilen

• gewohnte Werkzeuge (Eclipse, Netbeans, JProfiler, JUnit, Debugger)

• Statische Typprüfung• Refactoring

• minimale Einarbeitung• AJAX Programmierung wird kinderleicht

• Aus Entscheidersicht:• Einsatz bestehender Entwickler und Tools• Opensource mit freier Lizenz (Apache 2.0 License)• Google steht dahinter und steht zu dem Projekt

Page 8: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 8

Was wird benötigt?

• Java SDK (ab JDK 5.0)• Sinnvollerweise eine IDE (am besten Eclipse samt

Google GWT Plugin)• GWT (ist im Plugin enthalten)• Servlet Container (z.B. Tomcat)• Gängiger Browser mit aktiviertem JavaScript

• Firefox• IE6, IE7, IE8• Safari 2, 3, 4• Opera 9.0• Chrome

Page 9: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 9

Und los geht's...

(mit eclipse 3.5 und dem google eclipse plugin)

Page 10: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 10

Projekt generieren

Page 11: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 11

Projekt starten

Page 12: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 12

Projekt läuft

Page 13: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 13

Projekt läuft

Page 14: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 14

Button "Compile/Browse" drücken...

Page 15: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 15

...und die Applikation im Standardbrowser betrachten

Page 16: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 16

Die Bestandteile des generierten Projekts...

Page 17: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 17

„Hello“ Projektbestandteile

HTMLDatei

CSSDatei

GWTModul

Beschreibung

JavaEntryPoint

Klasse

Page 18: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 18

HTML Hostpage (Hello.html)

<html><head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link type="text/css" rel="stylesheet" href="Hello.css"> <title>Web Application Starter Project</title> <script type="text/javascript"language=" javascript" src="hello/hello.nocache.js"/></head><body> <h1>Web Application Starter Project</h1> <table align="center"> <tr><td colspan="2" style="font-weight:bold;">Please enter your name:</td></tr> <tr><td id="nameFieldContainer"></td> <td id="sendButtonContainer"></td></tr> </table></body></html>

Page 19: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 20

Java EntryPoint Klasse(Hello.java)

public class Hello implements EntryPoint { public void onModuleLoad() { final Button sendButton = new Button("Send"); final TextBox nameField = new TextBox(); nameField.setText("GWT User"); RootPanel.get("nameFieldContainer").add(nameField); RootPanel.get("sendButtonContainer").add(sendButton); ... }}

Page 20: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 22

GWT Modul Beschreibung (Hello.gwt.xml)

<module rename-to='hello'> <!-- Inherit the core Web Toolkit stuff. --> <inherits name='com.google.gwt.user.User'/>

<!-- Inherit the default GWT style sheet. You can change --> <!-- the theme of your GWT application by uncommenting --> <!-- any one of the following lines. --> <inherits name='com.google.gwt.user.theme.standard.Standard'/> <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> --> <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->

<!-- Specify the app entry point class. --> <entry-point class='de.emesit.campus.client.Hello'/></module>

Page 21: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 23

GWT in der näheren Betrachtung:

Betriebsmodi - Hosted und Web Mode...

Page 22: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 24

Hosted Mode (Development Mode)

• eine Art Browser Emulator• Klassen werden nicht nach JavaScript umgewandelt

sondern direkt als Bytecode ausgeführt• kein deployment nötig• Änderungen am Code können sehr schnell betrachtet

werden, kein Neustart nötig einfach 'Refresh' drücken• Debuggen von client- und serverseitigem Code direkt

in der IDE möglich• Ab GWT 1.6 Refresh auch bei Serverseitige

Codeänderungen möglich

Page 23: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 25

Web Mode (Deployment Mode)

• Anwendung wird nativ als JavaScript und HTML ausgeführt

• Dazu Kompilieren nach JavaScript nötig• Webmode kann aus dem Hosted Browser aufgerufen

werden

Page 24: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 26

GWT in der näheren Betrachtung:

Sprachelemente und Bibliotheken...

Page 25: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 27

Die Bestandteile von GWT

JRE emulationlibrary

Web UI classlibrary

3rd partylibraries

Java Klassenbibliotheken

Java-to-JavaScriptCompiler

Hosted ModeBrowser

Weitere Tools

Entwicklungswerkzeuge

Page 26: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 28

Java Sprachunterstützung (1)

• Alle primitive Datentypen• Vorsicht: JavaScript hat nur 64 Bit Fließkommazahlen, daher

Unterschied bei Ganzzahlüberlauf• Exceptions: try, catch, finally wird unterstützt• Assertions: assert Schlüsselwort wird unterstützt• Java 5 Sprachfeatures:

• Generics• for-each Schleifen• Autoboxing• Static imports• Enums

Page 27: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 29

Java Sprachunterstützung (2)

• Kein Multithreading: synchronized Schlüsselwort wird ignoriert, entsprechende Methoden (wait, notify, etc.) ergeben Compiler Fehler

• Kein Reflection: • GWT.getTypeName(obj) statt obj.getClass().getName()• GWT.create(MyClass) statt Class.forName("MyClass")

• Keine Java Serialisierung

Page 28: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 30

JRE Emulation Library

• Ermöglicht das Übersetzen nach JavaScript• Enthält Klassen, die die Java Funktionalität

(clientseitig) emulieren• Es wird nur ein Subset der Klassen in java.lang,

java.util (sowie java.io, java.sql) unterstützt• Achtung: teilweise fehlen Methoden• Im Zweifel im Hosted Mode starten

Page 29: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 31

JRE Emulation Library

Package java.lang:Interfaces:CharSequence, Cloneable, Comparable, Iterable, Runnable

Exceptions:Arithmetic-, ArrayIndexOutOfBounds-, ArrayStore-, ClassCast-, Exception, IllegalArgument-, IllegalState-, IndexOutOfBounds-, NegativeArraySize-, NullPointer-, NumberFormat-, Runtime-, StringIndexOutOfBounds-, UnsupportedOperation-

Page 30: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 32

JRE Emulation Library

Package java.lang:Classes:Boolean, Byte, Character, Double, Float, Integer, Long, ShortObject, Number, String, StringBuffer, StringBuilderClass, Enum, Throwable, VoidMath, StackTraceElement, System

Page 31: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 33

JRE Emulation Library

Package java.util:Interfaces:Collection, List, Set, SortedSet, Map, Map.Entry, SortedMapEnumeration, Iterator, ListIterator, ComparatorQueue, RandomAccess, EventListener

Exceptions:ConcurrentModification-, EmptyStack-, MissingResource-, NoSuchElement-, TooManyListeners-

Page 32: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 34

JRE Emulation Library

Package java.util:Classes:AbstractCollection, AbstractList, AbstractMap, AbstractQueue, AbstractSequentialList, AbstractSet, ArrayList, EnumMap, EnumSet, HashMap, HashSet, IdentityHashMap, LinkedHashMap, LinkedHashSet, LinkedList, TreeMap, TreeSet, VectorArrays, Collections, PriorityQueue, StackDate, EventObject

Page 33: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 35

JRE Emulation Library

Package java.io:FilterOutputStream OutputStream PrintStream Serializable

Package java.sql:Date Time Timestamp

Page 34: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 36

Web UI Class Library

• Ähnlich zu anderen UI Bibliotheken wie Swing oder SWT

• Enthält fertige Widgets und Panels• Button, TextBox, MenuBar, Tree, SuggestBox, Hyperlink, ...• HorizontalPanel, VerticalPanel, TabPanel, …

• Events und Handlers• DOM Support• Image Bundles• Internationalisierung• Browser History Management• Cookies• Eigene Komponenten

Page 35: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 37

Web UI Class Library

• Widgets:

• Panels:

Page 36: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 38

Auf Ereignisse reagieren

• Soll auf Ereignisse reagiert werden muss das entsprechende Interface implementiert und beim Widget angemeldet werden

• Handler Interfaces (Auszug):• ChangeHandler - onChange(ChangeEvent)• ClickHandler - onClick(ClickEvent)• FocusHandler - onFocus(FocusEvent)• BlurHandler - onBlur(BlurEvent)• KeyDownHandler - onKeyDown(KeyDownEvent)• KeyUpHandler - onKeyUp(KeyUpEvent)• MouseDownHandler - onMouseDown(MouseDownEvent)• ...

• (siehe auch API Dokumentation)

Page 37: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 39

EventHandler für einen Button

• Button:• ClickHandler anmelden um auf drücken des Knopfes zu

reagieren

Button loginButton = new Button("Anmelden");loginButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { //...z.B. Meldung anzeigen }});loginButton.setEnabled(false);

Page 38: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 40

GWT in der näheren Betrachtung:

Deferred Binding...

Page 39: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 41

Deferred Binding

• Das Problem: • JavaScript unterstützt kein reflection und kein dynamic

classloading• Die Lösung:

• deferred binding - "dynamic class-loading that occurs at compile time instead of execution time."

• Der Vorteil:• optimale Größe und minimale Startzeit

• Beispiele:• Browser Support• Internationalisierung

Page 40: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 42

Deferred Binding

• Pro Browser wird eine eigene Version erzeugt

9BB0<xxx>.cache.html

35DE<xxx>.cache.html

9791<xxx>.cache.html

B365<xxx>.cache.html

F469<xxx>.cache.html

hello.nocache.js Bootstrap JavaScript

Firefox Version

Old Firefox Version (pre Gecko 1.8)

IE Version

Safari Version

Opera Version

Page 41: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 43

Deferred Binding

• Bei Verwendung von Internationalisierung

Firefox (FF) IE Safari (SA) Opera (OP)

DE

EN

FF_DE

FF_EN

IE_DE

IE_EN

SA_DE

SA_EN

OP_DE

OP_EN

Page 42: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 44

GWT in der näheren Betrachtung:

Remote Procedure Calls...

Page 43: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 45

Remote Procedure Calls

• Traditionelle Webanwendungen (ohne AJAX) laden neue Html Seiten

• GWT (AJAX) Anwendungen verwenden einen RPC Mechanismus um Daten mit dem Server auszutauschen• Ähnlich zu sonstigen Client/Server Anwendungen• Servlet auf Serverseite

• GWT verbirgt die Komplexität• Zwei Interfaces und ein Servlet erstellen• GWT übernimmt das marshalling/unmarshalling der Objekte

• Aufrufe sind asynchron• Flüssige user-experience durch Callbacks

Page 44: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 46

RPC Beispiel - serverseitig

@RemoteServiceRelativePath("Speak")public interface StringService extends RemoteService { public String hallo(String s);}

public interface StringServiceAsync { public void hallo(String s, AsyncCallback<String> callback);}

public class StringServiceServlet extends RemoteServiceServlet implements StringService { public String hallo(String s) { return "hello "+s; }}

Page 45: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 47

RPC Beispiel - clientseitig

final StringServiceAsync speakService = (StringServiceAsync)GWT.create(StringService.class);

final AsyncCallback<String> callback = new AsyncCallback<String>() { public void onSuccess(String result) { label.setText(result); } public void onFailure(Throwable caught) { }};

button.addClickListener(new ClickListener() { public void onClick(Widget sender) { speakService.hallo("Frank", callback); }});

Page 46: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 48

RPC Beispiel - clientseitig

<module><inherits name='com.google.gwt.user.User'/><inherits name='com.google.gwt.user.theme.standard.Standard'/>

<entry-point class='de.emesit.campus.client.RpcUI'/> <servlet path="/Speak" class="de.emesit.campus.server.StringServiceServlet"/> <stylesheet src='RpcUI.css' /></module>

Page 47: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 49

GWT in der näheren Betrachtung:

ImageBundle...

Page 48: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 50

ImageBundle

• Optimierte Behandlung von Bildern• Die Probleme:

• Jedes Bild erzeugt einen eigenen HTTP Request• Beim Starten 'Freshness Check' für Bilder im Cache

• für unveränderte Bilder folgt eine HTTP 304 Antwort ("Not Modified")

• unnötige freshness checks:• unnötige Verzögerung der Anzeige der Bilder• Nach HTTP 1.1 ist die Anzahl der Requests auf 2 pro

Domain und Port limitiert, dadurch werden andere Requests geblockt

• Bouncing UI Startup wegen Platzhaltern für Bilder (diese haben in der Regel eine andere Größe als die echten Bilder)

Page 49: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 51

ImageBundle

• Die Lösung: ImageBundle / ImageBundleGenerator• Bündeln der statischen Bilder in einem einzigen Bild

• ImageBundles werden beim Kompilieren automatisch durch den ImageBundleGenerator erzeugt

• Verwendung von Clip Regions um den gewünschten Bereich darzustellen

• Der Vorteil• ein HTTP Request pro ImageBundle• keine freshness checks ("great caching story")• kein Bouncy startup• Größe des ImageBundle ist deutlich kleiner als die Summe der

Größen der Einzelbilder• Compile-time Existenzprüfung der Bilder

Page 50: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 52

ImageBundle - Beispiel

public interface MyImageBundle extends ImageBundle { public AbstractImagePrototype new_file();

@Resource("open_file.png") public AbstractImagePrototype openFile();

@Resource("de/emesit/campus/images/save_file.png") public AbstractImagePrototype saveFile();}

Page 51: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 53

ImageBundle - Beispiel

public class MySimpleUI implements EntryPoint { private static final MyImageBundle IMGBUNDLE = GWT.create(MyImageBundle.class); public void onModuleLoad() { //... Image newFileImage = IMGBUNDLE.new_file().createImage(); //...

}

Page 52: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 54

GWT in der näheren Betrachtung:

History...

Page 53: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 55

History (Back Button) Unterstützung

• AJAX Applikation => kein History Support• da nur eine Seite (Hostpage)

• GWT (aber auch andere AJAX Frameworks):• Zustand in URL Fragment Identifier (#)• Dadurch:

• Feedback für Benutzer• Bookmarkable

• IFrame in Hostpage einbetten<iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"/>

• History.newItem(String) aufrufen• ValueChangeHandler implementieren

Page 54: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 56

GWT in der näheren Betrachtung:

JavaScript Native Interface...

Page 55: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 57

Natives JavaScript einbetten

• Durch JavaScript Native Interface (JSNI)• Warum?

• Lowlevel JS Funktionen aufrufen• Verwenden externer JS Bibliotheken (z.B. scriptaculous)

• Beispiel:public static native void alert(String msg) /*-{ $wnd.alert(msg);}-*/;

• Aus JavaScript Zugriff auf Java Methoden, Instanz- und Klassenvariablen, und anders herum

• Aber mitunter trickreich• Cross Browser JS

Page 56: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 58

Ausblick auf GWT 2.0...

Page 57: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 59

Ausblick auf GWT 2.0

• In-Browser Hosted Mode• Hosted Mode läuft mit jedem externen Browser• Vorteil:

• Verwendung von Entwicklungswerkzeugen wie Firebug• (unter Linux war der Hosted Browser ein uralter Mozilla)• Bessere Interaktion mit anderen Technologien (z.B. Flash)

• Compiler Enhancements• schnellere Kompilierung

• Parallelisierung (-localWorkers=4)• Draft Compile

• kleineres Kompilat

Page 58: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 60

Ausblick auf GWT 2.0

• Entwickler unterstütztes Code Splitting• Applikation wird aufgeteilt in kleinere Häppchen• Dadurch schnellerer Applikationsstart, • GWT.runAsync() im eigenen Code definiert einen Split Point

• Predictable Layout• Besseres regelbasiertes Layout• Kein Reagieren mehr auf WindowResizeEvent• Neue Panels für besseres Layouting

• ClientBundle (ImageBundle war nur der Anfang)• beliebige Text-/Xml-/Css-Resourcen zu Bundles

zusammenfassen• Vorteil:

• ...wie bei ImageBundle...

Page 59: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 61

interface MyBundle extends ClientBundle { @Source("smiley.gif") ImageResource smileyImage();

@Source("app_config.xml") TextResource appConfig();

@Source("wordlist.txt") ExternalTextResource wordlist();

@Source("manual.pdf") DataResource ownersManual();

@Source("super-fancy.css") CssResource superFancy();}

ClientBundle - Beispiel

Page 60: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 62

//Verwenden von Konstanten:@def hardToMissThickness 8px;@def scaryColor #F00;.error-border { border: hardToMissThickness solid scaryColor;}//Verwenden von Bedingungen@if user.agent safari { .error-border { -webkit-border-radius: 4px; }} @elif user.agent gecko { .error-border { -moz-border-radius: 4px; }}

// !!!...und mehr... !!!

ClientBundle Killerfeature: CssResource

Page 61: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Herbstcampus 2009 – Das Google Web Toolkit (GWT) 63

Demo...

Noch Zeit?Demo

Page 62: Rüdiger Schobbert - Herbstcampus 2020€¦ · Herbstcampus 2009 – Das Google Web Toolkit (GWT) 2 Agenda •Einführung •Los geht's •Bestandteile eines Projekts •GWT in der

Vielen Dank!

Rüdiger Schobbertemesit GmbH & Co. KG