Java Servlet Programmierung Java Servlets

Werbung
WIRTSCHAFTSINFORMATIK
Westfälische
Wilhelms-Universität
Münster
WIRTSCHAFTS
INFORMATIK
Enterprise Application Integration
Java Servlet Programmierung und HttpUnit
Christian Arndt
Lehrstuhl für praktische Informatik in der Wirtschaft
Prof. Dr. Herbert Kuchen
Inhaltsübersicht
WIRTSCHAFTS
INFORMATIK
‰
Java Servlet Programmierung
‰
HttpUnit
‰
Literaturempfehlungen
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
2
Inhaltsübersicht
WIRTSCHAFTS
INFORMATIK
‰
Java Servlet Programmierung
‰
HttpUnit
‰
Literaturempfehlungen
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
3
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Java Servlets
‰
Basieren auf der Java Servlet Spezifikation
‰
Sind in Java implementiert und nutzen die Java Servlet-API
‰
Laufen serverseitig im Kontext eines Servlet Containers
‰
‰
Ermöglichen über die Servlet API den Zugriff auf die http Protokollebene und
deren Eigenschaften
Erweitern die Funktionalität des Servers um HTML Code zu generieren,
Datenbankabfragen auszuführen oder einfache Geschäftsabläufe abzubilden
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
4
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Java Servlets – Eigenschaften
‰
‰
‰
‰
Werden häufig in Verbindung mit weiteren Webtechnologien, insbesondere Java
Server Pages und statischen HTML-Seiten eingesetzt
Müssen in einem Servlet Container veröffentlicht (deployed) werden
Um Unterschied zur CGI Programmierung bietet die Java Servlet API umfassende
Funktionalitäten für häufig wiederkehrende Operationen wie das Auslesen von
Request Parametern, die Sitzungsverfolgung (Session Tracking) oder die
Verarbeitung von Cookies
Durch Verwendung von Java bieten Servlets die Möglichkeiten der
Objektorientierung
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
5
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Servlet Container
‰
‰
‰
‰
Servlets laufen in einer Java Umgebung, welche integraler Bestandteil des
Servlet Containers ist
Der Servlet Container ist wiederum in einen Web Server oder Application Server
integriert
Container verwaltet Lebenszyklus der Servlets und reicht Anfragen an diese
weiter
Jede Anfrage wird dabei in einem eigenen Thread behandeltDa die JVM des
Servlet Containers permanent in Betrieb ist, muss diese zum Laden eines
Servlets nicht erst gestartet werden
Apache Tomcat: Referenzimplementierung für die Java Servlet und Java
Server Pages Spezifikation
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
6
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Der Lebenszyklus eines Servlets
‰
‰
‰
‰
Der Client sendet einen Request an den Web Server
Dieser registriert, dass die Anfrage an ein Servlet gerichtet ist und reicht sie an
den Servlet Container weiter
Der Classloader des Servlet Containers lädt das Servlet in den Speicher
Die Java Servlet Spezifikation sieht vier grundlegende Methoden über die Der
Servlet Container zur Steuerung des Lebenszyklus mit dem Servlet
kommuniziert
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
7
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Der Lebenszyklus eines Servlets
‰
void init()
Wird bei der Initialisierung eines Servlets aufgerufen und ermöglicht
diesem sich zu konfigurieren und zum Bespiel Hilfsklassen zu initialisieren
oder eine Datenbankverbindung aufzubauen
‰
void doGet(HttpServletRequest, HttpServletResponse)
Wird bei einer Anfrage vom Typ GET aufgerufen und implementiert die
eigentliche Funktionalität des Dienstes
‰
void doPost(HttpServletRequest, HttpServletResponse)
Wird bei einer Anfrage vom Typ POST aufgerufen
‰
void destroy()
Wird aufgerufen, wenn eine Servlet Instanz nicht mehr benötigt wird und
aus dem Speicher entfernt werden soll
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
8
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Der http Request-Response Zyklus
Richtet der Web Browser eine Anfrage an einen Web Server, so übermittelt er
Informationen über die Art der Anfrage (zumeist GET oder POST), die angeforderte
URI und die Versionsnummer des verwendeten Protokolls
Beispiel: GET /irgendeineseite.html HTTP/1.1
Antwort des Servers besteht aus einem Header und dem angeforderten Dokument
oder einem Fehlercode, falls dieses nicht verfügbar ist
Sollen mit einer GET Anfrage Daten aus Formularfeldern an den Server übermittelt
werden, so werden diese in URL Kodierung an den URL String angehängt
Beispiel: http://server/servlet?parameter1=wert1&;parameter2=wert2
Bei der Methode POST werden Daten im Unterschied zu GET nicht an die URL
angehängt, sondern als Datenstrom an den Server übertragen
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
9
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Das HttpServletRequest Objekt
Die Eigenschaften eines http Requests sind über das Objekt HttpServletRequest
zugänglich
‰
String getHeader(String headername)
Liefert den Request Header mit dem Namen „headername“
‰
String getParameter(String paramname)
Liefert den Wert des Parameters „paramname“ (Ererbt von der Klasse ServletRequest)
‰
ServletInputStream getInputStream()
Liefert ein ServletInputStream Objekt, welches den Datenstrom einer POST Anfrage zur
Verfügung stellt
‰
HttpSession getSession()
Liefert die mit dem aktuellen Request assoziierte Session
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
10
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Das HttpServletResponse Objekt
Das HttpServletResponse Objekt ermöglicht es, die Ausgabe zu konfigurieren, die
durch ein Servlet erzeugt und an den Web Browser des Klienten geschickt wird
‰
void setContentType(String type)
Legt den Typ des Ausgabeformats mithilfe von MIME- Typen fest – z.B. „text/html“ für HTML
Seiten, „image/gif“ für gif- Bilder (Ererbt von der Klasse ServletResponse)
‰
PrintWriter getWriter()
Liefert ein Objekt vom Typ PrintWriter, welches es ermöglicht, textuelle Daten über den
Ausgabestrom auszugeben (Ererbt von der Klasse ServletResponse)
Das schreiben einer einzelnen HTML Codezeile erfolgt durch Aufruf der Methode
println(String content) des PrintWriter Objektes
‰
ServletOutputStream getOutputStream()
Liefert ein ServletOutputStream Objekt, welches einen Datenstrom zur Ausgabe von
Binärdaten (z.B. Grafiken) zur Verfügung stellt
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
11
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Ein einfaches „Hello World“ Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("<html><head><title>Servlet</title></head>");
writer.println("<body><h1>Hello World!</h1>");
writer.println("This page was last updated: " + new
java.util.Date());
writer.println("</body></html>");
}
}
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
12
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Deployment einer Servlet Anwendung
‰
Eine Servlet basierte Web-Anwendung kann als unkomprimierte
Verzeichnisstruktur oder als Web-Archiv (.war) deployed werden
Ein Web-Archiv lässt sich mithilfe des Werkzeugs „jar“ erstellen
‰
‰
Die Verzeichnisstruktur einer Web Anwendung ist durch die Java Servlet
Spezifikation standardisiert
Angaben zum Deployment werden in der Datei web.xml, dem Deployment
Descriptor hinterlegt
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
13
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Verzeichnisstruktur einer Servlet Anwendung
meineanwendung/
Enthält ergänzende Dateien (Bspw. HTML, CSS, GIF, JSP Dateien), welche sich
auch in Unterverzeichnissen befinden können.
meineanwendung/WEB-INF/
Enthält den Deployment Descriptor web.xml
meineanwendung/WEB-INF/classes/
Enthält die .class Dateien der Servlets und aller weiteren benötigten Klassen. Die
Struktur der Unterverzeichnisse innerhalb des /classes Verzeichnisses muss mit der
Paketstruktur der Servlet Implementierung korrespondieren
meineanwendung/WEB-INF/lib/
Enthält ergänzende .jar Archive
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
14
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Der Deployment Descriptor
‰
Registrierung der Servlet Klassen
‰
Angaben zur Abbildung von URLs auf Servlet Klassen (URL Mapping)
‰
Angaben zu Initialisierungsparametern und Timeout Einstellungen
‰
Angaben zu Start- und Fehlerseiten
‰
Angaben zu Sicherheitseinstellungen und Client Authentifizierung
‰
…
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
15
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Beispiel für einen Deployment Descriptor
<web-app>
<display-name>A Simple Application</display-name>
<servlet>
<servlet-name>catalog</servlet-name>
<servlet-class>com.mycorp.CatalogServlet </servlet-class>
<init-param>
<param-name>catalog</param-name>
<param-value>Spring</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>catalog</servlet-name>
<url-pattern>/catalog/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
</web-app
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
16
Java Servlet Programmierung
WIRTSCHAFTS
INFORMATIK
Aufruf einer Servlet Anwendung
Sobald ein Servlet deployed ist, kann es unter der URL:
http://serveradresse:portnummer/anwendungskontext/servletadresse
aufgerufen werden.
Tomcat verwendet üblicherweise den Port 8080.
Da im Praktikum zwei Tomcat Installationen (standalone Tomcat + Tomcat in JBoss)
eingesetzt werden, arbeitet die standalone Installation auf Port 9080
Der Anwendungskontext kann explizit festgelegt werden, andernfalls verwendet
Tomcat den Namen des .war Archivs als Anwendungskontext
Die Servletadresse ergibt sich aus den Angaben für das URL-Mapping im Deployment
Descriptor
Beispiel für eine Aufruf URL:
http://wi-vm215.uni-muenster.de:9080/gruppe00_servletphonebook/searchnumber
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
17
Inhaltsübersicht
WIRTSCHAFTS
INFORMATIK
‰
Java Servlet Programmierung
‰
HttpUnit
‰
Literaturempfehlungen
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
18
HttpUnit
WIRTSCHAFTS
INFORMATIK
Grundlagen
‰
‰
‰
‰
HttpUnit ermöglicht Black-Box Akzeptanztests von Webanwendungen
Es simuliert Benutzerinteraktionen auf Websites und überprüft somit die
Funktionalität von SSL, HTTP-Header, Frames, Tabellen, Formularen, Links,
JavaScript und Cookies
Dabei ist es unbedeutend, ob der Code einer Webseite statisch ist oder durch ein
Servlet generiert wurde
Mithilfe von HttpUnit und JUnit lassen sich automatische Testsuits für
Webanwendungen erstellen
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
19
HttpUnit
WIRTSCHAFTS
INFORMATIK
Integration von Webanwendungen mittels HttpUnit?
‰
‰
‰
‰
Um auf einzelne Elemente einer Webseite zugreifen zu können, parst HttpUnit den HTML
Code einer Seite und ermittelt dessen Struktur
Über HTML Attribute wie „name“ oder „id“ lassen sich nun einzelne Elemente wie
Formularfelder oder Tabellenzellen innerhalb des Syntaxbaumes identifizieren
Um die Funktionalität von Formularen zu prüfen stellt HttpUnit spezielle Methoden zur
Verfügung, die es erlauben Formularfelder mit Werten zu belegen und das Abschicken des
Formulars über einen „submit“ Button zu simulieren
Die Rückgabewerte des Servlets können nun durch Analyse der HTML-Ausgabe ermittelt
werden
Auf diese Weise lassen sich die Funktionalitäten eines Servlets automatisch ansprechen
und z.B. über eine Web Service Schnittstelle für weitere Anwendungen zugänglich machen
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
20
HttpUnit
WIRTSCHAFTS
INFORMATIK
Integration von Webanwendungen mittels HttpUnit?
Wenngleich eine Integration von Webanwendungen durch Analyse der
Benutzerschnittstelle mittels HttpUnit theoretisch möglich ist, so wird sie in der Praxis
dennoch nur selten eingesetzt.
Hauptnachteile
‰
‰
‰
Geschwindigkeitsnachteil durch das Parsen und die Analyse der HTML-Seiten
Parsen und Analyse der Webseiten ist nur erfolgreich, wenn diese sorgfältig und
weitestgehend spezifikationskonform implementiert sind
Zu integrierende Daten müssen im HTML-Code eindeutig anhand ihres Namens oder einer
id identifiziert werden können
Die meisten Webanwendungen ließen sich aufgrund von
Implementierungsmängeln oder fehlender Auszeichnung der Datenelemente
mit HttpUnit nicht integrieren
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
21
HttpUnit
WIRTSCHAFTS
INFORMATIK
Verwendung von HttpUnit
Um die Funktionalität eines Servlets mittels HttpUnit anzusprechen muss zunächst
eine Verbindung zur entsprechenden URL aufgebaut werden
Für diesen Zweck bietet HttpUnit das Objekt WebConversation
Der Codeabschnitt
WebConversation = new WebConversation;
WebRequest request = new GetMethodWebRequest(targetUrl);
erzeugt ein WebConversation Objekt und einen GET Request, der an die im String
„targetUrl“ enthaltene Adresse gerichtet ist.
Der Aufruf
WebResponse response = conversation.getResponse(request);
sendet den Request an die angegebene Adresse und liefert ein WebResponse Objekt zurück,
welches einen Zugriff auf die HTML Ausgabe des adressierten Servlets erlaubt
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
22
HttpUnit
WIRTSCHAFTS
INFORMATIK
Verwendung von HttpUnit
Der Aufruf
WebForm form = response.getFormWithName(„formname");
liefert ein WebForm Objekt welches den Zugriff auf die die Eigenschaften des Formulars
mit dem Namen „formname“ ermöglicht
Mit der Methode
setParameter(„fieldname“, „paramvalue“);
trägt den Wert „paramvalue“ in das Feld mit dem Namen „fieldvalue“ ein
Der Aufruf
WebResponse response =
form.submit(form.getSubmitButton(„buttonname"));
schickt das Formular ab, indem die Betätigung des Submitbuttons mit dem Namen „buttonname“
simuliert wird und liefert den Response des Servlets zurück
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
23
HttpUnit
WIRTSCHAFTS
INFORMATIK
Verwendung von HttpUnit
Der Aufruf
HTMLElement element = response.getElementWithID(„id");
liefert das mit der übergebenen id ausgezeichnete HTML-Element zurück
Mit der Methode
element.getText();
Wird der Inhalt des HTML-Elements ausgelesen
Da die Methode den Inhalt des HTML-Elements als String zurückliefert muss dieser vor einer
weiter Bearbeitung ggf. in einen passenden Typ bzw. Objekt konvertiert werden
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
24
Inhaltsübersicht
WIRTSCHAFTS
INFORMATIK
‰
Java Servlet Programmierung
‰
HttpUnit
‰
Literaturempfehlungen
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
25
Literaturempfehlungen
WIRTSCHAFTS
INFORMATIK
Bücher
Hunter J., Crawford W.: Java Servlet Programming, O‘Reilly 2001.
WWW
SUN Microsystems., Java Servlet Technology, http://java.sun.com/products/servlet/.
Møller A., Schwartzbach M. L.: Interactive Web Services with Java, BRICS,
University of Aarhus 2002, http://www.brics.dk/NS/02/1/
Apache Software Foundation: The Apache Jakarta Tomcat 5 Servlet/JSP Container
(Documentation), http://tomcat.apache.org/tomcat-5.0-doc/index.html
Sourceforge.net: HttpUnit, http://httpunit.sourceforge.net/
Horn T.: HttpUnit (Beispiel), http://www.torsten-horn.de/techdocs/java-httpunit.htm
.
Vorlesung: Enterprise Application Integration - Java Servlet Programmierung und HttpUnit
26
Herunterladen