Collections: HashSet (Set)



Ähnliche Dokumente
Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS Universität zu Lübeck

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

Java zur Realisierung von Internetanwendungen

Themen. Web Service - Clients. Kommunikation zw. Web Services

Studentische Lösung zum Übungsblatt Nr. 7

Java Einführung Collections

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

Einführung in Javadoc

MCRServlet Table of contents

Web 2.0 Software-Architekturen

Überblick über Internet-Technologien

Einführung in die Scriptsprache PHP

Web- Applikationen. in Java-Web

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

Aus unserer Projekt- und Schulungserfahrung Oracle TechNet

Java Server Pages (JSP)

Wiederholung: Beginn

Java - Webapplikationen

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Praktikum aus Softwareentwicklung 2, Stunde 11

Einführung in die Programmierung

Architektur des agimatec-validation Frameworks

Application Frameworks

Workshop Java Webentwicklung Tapestry. Ulrich Stärk

Remote Method Invocation

Client/Server-Programmierung WS2007/08. EJB/JSP: Schritt-für-Schritt Anleitung

Inhalt: Konfiguration: web.xml ; server.xml Workflow: Weiterleitung von Requests Lektion II-IV Lektion V-VI

Erweiterung AE WWS Lite Win: AES Security Verschlüsselung

Der lokale und verteilte Fall

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Gebundene Typparameter

Praktikum Datenbanken und verteilte Systeme SS Java Server Pages und Servlets -

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter

Step by Step Webserver unter Windows Server von Christian Bartl

PDF-AS Webanwendung Dokumentation

WebService in Java SE und EE

Java Webentwicklung (mit JSP)

Planung für Organisation und Technik

TimeMachine. Time CGI. Version 1.5. Stand Dokument: time.odt. Berger EDV Service Tulbeckstr München

Objektorientierte Programmierung

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Große Übung Praktische Informatik 1

ISA Server 2004 Erstellen einer Webverkettung (Proxy-Chain) - Von Marc Grote

Programmieren II. Remote-Programmierung. Institut für Angewandte Informatik

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Übungen zu Softwaretechnik

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

Javakurs zu Informatik I. Henning Heitkötter

Factory Method (Virtual Constructor)

Objektorientierte Programmierung. Kapitel 12: Interfaces

Konfiguration des Novell GroupWise Connectors

Unsere Webapplikation erweitern

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

1CONFIGURATION MANAGEMENT

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Java: Vererbung. Teil 3: super()

INSTALLATION STHENO/PRO V1.2. Installation

Einführung Servlets. JEE Vorlesung Teil 2. Ralf Gitzel

Informations- und Kommunikationsinstitut der Landeshauptstadt Saarbrücken. Upload- / Download-Arbeitsbereich

Mojolicious. Ich zeige dir jetzt, wie du mit Mojolicious eine Vorlage. Das Mojolicious-Gerüst

teamsync Kurzanleitung

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Programmieren in Java

Proseminar: Website-Management-Systeme

JSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel

Java-Programmierung. Remote Method Invocation - RMI

Herzlich Willkommen! eine praxisnahe Übersicht. Mit Java ins Web - mb@bebox.franken.de (c) Michael Behrendt -

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Henning Mersch. Tomcat. im Rahmen des RBG-Seminar SS04. Apache-Jakarta-Tomcat-Server RBG-Seminar 1/17

e-commerce Running Tomcat

Typumwandlungen bei Referenztypen

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

WebPoint. Ein Framework zur Erstellung von webbasierten Verkaufsanwendungen. Maria C. Raabe Daniel Woithe Vorlage: Torsten Walter. 16.

Zugriff auf OWA Auf OWA kann über folgende URLs zugegriffen werden:

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Skalierbare Webanwendungen mit Python und Google App Engine

Software Engineering Klassendiagramme Assoziationen

Nützliche Tipps für Einsteiger

Online Kataloge. Wie binde ich einen SGVSB-Online-Katalog in eine Webseite ein. Versionsnummer: 1.0 Änderungsdatum:

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Musterlösungen zur Klausur Informatik 3

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

WPF Steuerelemente Listbox, ComboBox, ListView,

Assoziation und Aggregation

Einführungskurs MOODLE Themen:

Anwendungsprotokolle: HTTP, POP, SMTP

DataTables LDAP Service usage Guide

3 Installation von Exchange

JSP und Servlet Programmierung

Tomcat Konfiguration und Administration

goalio Documentation Release goalio UG

web portal pro What's new?

Algorithmen und Datenstrukturen

Transkript:

Collections: HashSet (Set) Konstruktoren gemäß Vereinbarung für Collection HashSet() HashSet(Collection c) Zusätzliche Konstruktoren HashSet(int initialcapacity, float loadfactor) HashSet(int initialcapacity) Load factor 0,75 51

Collections: TreeSet (SortedSet) Sortierung implizit gemäß Comparable oder explizit gemäß Comparator Speichert Elemente gemäß compareto() bzw. compare() Zugriffszeit O(log(N)) Zusätzliche Konstruktoren TreeSet(Comparator c) TreeSet(SortedSet s) 52

Collections: ArrayList (List) Speichert Elemente in Array Kann wachsen oder schrumpfen null Elemente erlaubt Zugriffe auf vorhandene Elemente effizient Direktzugriff über Index Einfügen und Löschen teuer Umkopieren erforderlich (Ausnahme: Ende der Liste) Reallokation bei Kapazitätsüberschreitung Zusätzlicher Konstruktor ArrayList(int initialcapacity) 53

Collections: LinkedList (List) Speichert Elemente als doppelt verkettete Liste null Elemente erlaubt Listendurchlauf effizient Indexzugriff teuer Einfügen und Löschen effizient Referenzen umsetzen Keine zusätzlichen Konstruktoren 54

Collections: Vector (List) Prähististorische Klasse aus JDK 1.0 Ursprünglich keine List Implementierung Ähnlich ArrayList 55

Collections: HashMap (Map) null Werte und null Schlüssel (Singular) erlaubt Kapazität c und Größe s Operationen get(), put(), remove(): Zugriffszeit O(c+s) Voraussetzung: gleichverteilende Hash Funktion Iteration Ausführungszeit O(c+s) Kapazität nicht zu groß wählen! Ladefaktor nicht zu klein wählen! Nicht auf Voreinstellungen verlassen! 56

Collections: Hashtable (Map) Prähististorische Klasse aus JDK 1.0 Ursprünglich keine Map Implementierung null Werte und null Schlüssel nicht erlaubt Ähnlich HashMap 57

Collections: WeakHashMap (Map) HashMap mit schwachen Referenzen Schwache Referenzobjekte: siehe java.ref.weakreference Schlüssel( Objekte) können verschwinden, wenn es keine starken Referenzen darauf mehr gibt. WeakHashMap Schlüsselobjekte Weitere Objekte 58

Collections: Synchronisation Gleichzeitiger Zugriff auf dasselbe Objekt durch mehrere Threads Thread A Thread B write read read Thread C write Thread D Thread A Thread B Gleichzeitig möglich? lesen lesen ja lesen schreiben nein schreiben lesen nein schreiben schreiben nein 59

Thread Beispiel package de.rainer_klute.collections; /** * <p>startet zwei Threads, die jeweils ein Zeichen * ausgeben. Linus Thorvalds machte mit a und b * seine ersten Multitasking Experimente allerdings * nicht mit Java.</p> */ public class LinusThreads { /** <p>ein einzelner Thread.</p> */ class MyThread extends Thread { char c; MyThread(char c) { this.c = c; } 60

Thread Beispiel } /** * <p>die Arbeitsmethode des Threads.</p> */ public void run() { while (true) { System.out.print(c); try { Thread.currentThread().sleep ((int) (1000 * Math.random())); } catch (InterruptedException e) {} } } 61

Thread Beispiel public static void main(string args[]) { new LinusThreads().doIt(); } /** * <p>erzeugt zwei Threads und startet sie.</p> */ private void doit() { new MyThread( a ).start(); new MyThread( b ).start(); } } 62

Collections: Synchronisation String s; // Globale Ressource // So nicht! // Im Thread: public void run() { final String name = getname(); System.out.println(name + " gestartet."); long cnfl = 0; for (int i = 0; i < 1000; i++) { s = name; // Kollisionsgefahr! if (!s.equals(name)) cnfl++; } System.out.println(name + ": " + cnfl + " Konflikte."); } 63

Collections: Synchronisation String s; // Global Object semaphore = new Integer(42); // Im Thread: public void run() { final String name = getname(); System.out.println(name + " gestartet."); long cnfl = 0; for (int i = 0; i < 1000; i++) synchronized (semaphore) { s = name; if (!s.equals(name)) cnfl++; } System.out.println(name + ": " + cnfl + " Konflikte."); } 64

Collections: Synchronisation Vorteil von Synchronisation: sichere konkurrierende Zugriffe Nachteil von Synchronisation: kostet Zeit Immer nur ein Thread im kritischen Abschnitt, andere müssen warten. Verwaltungskosten auch ohne konkurrierende Zugriffe Prähistorische Klassen Vector und Hashtable sind synchronisiert Nachteile und Vorteile: siehe oben 65

Collections: Synchronisation Implementierungen der Collection Interfaces sind üblicherweise nicht synchronisiert. Vorteil: hoher Durchsatz Konkurrierendes Lesen immer möglich. Konkurrierendes Schreiben unterschiedlicher Elemente immer möglich. Nachteil: explizite Synchronisation bei strukturellen Änderungen erforderlich Elemente hinzufügen oder löschen List l = new LinkedList();... synchronized (l) { l.add(someelement) } 66

Collections: Synchronisation Bei Bedarf aus nicht synchronisierter Collection eine synchronisierte erzeugen. Beispiel: List slist = Collections.synchronizedList(new ArrayList()); Legt keine Kopie der Elemente an. Folge: Alle Zugriffe müssen über die synchronisierte Liste (hier: slist) erfolgen. Weitere Methoden wie synchronizedmap(), synchronizedset() usw. 67

Collections: Statische Methoden Klasse Collections enthält eine Fülle statischer Hilfsmethoden. List unmodifiablelist (List list) Erzeugt nicht änderbare Liste Entsprechend für die übrigen Typen List singletonlist (Object obj) Erzeugt nicht modifizierbare Liste mit obj als Element Entsprechend für manche andere Typen 68

Collections: Statische Methoden int binarysearch(list list, Object obj) Sucht obj in list, liefert Index. void copy(list dst, List src) Kopiert Element Referenzen von src nach dst. void fill(list list, Object obj) Füllt Liste mit Referenzen auf obj. 69

Collections: Statische Methoden Object min(collection c) Object max(collection c) Sucht Minimum/Maximum. void reverse(list list) Kehrt die Reihefolge in list um. void sort(list list) Sortiert list. 70

Übungsaufgaben 2: Collections Schreiben Sie ein Programm, das einen Text aus einer Datei einliest und in einzelne Wörter zerlegt! Ermitteln Sie die Anzahl der Wörter, natürlich mit Hilfe von Collections! Ermitteln Sie die Anzahl der verschiedenen Wörter, natürlich ebenfalls mit Hilfe von Collections! Java Programme lassen sich über Properties parametrisieren. Beispiel: java Dname1=wert1 Dname2=wert2 Anwendung Außerdem stehen weitere Properties als System Properties zur Verfügung. Schreiben Sie ein Java Programm, das alle Properties ermittelt und (mit Hilfe von Collections) alphabetisch sortiert ausgibt! (Bestandteil der Aufgabe ist auch die Informationsrecherche.) Erweitern Sie die Anwendung Vereinsvorstand aus der Vorlesung so, daß sich die Vorstandsmitglieder nach Alter sortiert ausgeben lassen! Verwenden Sie dazu die Interfaces Comparator oder Comparable! 71

Servlets (Teil 1) Servlets (Teil 1) 72

Funktionsweise eines Web Servers Web Browser HTTP Request HTTP Response Web Server Dateisystem HTML, JPEG, PNG, GIF usw. 73

Crash Kurs HTTP telnet localhost 8080 GET / HTTP/1.1 Host: localhost:8080 HTTP/1.0 302 Found Content Type: text/html Location: http://localhost/index.html Content Length: 160 Servlet Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Linux 2.2.16 i386; java.vendor=sun Microsystems Inc.) <head><title>document moved</title></head> <body><h1>document moved</h1> This document has moved <a href="http://localhost/index.html">here</a>.<p> </body> 74

Crash Kurs HTTP telnet localhost 8080 GET /index.html HTTP/1.1 Host: localhost:8080 HTTP/1.0 200 OK Content Type: text/html Content Length: 2572 Last Modified: Fri, 02 Mar 2001 17:30:54 GMT Servlet Engine: Tomcat Web Server/3.2.1 (JSP 1.1; Servlet 2.2; Java 1.3.0; Linux 2.2.16 i386; java.vendor=sun Microsystems Inc.) <!doctype html public " //w3c//dtd html 4.0 transitional//en"> <html>... </html> 75

Crash Kurs HTTP HTTP: Hypertext Transport Protocol Einfaches Request /Response Protokoll: Client baut TCP/IP Verbindung auf Client sendet HTTP Request Header Body (optional) Server sendet HTTP Response Status Code Header Body (optional) 76

Crash Kurs HTTP Beim Zugriff auf den Webserver nutzt der Browser eine HTTP Methode. GET: Dokument vom Server abrufen HEAD: Wie GET, aber ohne Dokument (liefert nur die Metadaten) POST: Formulardaten zum Server senden PUT: Dokument zum Server senden DELETE: Dokument auf dem Server löschen OPTIONS: Server Fähigkeiten erfragen TRACE: Weg des Requests (über Proxy Server) erfragen 77

Web Server mit Servlet Container Web Browser HTTP Request HTTP Response Web Server Java Klasse empfängt HTTP Request erzeugt HTTP Response Dateisystem Servlet Container Servlet Servlet Servlet 78

Servlet und Servlet Container Servlet: Java Klasse Allgemein: implementiert javax.servlet.servlet Praktisch alle Servlets sind Unterklassen von javax.servlet.http.httpservlet. Wir betrachten ausschließlich HTTP Servlets. Servlet Container: standardisierte Ablaufumgebung Servlet läuft in jedem Servlet Container Beispiel: Tomcat (Apache, Sun Microsystems) Standards: Java Servlet 2.3 Java Server Pages 1.2 79

Übungen: Miniprojekt E Shop Produkte präsentieren Übersicht Einzelprodukt Text, Bild (optional), Preis Servlet und JSP Grundlagen HTML Generierung URL Parameter Redaktionssystem Produkt einfügen, ändern, löschen Daten zum Server senden HTTP Methode POST Authentifizierung und Autorisierung 80

Übungen: Miniprojekt E Shop Warenkorb Bezahlfunktion Anbindung an Warenwirtschaftssystem Verschlüsselte Datenübertragung Kundendaten verwalten Session RMI Serialisierung JNDI JDBC Security Unterschiedliche Sprachen Internationalisierung Texte Datum, Zahlen, Preise 81

Servlet oder CGI? Common Gateway Interface: Verfahren aus der Webserver Steinzeit zum Erzeugen dynamischer Inhalte Webserver startet externes Programm (CGI Skript). CGI Skript generiert HTML Seite. Server schickt HTML Seite zum Browser. Jeder HTTP Zugriff (Request) erfordert separaten Prozeß Prozeß starten kostet viel Zeit. Jeder Prozeß belegt Systemressourcen. Anzahl der Prozesse im System ist begrenzt. 82

Servlet oder CGI? Jeder Request erfordert einen separaten Prozeß. CGI Skript muß für jeden Request neu gestartet werden. Jeder Request erfordert separaten Prozeß. CGI Prozeß läuft typischerweise unter der Kennung des Webservers. Niedrige Portabilität Kein neuer Prozeß erforderlich. Einmal gestartet bleibt Servlet im Speicher. Eine einzige Servlet Instanz kann alle Requests bearbeiten. Servlet kann in Sandbox mit individuellen Sicherheitseinstellungen laufen. Hohe Portabilität 83

Servlet Lebenszyklus im Überblick Servlet Container lädt Servlet. initial oder bei Bedarf Servlet Container ruft Servlet Methode init(servletconfig) Bei Request ruft Servlet Container die Servlet Methode service(servletrequest, ServletResponse) HTTP Servlet verzweigt weiter zu doget(), dopost(), dohead(), doput(), dodelete(), dooptions(), dotrace() Beim Entladen des Servlets ruft der Servlet Container die Methode destroy() 84

Tomcat Tomcat 4.0: Referenzimplementierung für Java Servlet 2.3 Java Server Pages 1.2 Web Server Servlet Container (»Catalina«) JSP Container (»Jasper«) Stand alone und/oder als Apache Modul In Java geschrieben, daher plattformunabhängig http://jakarta.apache.org/tomcat/index.html 85

Tomcat installieren (Unix) Datei jakarta tomcat 4.0.3.tar.gz besorgen und auspacken Verzeichnis an geeignete Stelle verschieben mv jakarta tomcat 4.0.3 /opt/local/tomcat 4.0.3 ln s /opt/local/tomcat 4.0.3 /opt/local/tomcat Skript /opt/local/tomcat/bin/startup.sh ausführen Tomcat serviert auf Port 8080. http://localhost:8080/ Statische Seiten Servlets Java Server Pages 86

Tomcat Startseite 87

Nächste Schritte Tomcat auf den persönlichen Bedarf des Entwicklers zurechtschneiden Statische Dateien ausliefern Servlet ausführen 88

Beispiel Servlet: Hello World package de.rainer_klute.servlet; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class Hello extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getwriter(); response.setcontenttype("text/html"); out.print("<!doctype html PUBLIC \" //W3C//DTD HTML "); out.println("4.0//en//\">"); out.println("<html>"); out.println("<head>"); out.println("<title>hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>hello World!</h1>"); out.println("<p>" + new Date() + "</p>"); out.println("</body>"); out.println("</html>"); } } 89

Tomcat konfigurieren Ziel: Betrieb... unter eigener Benutzerkennung mit eigener Konfiguration unter Nutzung der zentralen Installation Tomcat Dokumentation lesen, insbesondere http://localhost:8080/tomcat docs/config/ Eigenes Basisverzeichnis anlegen mkdir ~/tomcat In das neue Verzeichnis wechseln cd ~/tomcat 90

Tomcat konfigurieren Individuelle Verzeichnisse anlegen cd ~/tomcat mkdir conf logs webapps work Konfigurationen aus der zentralen Installation kopieren cp p /opt/local/tomcat/conf/* conf Evtl. Datei conf/server.xml anpassen Zentrale Tomcat Konfigurationsdatei XML Format Recht gut kommentiert Alternative Konfigurationsdatei ohne Beispielanwendungen 91

Tomcat konfigurieren Laufenden Tomcat herunterfahren: /opt/local/tomcat/bin/shutdown.sh Umgebungsvariable CATALINA_BASE setzen CATALINA_BASE=/home/klute/tomcat export CATALINA_BASE Tomcat neu starten /opt/local/tomcat/bin/startup.sh 92

Tomcat konfigurieren Tomcat nutzt voreingestellte Ports 8080 für HTTP 8005 zum Herunterfahren 8008 und 8009 für Kommunikation mit Apache Konflikt, falls zweite Tomcat Instanz startet Ports bereits belegt Fehlermeldung in logs/catalina.out: java.net.bindexception: Die Adresse wird bereits verwendet:8080 93

Tomcat konfigurieren Lösung: Freie Ports herausfinden In Konfigurationsdatei festlegen Tomcat mit alternativer Konfiguration starten: /opt/local/tomcat/bin/startup.sh config conf/server 9000.xml Wer Tomcat ausschließlich stand alone betreibt, kann die Apache Konnektoren streichen. 94

Tomcat konfigurieren server.xml Fri Mar 1 23:49:40 2002 +++ server 9000.xml Fri Mar 8 21:09:28 2002 @@ 10,7 +10,7 @@ define subcomponents such as "Valves" or "Loggers" at this level. > <Server port="8005" shutdown="shutdown" debug="0"> +<Server port="9005" shutdown="shutdown" debug="0"> <! A "Service" is a collection of one or more "Connectors" that share @@ 53,7 +53,7 @@ <! Define a non SSL HTTP/1.1 Connector on port 8080 > <Connector classname="org.apache.catalina.connector.http.httpconnector" port="8080" minprocessors="5" maxprocessors="75" + port="9080" minprocessors="5" maxprocessors="75" enablelookups="true" redirectport="8443" acceptcount="10" debug="0" connectiontimeout="60000"/> <! Note : To disable connection timeouts, set connectiontimeout value @@ 71,9 +71,11 @@ > 95

Tomcat konfigurieren <! Define an AJP 1.3 Connector on port 8009 > + <! <Connector classname="org.apache.ajp.tomcat4.ajp13connector" port="8009" minprocessors="5" maxprocessors="75" acceptcount="10" debug="0"/> + > <! Define a Proxied HTTP/1.1 Connector on port 8081 > <! See proxy documentation for more information about using this. > @@ 307,7 +309,7 @@ > <! Define an Apache Connector Service > <Service name="tomcat Apache"> + <Service off name="tomcat Apache"> <Connector classname="org.apache.catalina.connector.warp.warpconnector" port="8008" minprocessors="5" maxprocessors="75" @@ 328,6 +330,6 @@ </Engine> </Service> + </Service off> </Server> 96

Dateien mit Tomcat ausliefern Dateisystemstruktur für Wurzelverzeichnis anlegen Verzeichnis für statische Dateien (HTML, GIF usw.) mkdir p webapps/root Verzeichnis WEB INF für Web Applikationen anlegen (Details später) mkdir p webapps/root/web INF Minimalen Deployment descriptor erzeugen Datei webapps/root/web INF/web.xml <?xml version="1.0" encoding="iso 8859 1"?> <!DOCTYPE web app PUBLIC " //Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web app_2_2.dtd"> <web app> </web app> 97

Dateien mit Tomcat ausliefern Crashkurs HTML: Beispieldatei Beispiel.html <!DOCTYPE html PUBLIC " //W3C//DTD HTML 4.0//EN//"> <html> <head> <title>beispiel</title> </head> <body style="background: #ffffff"> <h1>beispielseite</h1> <p>bla, bla, bla...</p> </body> </html> 98

Dateien mit Tomcat ausliefern Abrufen von http://localhost:8080/ 99

Dateien mit Tomcat ausliefern Sonderrolle für Datei index.html Bei Zugriff auf Verzeichnis prüft Tomcat, ob index.html existiert. Nein: Verzeichnisinhalt anzeigen Ja: Statt des Verzeichnisinhalts index.html anzeigen 100