260 likes | 427 Views
Wintersemester 2004 Lehrstuhl für Wirtschaftsinformatik Technische Universität München. Einführung in Java-Servlets und Servlet-Engine Apache Tomcat. Markus Ruppenthal. 23.11.204. Agenda. Was sind Servlets? Aufgaben eines Servlets Servlet-Container
E N D
Wintersemester 2004 Lehrstuhl für Wirtschaftsinformatik Technische Universität München Einführung in Java-Servlets und Servlet-Engine Apache Tomcat Markus Ruppenthal 23.11.204
Agenda • Was sind Servlets? • Aufgaben eines Servlets • Servlet-Container • Überblick: Freie Desktop-Entwicklungsserver • Aufsetzen eines Apache Tomcat-Entwicklungsservers • Einrichtung von Apache Tomcat • Hinweise zur Nutzung von Apache Tomcat • Grundstruktur von Servlets • Lebenszyklus eines Servlets • Beispiel: Hello World • Literatur und Links
Was sind Servlets? Servlets sind... • Java-Programme, die auf einem Web- oder Anwendungsserver ausgeführt werden • dienen der dynamischen Generierung von Webseiten / Webcontent • plattformunabhängig durch Verwendung der Java-Technologie • prinzipiell protokollunabhängig, werden allerdings meistens im Zusammenhang mit HTTP verwendet Client(Applets) Server(Servlets)
Aufgaben eines Servlets Datenbank • Vom Client gesendete, explizite Daten lesen • Vom Browser implizit mit der HTTP-Anfrage gesendete Daten lesen • Ergebnisse generieren (mit Hilfe der in Java zur Verfügung stehenden Werkzeuge) • Konkrete Daten an den Client zurücksenden • Implizite Antwortdaten an den Client senden JDBC Java-Anwendung Request RMI ... Response Servlet Server (z.B. Webserver mit Servlet-Container) Client (Endanwender)
Servlet-Container • Vorraussetzung für die Nutzung von Servlets:Vorhandensein eines Servlet-Containers (auch als Servlet-Engine bezeichnet) auf dem Server • Implementiert die API-Spezifikationen Servlet 2.3 (JSP 1.2) oder Servlet 2.4 (JSP 2.0) • Zu Entwicklungszwecken in der Regel als eigenständiger Desktop-Entwicklungsserver eingerichtet • Zum Deployment als Plug-In in einen Standard-Webserver integriert
Überblick: Freie Desktop-Entwicklungsserver • Können kostenlos heruntergeladen und als eigenständige Webserver eingerichtet werden • Zum Teil ist auch die Nutzung als Plug-In für einen Standard-Webserver kostenlos • Beispiele für kostenfreie Desktop-Entwicklungsserver: • Apache Tomcat • Macromedia JRun • Caucho`s Resin • New Atlanta`s ServletExec • Jetty
Aufsetzen einesApache Tomcat-Entwicklungsservers • Download der Binary von: http://jakarta.apache.org/tomcat • Binary entpacken • Tomcat einrichten(Alternativ: Download eines vorkonfigurierten Paketes von http://www.coreservlets.com/Apache-Tomcat-Tutorial/ ) • Server starten mit: [Tomcat-Pfad]\bin\startup.bat • Server stoppen mit: [Tomcat-Pfad]\bin\shutdown.bat
Einrichtung von Apache Tomcat • JAVA_HOME-Variable setzen • Server-Port angeben • Neuladen von Servlets aktivieren • ROOT-Kontext aktivieren • Aufruf-Servlet einschalten • Grenze für den DOS-Speicher heraufsetzen • Einstellung des Classpath
JAVA_HOME Die Variable JAVA_HOME setzt den Pfad zum obersten SDK Installationsverzeichnis. • Datei: [Tomcat-Pfad]\bin\catalina.bat || autoexec.bat • Zeile einfügen: set JAVA_HOME=[Pfad zu SDK] (z.B. C:\j2sdk1.4.1_01)
Server-Port angeben Sofern Port 80 nicht von einem anderen Server belegt ist, bewirkt diese Änderung, dass bei Aufruf einer URL der Port nicht extra angegeben werden muss (z.B. http://127.0.0.1:8080/servlets-examples/RequestParamExample) • Datei: [Tomcat-Pfad]\conf\server.xml • Ändern des Ports auf den Standard-Port 80: <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
Neuladen des Servers aktivieren Für angeforderte Servlets überprüft der Server das Überarbeitungsdatum der Klassendatei und lädt solche Klassen neu, die seit dem letzten laden geändert wurden. • Datei: [Tomcat-Pfad]\conf\server.xml • Suchen nach <Host name="localhost" appBase="webapps„ ... • Unter diesem Block folgende Zeile einfügen: <DefaultContext reloadable="true"/>
ROOT-Kontext aktivieren Aktiviert die Standardwebanwendung von Tomcat. Solange keine eigenen Webanwendungen in Tomcat eingerichtet wurden, kann diese Anwendung verwendet werden. In den Tomcat-Versionen 3, 4.0.1-4.0.3, in einigen Versionen von Tomcat 4.1, in Tomcat 5.0.20 und später sollte die Standardwebanwendung bereits aktiviert sein. • Datei: [Tomcat-Pfad]\conf\server.xml • Auskommentierung entfernen von <Context path="" docBase="ROOT" debug="0"/>
Aufruf-Servlet einschalten Gestattet es, Servlets auszuführen, ohne vorher die Datei WEB-INF\web.xml der eigenen Webanwendung anpassen zu müssen. Kompilierte Servlets werden stattdessen nur im Verzeichnis WEB-INF\classes\ abgelegt und über die URL http://localhost/servlet/ServletName (bei der Standardwebanwendung) oder http://localhost/webAppPrefix/servlet/ServletName (bei selbst definierten Webanwendungen) gestartet. • Datei: [Tomcat-Pfad]\conf\web.xml • Auskommentierung entfernen von <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>
Aufruf-Servlet einschalten • Datei: [Tomcat-Pfad]\conf\web.xml • Auskommentierung entfernen von <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> und von <servlet> <servlet-name>invoker</servlet-name> <servlet-class> org.apache.catalina.servlets.InvokerServlet </servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet>
Grenze für den DOS-Speicher heraufsetzen Eventuell notwendig bei Windows 98/ME und früheren Versionen. Bei einer Fehlermeldung wie „Kein Speicherplatz mehr im Umgebungsbereich“ müssen DOS-Speichereinstellungen für die Startup- und Shutdownskripte angepasst werden. • Rechter Mausclick auf [Tomcat-Pfad]\bin\startup.bat->Eigenschaften-> Speicher-> Auswahl ursprünglicher Umgebungsspeicher von Automatisch in 2816 oder mehr ändern.
Einstellung des Classpath Servlets und JSP sind kein integraler Bestandteil von SDK. Durch Setzen des Classpath wird dem Java-Compiler der Ort der Servlet-Klassen mitgeteilt. Auch das aktuelle Verzeichnis >>.<< sollte in den Classpath aufgenommen werden, da andernfalls keine paketlosen Klassen kompiliert werden können. • Datei: autoexec.bat • Einfügen der Zeile: set CLASSPATH=.;[Tomcat-Pfad]\common\lib\servlet-api.jar; [Tomcat-Pfad]\common\lib\jsp-api.jar [Tomcat-Pfad] ist z.B. C:\apache\tomcat
Testen des Tomcat-Servers • Ausführen von [Tomcat-Pfad]\bin\startup.bat startet den Server. • Eingabe der URL http://localhost/ sollte in etwa folgendes Ergebnis liefern:
Hinweise zur Nutzung von Apache Tomcat • Im Ordner \bin befinden sich u.a. die Dateien zum Starten und Beenden des Servers (startup.bat und shutdown.bat) • Im Ordner webapps werden die Webanwendungen abgelegt • ROOT ist die Standardwebanwendung(hier können u.a. html- oder jsp-Dateien abgelegt und überhttp://localhost/Dateiname direkt im Browser aufgerufen werden) • Im Ordner \WEB-INF\classes werden die kompilierten Servlets einer Webanwendung abgelegt und über http://localhost/servlet/Servletname aufgerufen
Grundstruktur von Servlets (1) • Servlets werden normalerweise von HttpServlet abgeleitet • Überschreiben die Methoden doGet() und doPost() • doGet() und doPost() nehmen jeweils 2 Parameter entgegen: • HttpServletRequest • ermöglicht Zugriff auf alle eingehenden Daten • HttpServletResponse • Ermöglicht die Spezifikation von ausgehenden Informationen • Beinhaltet den PrintWriter, mit dem Dokumentinhalt an den Client zurückgesendet werden kann • Lösen 2 Ausnahmen aus: • ServletException • IOException
Grundstruktur von Servlets (2) • PrintWriter erfordert den import von java.io • HttpServlet erfordert den import von javax.servlet • HttpServletRequest / HttpServletResponse erfordern den import von javax.servlet.http
Lebenszyklus eines Servlets (2) • Der Lebenszyklus eines Servlets im Detail: • Laden und instanziieren • Entweder beim Start des Servlet-Containers oder bei der ersten Anfrage • Initialisieren • Die init-Methode des Servlets wird aufgerufen • Hier kann das Servlet Initialisierungsaufgaben erledigen, z.B. eine Datenbankverbindung herstellen oder Konfigurationsdaten aus einer Datei einlesen
Lebenszyklus eines Servlets (3) • Client-Anfragen bearbeiten • Die service-Methode des Servlets wird aufgerufen • Diese Methode überprüft den HTTP-Anfragetyp und leitet die Anfrage an die richtige Methode weiter, z.B. doGet, doPost • Servlet-Klasse wieder entladen • Der Servlet Container entscheidet, wann die Servlet-Instanz wieder aus dem Speicher entfernt wird • Vorher wird die Methode destroy aufgerufen
Beispiel: Hello World 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 out = response.getWriter(); 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("</body>"); out.println("</html>"); } }
Literatur und Links Brown, L.; Hall, M. (2004): Servlets und Java Server Pages. 2. Aufl., Markt und Technik Verlag, München 2004. o.V. (o.J.): The Jakarta Apache Project. In: http://jakarta.apache.org/tomcat/, zugegriffen am 21.11.2004. o.V. (o.J.): A Tutorial on Installing and Using Tomcat 4 or 5 for Servlet and JSP Development. In: http://www.coreservlets.com/Apache-Tomcat- Tutorial/ zugegriffen am 21.11.2004.