web-anwendungen mit java -...
TRANSCRIPT
1Web−Anwendungen mit Java
Universität Dortmund
Web−Anwendungen mit Java
Rainer Kluteklute@rainer−klute.de
http://www.rainer−klute.de/
2Web−Anwendungen mit Java
Übersicht
� Java im Server
� Web−Anwendungen� Applikation läuft im Web−Server� Web−Browser als Benutzeroberfläche
� Überblick� Pakete in Java 2 (Klassenbibliotheken)� Standarderweiterungen
� Vertiefung ausgewählter Pakete
� Keine Programmierreferenz
→ Spezifikationen, API−Dokumentationen usw.
3Web−Anwendungen mit Java
Themen
� Java aus der Flugzeugperspektive
� Java aus der Vogelperspektive
� Collections� Servlets� Java Server Pages� JDBC� J2EE−Überblick� Serialisierung� Remote Method
Invocation (RMI)
1−2
3−4, 6−9
4−6, 12−13
10−11
13
13
14
4Web−Anwendungen mit Java
Java 2 im Überblick
� Graphische Benutzeroberflächen� Anwendungen, Applets, Drucken� javax.swing, java.awt, java.applet
� Java−Beans� java.beans, java.lang.reflect
� Ein− und Ausgabe� Streams, Dateien, JAR− und ZIP−Archive� Netz� java.io
� java.nio (neu in J2SDK 1.4)
5Web−Anwendungen mit Java
Java 2 im Überblick
� Basisfunktionalitäten� Object
� Datentypen (Klassen)� Boolean, Byte, Character, Double, Float, Integer, Long, Number, Short, String, StringBuffer, Void
� Mathematische Funktionen� Math, StrictMath
� Threads� Thread, ThreadGroup,ThreadLocal, InheritableThreadLocal
6Web−Anwendungen mit Java
Java 2 im Überblick
� Basisfunktionalitäten� Klassen laden usw.
� Class, ClassLoader, Compiler, Package
� Laufzeitsystem, Betriebssystem usw.� Runtime, System, Process, Throwable
� Sicherheit� SecurityManager, RuntimePermission
� java.lang
7Web−Anwendungen mit Java
Java 2 im Überblick
� Reflection� Analyse von Klassen, Interfaces und Methoden� Methodenaufrufe konstruieren und ausführen� java.lang.reflect
� Referenzobjekte� java.lang.ref
8Web−Anwendungen mit Java
Java 2 im Überblick
� Netzkommunikation auf unterer Ebene� Internet−Protokolle TCP, UDP� HTTP (Zugriff auf Web−Server)� Zugriff auf JAR−Dateien� Internet−Adressen
� Adressen (111.222.111.222)� Domain−Namen (rechner.rainer−klute.de)
� Multicasting� Kommunikation in der Gruppe
� java.net
9Web−Anwendungen mit Java
Java 2 im Überblick
� RMI: Objekte im Netz� Objekte von einer JVM zur anderen übertragen� Objekte in anderer JVM referenzieren� java.rmi
� CORBA: Portable Objekte im Netz� Es ist nicht alles Java, was glänzt.
� Remote−Objekte in anderen Sprachen
� org.omg.CORBA
� RMI/IIOP� RMI−Zugriff auf CORBA−Objekte� javax.rmi
10Web−Anwendungen mit Java
Java 2 im Überblick
� Sicherheit� Verschlüsselung� Signierung (�Digitale Unterschrift�)� Prüfen von Signaturen und Zertifikaten� SSL, HTTPS� Ausführungsrechte von Java−Klassen� u.v.a.m.� java.security
11Web−Anwendungen mit Java
Java 2 im Überblick
� Zugriff auf Datenbanken� java.sql
� Textverarbeitung� Datums− und Zahlenformate� Worten und Sätze analysieren� java.text
12Web−Anwendungen mit Java
Java 2 im Überblick
� Logging� Formatierung als Text oder XML (erweiterbar)� Ausgabe in OutputStreams usw.� Konfigurationsdatei� Interaktion mit vorhandenen Logging−Systemen� Neu in J2SDK 1.4� java.util.logging
� Siehe aber auch Jakarta−Projekt Log4j� org.apache.log4j
13Web−Anwendungen mit Java
Java 2 im Überblick
� Objekt−»Sammlungen«� Mengen, Listen, Zuordnungen (Collections)� Suchen und sortieren� Siehe auch Klasse java.util.arrays
� Bit−Vektor
� Kalender− und Datumsfunktionen
� Ereignisobjekte� EventListener, EventObject
� Voreinstellungen� Neu in J2SDK 1.4
14Web−Anwendungen mit Java
Java 2 im Überblick
� Internationalisierung� ResourceBundle, ListResourceBundle, Locale
� Properties� Parameter für Java−Anwendungen� System−Properties
� Pseudozufallszahlen� Random
� Aufgaben ressourcenschonend im Hintergrund bearbeiten� Timer, TimerTask statt Threads
� java.util
15Web−Anwendungen mit Java
Java 2 im Überblick
� Zugriff auf Verzeichnisdienste� LDAP, DNS usw.� javax.naming
� Sound� javax.sound.midi (MIDI)� javax.sound.sampled (AIFF, AU, SND, WAVE)
� XML (1.4)� javax.xml
� Druckservices (1.4)� javax.print
16Web−Anwendungen mit Java
Produkte und Quellen
� Development Kits (Compiler, Laufzeitsystem usw.)� JavaTM 2 Platform, Standard Edition (J2SETM)� JavaTM 2 Platform, Enterprise Edition (J2EETM)� JavaTM 2 Platform, Micro Edition (J2METM)
� Hersteller� Sun Microsystems (http://java.sun.com/products/)� IBM (http://www−106.ibm.com/developerworks/java/jdk)� Blackdown (http://www.blackdown.org/)� Apple (http://developer.apple.com/java/)� u.a.
Produkte und Quellen
� Integrierte Entwicklungsumgebungen (IDEs)� ForteTM for Java (Sun Microsystems,
http://www.sun.com/forte/ffj/)� AnyJ (Netcomputing,
http://www.netcomputing.de/html/main.html)� JBuilder (Borland, http://www.borland.com/jbuilder/)� Visual Age for Java (IBM, http://www−
3.ibm.com/software/ad/vajava/)� JDEE − Java Development Environment for Emacs
18Web−Anwendungen mit Java
Produkte und Quellen
� Sonstiges� Apache Jakarta (http://jakarta.apache.org/)
� Hochwertige Produkte und Projekte für den Einsatz von Java im Server, u.a. Tomcat
� Apache XML (http://xml.apache.org/)� Hochwertige Produkte und Projekte rund um XML� Überwiegend in Java
� SourceForge (http://sourceforge.net/)� Offene Plattform für verteilte Projektentwicklungen im Internet
� Alphaworks (IBM, http://www.alphaworks.ibm.com/java)� Gamelan (http://softwaredev.earthweb.com/java/)� u.v.a.m
19Web−Anwendungen mit Java
Informationen
� Die Mutter aller Java−Informationen� Links zu Sun−Produkten, Dokumentation, Infos usw.� http://java.sun.com/
� Java Developer Connection (JDC)� Informationen und Early−Access−Software� http://developer.java.sun.com/
� Das Java−Tutorium� http://java.sun.com/docs/books/tutorial/
� u.s.v.a.m.
21Web−Anwendungen mit Java
Collections: Beispiele
� »Sammlung von Objekten«
� Beispiele:� Namensliste der Hörer dieser Vorlesung
� Unsortiert oder sortiert
� Orderbuch (Kauf− und Verkaufaufträge für Wertpapiere)� Unsortiert� Aufträge können mehrfach vorkommen
� Menge� Unsortiert, keine Duplikate
� Telefonbuch� Abbildung Name → Tel.−Nummer
(oder: Name → Menge von Nummern)
22Web−Anwendungen mit Java
Collections: Operationen
� Objekt hinzufügen
� Objekt lesen
� Objekt löschen
� Suchen
� Sortieren
� Minimum/Maximum ermitteln
� Größe ermitteln
� Iterieren
23Web−Anwendungen mit Java
Collections: Vorteile
� Interfaces spezifizieren häufig benötigte Datenstrukturen� Collection, List, Set, Map
� Standardimplementierungen bieten effiziente, häufig benötigte Algorithmen� Binäre Suche, Sortieren usw.
� Geringerer Programmieraufwand
� Geringerer Lernaufwand bei anderen Application Programming Interfaces (APIs), die Collections verwenden
� Weitere Implementierungen siehe z.B. http://jakarta.apache.org/commons/collections.html
25Web−Anwendungen mit Java
Collections: Collection
� Ansammlung von Elementen
� Kleinster gemeinsamer Nenner
� Mit oder ohne Duplikate
� Geordnet oder ungeordnet
� JDK bietet keine Implementierung dieses Interfaces.
� Standardkonstruktoren� Collection()
� Collection(Collection c)
� Lassen sich leider nicht durch Interfaces erzwingen
26Web−Anwendungen mit Java
Beispiel: Collection
public void addNames(Collection coll){ coll.add("Priska"); coll.add("Aquila"); coll.add("Epänetus"); coll.add("Maria"); coll.add("Andronikus"); coll.add("Junias"); coll.add("Rainer"); coll.add("Ampliatus"); coll.add("Urban"); coll.add("Stachys"); coll.remove("Rainer"); System.out.println("Elemente: " + coll.size());}public static void main(String args[]){ Collection c = new HashSet(); addNames(c); printNames(c);}
27Web−Anwendungen mit Java
Beispiel: Iterator
public static void printNames(Collection coll){
/* Collection ausgeben: */ Iterator i = coll.iterator(); while (i.hasNext()) { String s = (String) i.next(); System.out.println(s); }
/* Oder kürzer: */ for (Iterator i2 = coll.iterator(); i2.hasNext();) System.out.println((String) i2.next());}
28Web−Anwendungen mit Java
Collections: Set
� Keine Duplikate
� Modelliert mathematischen Mengenbegriff
� Undefinierte Reihenfolge (siehe aber SortedSet)
� Keine zusätzlichen Methoden zu Collection
� Vorsicht bei Elementen mit sich ändernden Werten!� Verhalten des Sets undefiniert
29Web−Anwendungen mit Java
Collections: List
� Elemente geordnet (definierte Reihenfolge)
� Duplikate in der Regel möglich, aber nicht zwingend
� Zugriff über Index� add(int index, Object obj)
� remove(int index)
� get(int index)
� set(int index, Object obj)
� indexOf(Object obj)
� lastIndexOf(Object obj)
� listIterator()
� subList(int from, int to)
30Web−Anwendungen mit Java
Collections: List−Navigation
� Iterator−Methoden:� boolean hasNext()
� Object next()
� void remove()
� ListIterator−Methoden:� hasPrevious()
� previous()
� nextIndex()
� previousIndex()
� add(Object o)
� remove()
� set(Object o)
31Web−Anwendungen mit Java
Beispiel: List, ListIterator
public static void printNamesReverse(List list){ ListIterator i = list.listIterator(list.size()); while (i.hasPrevious()) { System.out.print(i.previousIndex() + ": "); String s = (String) i.previous(); System.out.println(s); }}
...
Collection c = ......List l = new ArrayList(c);Collections.sort(l);printNamesReverse(l);
32Web−Anwendungen mit Java
Collections und Objekte
� Essentiell für das Verwalten von Objekten in Collections: Object−Methoden equals() und hashCode()
� Bei eigenen Klassen Gedanken über diese Methoden machen!� Kann ich sie von der Oberklasse erben?� Muß ich equals() und hashCode() überschreiben?
33Web−Anwendungen mit Java
Object.equals
� public boolean Object.equals(Object obj)
� Vergleicht das aktuelle Objekt (this) mit dem Objekt obj.
� Vergleich der Referenzen reicht nicht aus.� String s1 = "Hugo";String s2 = "Hugo";
� Vergleich s1 == s2 liefert false.� Vergleich s1.equals(s2) liefert true.
� Methode kann in Unterklassen überschrieben werden.� Beim Überschreiben von equals() Anforderungen an
die Methode beachten!
34Web−Anwendungen mit Java
Object.equals
� Anforderungen an equals()
� Reflexivität: x.equals(x) ist true.� Symmetrie: x.equals(y) ist genau dann true, wenn y.equals(x) true ist.
� Transitivität: Falls x.equals(y) true ist und y.equals(z) true ist, dann ist auch x.equals(z) true.
� Konsistenz: Mehrfache Aufrufe von x.equals(y) liefern stets das gleiche Ergebnis, solange sich die Vergleichsdaten in den Objekten selbst nicht ändern.
� x.equals(null) ist false.
35Web−Anwendungen mit Java
String und StringBuffer
� Die Implementierung von Object.equals(obj) liefert true, falls this und obj auf das gleiche Objekt verweisen.
� Die Klasse String überschreibt equals(Object obj):
� Liefert true, falls obj ebenfalls ein String ist und die gleiche Zeichensequenz enthält.
� Die Klasse StringBuffer überschreibt equals(Object obj) nicht:
� Die Implementierung von Object gilt.� Liefert nur dann true, falls this und obj auf das
gleiche Objekt verweisen.
36Web−Anwendungen mit Java
String und StringBuffer
� StringBuffer b1 = new StringBuffer("Hugo");StringBuffer b2 = new StringBuffer("Hugo");if (b1.equals(b2)) System.out.println("gleich");else System.out.println("ungleich");
37Web−Anwendungen mit Java
Object.hashCode
� public int Object.hashCode()
� Liefert einen objektspezifischen Hash−Wert.
� Hash−Funktion bildet �viele� Objekte auf �wenige� Hash−Werte ab (int−Wertebereich).
� Ideal: Gleichverteilung
38Web−Anwendungen mit Java
Object.hashCode
� Anforderungen:� Konsistenz: Mehrfache Aufrufe von x.hashCode()
liefern stets das gleiche Ergebnis, solange sich die Vergleichsdaten im Objekt selbst nicht ändern.
� Falls x.equals(y) true ist, ist x.hashCode() gleich y.hashCode().� Gleiche Objekte liefern gleiche Hash−Werte.
� Falls x.equals(y) false ist, darf dennoch x.hashCode() gleich y.hashCode() sein.� Ungleiche Objekte dürfen gleiche Hash−Werte haben
39Web−Anwendungen mit Java
Übungsaufgaben 1: Fingerübungen
� Machen Sie sich mit den Übungsrechnern und der installierten Software vertraut!
� Schreiben Sie ein einfaches Java−Programm und bringen Sie es zum Laufen, z.B. »Hello World«!
41Web−Anwendungen mit Java
Collections: SortedSet� Definiert Ordnung der Elemente
� Elemente müssen Interface Comparable implementieren...public interface Comparable{ int compareTo(Object o);}
� ...oder den dem Set zugeordneten Comparator unterstützenpublic interface Comparator{ int compare(Object o1, Object o2); boolean equals(Object obj);}
42Web−Anwendungen mit Java
Collection: SortedSet� Object first(), Object last()
� Kleinstes (größtes) Objekt
� SortedSet headSet(Object toElement), SortedSet tailSet(Object fromElement)
� Menge der kleinsten (größten) Objekte
� SortedSet subSet(Object fromElement, Object toElement)
� Geordnete Teilmenge
� Comparator comparator()
� Für Vergleiche verwendeter Comparator
43Web−Anwendungen mit Java
Beispiel: SortedSet
Collection c = ......printNames(c);SortedSet ss = new TreeSet(c);printNames(ss.subSet("E", "N"));
PriskaAquilaEpänetus MariaAndronikusJuniasAmpliatusUrbanStachys
EpänetusJuniasMaria
44Web−Anwendungen mit Java
Collections: Map
� Abbildung Schlüsselmenge → Wertebereich
� Leitet nicht von Collection ab
� Vorsicht bei sich ändernden Schlüsseln!
Schlüssel(keySet)
Werte(entrySet)
Map
45Web−Anwendungen mit Java
Beispiel: Map (1)� Vereinsvorstand
� Abbildung Vorstandsfunktion → Personimport java.util.*;
public class BeispielMap{ class Person { final static int MALE = 0; final static int FEMALE = 1; String name; int sex; int yearOfBirth;
46Web−Anwendungen mit Java
Beispiel: Map (2) Person(String name, int sex, int yearOfBirth) { this.name = name; this.sex = sex; this.yearOfBirth = yearOfBirth; }
public String toString() { return (sex == MALE ? "Herr" : "Frau") + " " + name + " (" + yearOfBirth + ")"; } }
public static void main(String args[]) { new BeispielMap().run(); }
47Web−Anwendungen mit Java
Beispiel: Map (3) void run() { Map map = new HashMap(); map.put("Vorsitzender", new Person("Bettina Boss", Person.FEMALE, 1961)); map.put("Kassierer", new Person("Karl Knauser", Person.MALE, 1975)); // ... for (Iterator i = map.keySet().iterator(); i.hasNext();) { Object key = i.next(); Object value = map.get(key); System.out.println(key + ": " + value); } }}
48Web−Anwendungen mit Java
Collections: Implementierungen� Array
� Verkettete Liste
� Hash
� Siehe hashCode() und equals()
0...
1 2 3 n−2 n4 5 6 n−1
...
...
50Web−Anwendungen mit Java
Collections: HashSet (Set)� Speichert Elemente in Hash−Tabelle
� Siehe hashCode(), equals()� Element null erlaubt
� Initial capacity: Platz für diese Anzahl von Elementen
� Load factor: Kapazitätserweiterung, sobald für Kapazität c und Größe s gilt: s > c * lf
� cneu
Y 2calt