Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Client-Server-Architektur

Ähnliche Präsentationen


Präsentation zum Thema: "Client-Server-Architektur"—  Präsentation transkript:

1 Client-Server-Architektur
Learning By Doing Client-Server-Architektur Web-Browser Dünner Client-Dünner Server Web-Browser Dünner Client-Dicker Server CGI, JSP, PHP, ASP, ... Web-Browser Hilfsprogramm Dicker Client-Dünner Server JavaScript, Applet, ActiveX

2 Applets Learning By Doing Beispiele auf www.aplu.ch/applets
2 Sorten Applets Learning By Doing Applets In Browserfenster eingebettet Eigenes Applikationsfenster Beispiele auf

3 Callbackmechanismen bei Applets
Learning By Doing Callbackmechanismen bei Applets Ein Applet ist ein eventgesteuertes Java-Programm Die Events werden vom Browser über Callbackmethoden dem Applet mitgeteilt Damit ein Applet in den Genuss dieser Aufrufe kommt, muss es eine Klasse sein, die aus der Klasse Applet oder JApplet abgeleitet wird, und nach Bedarf folgende Callbackmethoden überschreibt: Methode Ereignis/Aufruf Typische Verwendung void init() Nach Initialisierungsphase. Informiert, dass die Klassen geladen sind und der Applet-Kontext erstellt ist ·      Initialisierung von GUI-Komponenten ·      Registrierung von Listener ·      Hinzufügen von Komponenten (Buttons, usw.) ·      Holen von HTML-Parameterwerten void start() Nach init() und immer, wenn man auf die HTML-Seite zurückkommt ·  Starten oder Reaktivieren eines eigenen Threads ·      Startwert-Initialisierung void stop() Beim Verlassen der HTML-Seite ·      Stoppen des eigenen Threads ·      Anhalten des Abspielens von Sound void destroy() Beim Beenden des Browsers (Normalerweise nicht verwendet) s. Buch S. 624ff

4 Zeichnen/Ausschreiben in ein Applet-Fenster
Paint, update Learning By Doing Zeichnen/Ausschreiben in ein Applet-Fenster Die aus Applet abgeleitete eigene Appletklasse besitzt als Oberklasse auch die Klasse Container, welche die Methode paint() enthält. Diese wird immer dann vom System aufgerufen, wenn ein Neuzeichnen des Appletfensters notwendig ist Um in das Appletfenster zu zeichnen oder Text auszuschreiben, überschreibt man in der eigenen Appletklasse diese Methode und führt darin die gewünschten Aktionen aus Damit wir der paint() immer dann ausgeführt, wenn das System ein Neuzeichnen verlangt (systemgetriggertes Rendern) oder wenn das Programm repaint() aufruft Bei der Verwendung von JApplet (Swing) ist statt paint() die Methode paintComponent() zu verwenden. Das Applet wird mit einem Applet-Tag auf einer HTML-Seite aufgerufen. Dieses enthält einige Parameter (Appletklassendatei, Grösse des Fensters, usw.) <html> <head> <title>AppletEx1</title> </head> <body> AppletEx1<br> <applet code="AppletEx1.class" width="401" height="401"> </applet> </body> </html> s. Buch S. 624ff

5 Das erste Applet Learning By Doing überflüssig: // AppletEx1.java
import java.applet.*; import java.awt.*; public class AppletEx1 extends Applet { private int paintCounter; public void init() paintCounter = 0; } public void paint(Graphics g) paintCounter++; g.drawOval(0, 0, 400, 400); g.drawString("WBZ-1 \"Java im Unterricht\"", 130, 200); showStatus("paint: " + Integer.toString(paintCounter)); public void start() public void stop() public void destroy() überflüssig: Nummer zur Sicherstellung, dass richtige Version geladen ist Das erste Applet Editieren Compilieren HTML-Datei in gleiches Verzeichnis wie AppletEx1.class kopieren Mit Browser HTML-Datei laden. Internet Explorer: Mit Ctrl-Reload die neue Version holen Eventuell mit FTP auf Web-Server kopieren

6 Das zweite Applet ... oh je, der Browser hängt! Learning By Doing
AppletEx2 Learning By Doing Das zweite Applet // AppletEx2.java import java.applet.*; import java.awt.*; public class AppletEx2 extends Applet { public void paint(Graphics g) for (int i = 0; i < 100; i++) g.drawOval(i, i, i+10, i+10); } Extrem einfach (auf den ersten Blick) Erst vollständiges Bild sichtbar Analog wie bei Applikation main() aufgerufen wird, ist es hier paint(), aber auch jedesmal wenn Fenster zerstört wird Verständnis von extends nötig Gefährliche Applets einfach zu erstellen while (true) {} ... oh je, der Browser hängt!

7 Das dritte Applet - 1. Teil
AppletEx3 – 1. Teil Learning By Doing Das dritte Applet - 1. Teil // AppletEx3.java import java.applet.*; import java.awt.*; import java.awt.image.*; public class AppletEx3 extends Applet implements Runnable { private boolean isRunning = false; private BufferedImage bi; private Graphics2D g2D; public void init() bi = new BufferedImage(401, 401, BufferedImage.TYPE_INT_RGB); g2D = bi.createGraphics(); g2D.setColor(Color.green); g2D.fillRect(0, 0, 401, 401); } public void start() isRunning = true; new Thread(this).start(); public void stop() isRunning = false; Kann ein Thread sein (implementiert run-Methode) Doppelbufferung (Offscreen Buffer) Grapik-Kontext des Buffers Hintergrundfarbe setzen (Löschen mit Rechteck) Run-Flag setzen Thread starten Run-Flag zurücksetzen

8 Das dritte Applet – 2. Teil
AppletEx3 – 2. Teil Learning By Doing Das dritte Applet – 2. Teil public void run() { while(isRunning) for(int i = 0; i < ; i++) Math.sin(1); int x = (int)(500*Math.random()); int y = (int)(500*Math.random()); Color c = new Color((float)Math.random(), (float)Math.random(), (float)Math.random()); g2D.setColor(c); g2D.fillArc(x-100, y-100, 50, 50, 0, 360); repaint(); } public void paint(Graphics g) g.drawImage(bi, 0, 0, null); run-Methode des Threads run-Loop Wartenschleife (unelegant) Kreise mit zufälliger Farbe Aufforderung, paint() aufzurufen paint-Methode Kopieren der Offscreen- Buffers auf Bildschirm Component.update() löscht den Bildschirm und ruft paint() auf. update() überschreiben und paint() aufrufen, ohne zu löschen. public void update(Graphics g) { paint(g); } Flacker, flacker, ... warum?

9 Das dritte Applet – Ausführung
AppletEx3 – Ausführung Learning By Doing Das dritte Applet – Ausführung Geschafft!

10 AppletEx4 – GPanel APPLETFRAME
Learning By Doing Das vierte Applet – GPanel (APPLETFRAME) // AppletEx4.java import javax.swing.*; import ch.aplu.util.*; public class AppletEx4 extends JApplet { GPanel p; public void start() p = new GPanel(GPanel.APPLETFRAME); p.title("Java - exemplarisch"); p.window(0, 8, 0, 8); for (int i = 0; i < 8; i++) for (int j = 0; j < 8; j++) if ((i + j) % 2 == 0) p.fillRectangle(i, j, i + 1, j + 1); } Eigenständiges Fenster Konstruktor mit speziellem Parameter <html> <head> <title>AppletEx4</title> </head> <body> AppletEx4<br> <applet code="AppletEx4.class" archive="aplu.jar" width="0" height="0"> </applet> </body> </html> AppletEx4.html jar-Datei muss im gleichen Verzeichnis sein Grösse durch GPanel gegeben

11 AppletEx5 – GPanel EMBEDDED
Learning By Doing Das fünfte Applet – GPanel (EMBEDDED) // AppletEx5.java import javax.swing.*; import ch.aplu.util.*; public class AppletEx5 extends JApplet implements Runnable { GPanel p; public void start() p = new GPanel(GPanel.EMBEDDED); p.window(0, 8, 0, 8); getContentPane().add(p); new Thread(this).start(); } public void run() for (int i = 0; i < 8; i++) for (int j = 0; j < 8; j++) if ((i + j) % 2 == 0) p.fillRectangle(i, j, i + 1, j + 1); Eingebettet im Browserfenster Konstruktor mit speziellem Parameter Hinzufügen zur ContentPane des Applets (Browserfenster) Keine Zeichenbefehle in start() Zeichnen im run() des Threads <html> <head> <title>AppletEx4</title> </head> <body> AppletEx4<br> <applet code="AppletEx4.class" archive="aplu.jar" width="400" height="400"> </applet> </body> </html> AppletEx4.html Grösse in Pixel des Browsers


Herunterladen ppt "Client-Server-Architektur"

Ähnliche Präsentationen


Google-Anzeigen