1 Überblick ■ Servlets ◆ Request, Response ◆ Filter Architekturen für verteilte Internetdienste ◆ Sitzungsmanagement ■ Java Server Pages (JSP) ◆ Life Cycle, Inhaltserzeugung ◆ Expression Language Übung 3: Servlets + Java Server Pages ◆ Beans ◆ Modularisierung/ Wiederverwendung ◆ Klassische JSP vs. XML ◆ Tag Libraries [email protected] ■ Apache Tomcat © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 2 Servlets 2 Servlets ■ Ziele ■ Einfaches Beispiel-Servlet ◆ Plattformunabhängig bzgl. JVM public class MyServlet extends HttpServlet { ◆ Skalierbarer und performanter als CGI ◆ Implementierung vs. Deployment public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { • Deployment Descriptor (+J2EE-Tools) ◆ Modularisierung, Rollentrennung response.setContentType("text/html"); response.setBufferSize(8192); PrintWriter out = response.getWriter(); • GUI • Workflow, Storylines • Geschäftsmethoden out.println("<html>..."); out.close(); • Objekt-relationale Abbildung • Datenzugriff (z.B. abstrakte DB-API) } • Datenhaltung (z.B. konkrete Datenbank) public void doPost(...) throws ServletException, IOException { this.doGet(request, response); } ◆ Basisklasse javax.servlet.GenericServlet ◆ HTTP-Adapter javax.servlet.http.HttpServlet } 3.1 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.2 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 2 Servlets 2 Servlets ■ Life Cycle ■ Requests ◆ Servlet Klasse laden ◆ getReader(), getInputStream() ◆ Instanz erzeugen: init() ◆ HttpServletRequest-URI • UnavailableException • CGI-Format: http://host:port/requestpath?querystring ◆ Aufruf: service() bzw. doPost()/doGet() • Parameter in GET-URL kodiert oder als POST-Datenstrom • Auf MT-Safety achten • Zugriff: getParameter(name) • Requests auslesen, Response Header + Body schreiben ◆ Kontextdaten über Sitzungsmanagement • Langlaufende Requests gesondert behandeln ◆ destroy() Enumeration e = request.getParameterNames(); PrintWriter out = res.getWriter (); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = request.getParameter(name); out.println(name + " = " + value); } • Z.B. Synchronisation persistenter Speicher ◆ Diverse Listener, u.a. • ServletContextListener, ServletContextAttributesListener, HttpSessionListener, HttpSessionAttributesListener ◆ Zentrale Fehlerseiten, Filter 3.3 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.4 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 2 Servlets 2 Servlets ■ Response ■ Filter: Konzept ◆ getWriter(), getOutputStream() ◆ javax.servlet.Filter, .FilterChain, .FilterConfig ◆ setContentType(’text/html’) oder anderen MIME-Type ◆ Manipulieren und Abfangen von Requests/Responses ◆ setBufferSize(int) verhindert Teildokument bei Fehler ◆ Erkennen neuer Sessions ◆ Status Code, Cookies, ... setzen ◆ Nebeneffekte auslösen ◆ Ggf. Weiterleitung, Import der Ausgaben von Sub-Servlets • Logging, Authentication, Transformation, De/Encryption ◆ close() für EndOfRequest • Ressourcen-Verwaltung • Filter-Implementierung möglichst ohne Abhängigkeiten zu anderen Webdiensten ◆ im Deployment Descriptor eingereiht • Filter benennen • Wirkungstrigger festlegen: REQUEST, FORWARD, INCLUDE, ERROR • Wirkungsbereich festlegen: Welche Servlets 3.5 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.6 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 2 Servlets 2 Servlets ■ Filter: Implementierung ■ Filter: Implementierung ◆ Life Cycle public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { • init() ... • Aufruf doFilter(Request, Response, Chain) • Ggf. Manipulationen long starttime = System.currentTimeMillis(); • Verkettung mit FilterChain.doFilter(...) // weiter in Kette chain.doFilter(request, response); • destroy() ... long duration = System.currentTimeMillis() - starttime; logger.debug("Dauer: " + duration); ◆ Response manipulieren • Stream-Double an Chain weiterleiten } • dessen close()-Effekt verhindern • ServletRequestWrapper(...), ServletResponseWrapper(...) 3.7 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.8 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 2 Servlets 2 Servlets ■ Sitzungsmanagement - Allgemeines ■ Sitzungsmanagement - Implementierung ◆ HTTP zustandslos! ◆ Zustand: z.B. Login, Einkaufskorb HttpSession session = request.getSession(true); ◆ Mehrere Varianten für Zustandssicherung Date created = new Date(session.getCreationTime()); Date accessed = new Date(session.getLastAccessedTime()); • Cookies, versteckte Formularfelder, URL-Decorating/Rewriting ◆ Abstrahiert: Servlets suchen optimale von Browser/User unterstützte Variante aus session.setAttribute(dataName, dataValue); ◆ Listener für beliebige Zustandsänderungen String value = session.getAttribute(dataName).toString(); ◆ Z.B. Einkaufskorb: • Begin/Ende, Modifikation von Attributen • HttpSessionBindingListener, HttpSessionActivationListener HttpSession.setAttribute( “cart“ , new ShoppingCart()) 3.9 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.10 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 2 Servlets 2 Servlets - Modularisierung ■ Logout ■ Dispatching, Inclusion, Forwarding ◆ Timeout für Session konfigurieren ◆ Szenario: ein öffentlich sichtbares Servlet mit Parameter action=... ◆ Session.invalidate() • Vorteil: zentrales URL-Management (Workflow-Management) • Weiterleitung pro Action an interne Worker-Servlets/JSPs ■ Besonderheit: Links ◆ Szenario: wiederverwendbare Fragmente der Ausgabe ◆ Eigene Links ggf. mit Session-ID versehen ◆ Sonst ”springen“ Links aus dem Session-Context • Titel, Fuß-/Kopfzeile, Navigation, ... ◆ Response.encodeURL() • ” ; jsessionid=c0o7fszeb1” wird an alle Links angehängt ◆ Szenario: Weiterleitung, z.B. von intern agierendem Servlet an Ausgabe-JSP • Oder: ID wird in Cookies Client-seitig gespeichert (falls zulässig) • getRequestDispatcher(URL) ◆ Outgoing Links ohne Zustandsmarkierung • include(Request, Response) • Session bleibt hängen bis zum Timeout! • forward(Request, Response) 3.11 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.12 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 2 Servlets 3 Java Server Pages (JSP) ■ Scope-/Context-Objekte ■ Ziele (JSP Version 2.0) ◆ Information Sharing zwischen Servlets ◆ Rollentrennung Doc-Author/Designer vs. Programmierer ◆ Zustandsdaten für Applikation, Session, Request, ... ◆ Inversion der Servlets ◆ Textdokument durch Kommandos und Servletfragmente angereichert • ServletContext, HttpSession, ServletRequest, ... • Forwarding/Inclusion Object o = this.getServletContext().getAttribute(attributeName); • Zugriff auf Kontextdaten • Zugriff auf Beans ◆ Koordinierung der Servlet-Threads notwendig! • Zusatzfunktionen (DB, ...) ◆ Bootstrapping ◆ Kommandos klassisch: <%...%> • ServletContextListener global anmelden (Deployment Descriptor) • XML-Variante <jsp:something> • Bei Erzeugung eines Servlet vor dessen init() benachrichtigt ◆ File Extension .jsp, für Fragmenterzeuger .jspf • Daten in ServletContext vor-initialisieren ◆ Kurzreferenz Syntax-Card: http://java.sun.com/products/jsp/docs.html#syntax 3.13 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.14 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3 Java Server Pages (JSP) 3 Java Server Pages (JSP) ■ Beispiel ■ Beispiel <%@ <%@ <%@ <%! page contentType="text/html; charset=UTF-8" %> taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> taglib uri="/functions" prefix="f" %> String header="Caption"; %> <html> <head><title>Example</title></head> <body> <jsp:useBean id="locales" scope="application" class="mypkg.MyLocales"/> ... <p> <c:forEach var="localeString" items="${locales.localeNames}" > locale ${localeString}, </c:forEach> </p> <h1><%=header%></h1> <jsp:useBean id="date" class="mypkg.MyDate"/> <jsp:setProperty name="date" property="locale" value="${locales.selectedLocale}"/> <p>Date: ${date.date}</p> <c:set var="fooString" value="${param.foo}" /> <c:set var="isFoo" value="${!empty fooString}" /> </body> </html> <h2>Locale:</h2> ... 3.15 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.16 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3 Java Server Pages (JSP) 3 Java Server Pages (JSP) ■ Syntax ■ Life Cycle ◆ Kommentare (JSP/HTML) ◆ Prüfung, ob Servlet im Cache älter als JSP • Ggf. Transformation in Servlet und Übersetzung <%-- ...--%> <!-- ... --> • Compilerfehler werden ggf. erst bei erster Nutzung erkannt! ◆ jspInit () ... jspService() ... jspDestroy() ◆ Direktiven <%@ page import=“java.util.Hashtable“ %> <jsp:declaration> public void jspInit() {...} public void jspDestroy() {...} </jsp:declaration> ◆ Java Ausdrücke <%= 5 + 7 %> ◆ Zentrale Fehlerseite ◆ Java Deklarationen • <%@ page errorPage=”...”%> <%! int i = 1; %> • <%@ page isErrorPage=”true”%> ◆ Scriptlets (Java Anweisungen) • Automatisches Buffering, <%@ page buffer=”none|xxxkb”%> <% time.getTime(); %> 3.17 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.18 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3 Java Server Pages (JSP) 3 Java Server Pages (JSP) ■ Inhalt erzeugen ■ Expression Language (EL) ◆ <%@ page contentType=”text/html; charset=UTF-8”%> ◆ Vgl. XPath ◆ Auf Thread-safety achten! ◆ ${expr} in statischem Text und Tag-Attributwerten <c:set var="a" value="${!empty selectedLocaleString}"/> <%@page isThreadSafe=”false” %> ◆ Escaping für Klammeranfang ◆ Zugriff auf implizite Objekte über Kommandos/EL (s.u.) ${’${’} ◆ Scriptlets ◆ Variablen-Traversierung mit . und [] , a.b = a[”b”] • eingebetteter Servlet-Code, durch Custom Tags ersetzbar Map[String-Key] List[int-Offset] JavaBean[Property-Name] <% System.out.println("Aktuelles Datum:"); java.util.Date date = new java.util.Date(); ◆ Literale: true, false, null, \” , \’, \\, floats, ints, Strings ◆ Übliche arith./log. Operatoren %> ... <%= date %> 3.19 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.20 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3 Java Server Pages (JSP) 3 Java Server Pages (JSP) ■ Expression Language (EL) ■ Beans ◆ Implizite Objekte definiert ◆ Deklaration: • Kontexte: pageContext.servletContext, .session, .request, .response <jsp:useBeanid =”beanName” class=”classname” scope=”scope”> <jsp: setProperty .../> <!-- optional --> </jsp:useBean> • Maps: param, header, param/headerValues, cookie, initParam • Attribut-Maps: page-, request-, session-, applicationScope ◆ Scope: ◆ empty x <c:set var="isSelected" value="${!empty selectedLocaleString}" /> ◆ Eigene Funktionen wie Tags als ”function“ entwickeln Bean wird zerstört, wenn Response gesendet • session Bean wird zerstört, wenn Session beendet ◆ Zugriff: <jsp:getProperty name=”beanName”property=”propName”/> <jsp:setProperty name=”beanName”property=”propName” value=”.”/> ◆ Deaktivierung © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ Bean wird zerstört, wenn Seite fertig generiert • request • application Bean wird zerstört, wenn Web-Applikation entfernt <%@ taglib prefix=”z” uri=”/zak”%> ... <c:when test=”${f:equals(...)}”> ... <%@ page isELIgnored ="true|false" %> • page 3.21 ◆ Property-Traversierung mit EL: ${bean.propName} © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.22 3 Java Server Pages (JSP) 3 Java Server Pages (JSP) ■ Modularisierung/ Wiederverwendung ■ Klassische JSP vs. XML (JSP Documents) ◆ Properties für JSP-Gruppen deklarierbar ◆ Wohlgeformte .jspx-Dokumente ◆ Tag Files: enthalten Dokumentfragmente • Entities statt <, >, ... ◆ Inklusion • ${EL-expr} weiterhin möglich • Bei Übersetzung • <jsp:something>... statt <%...%> <%@ include file=”banner.jspf”%> • xmlns:x=”URI” statt <%@ taglib uri=”URI”prefix=”x” %> ◆ Deployment: Property ”is-xml“ setzen • Bei Ausführung ◆ Anwendung <jsp:include page=”response.jsp”/> • Postprocessing mittels XSLT, XML-Streaming zwischen Anwendungen ◆ Automatische Anpassung zw. klassisch/XML bei Imports ◆ Forwarding ◆ Optional: <jsp:root version=”2.0” > als DocRoot <jsp:forward page=”/main.jsp” /> • Multi-Document Ausgaben (Sequenz von Dokumenten) ◆ Preludes und Codas ◆ Ziel-DTD angebbar <jsp:output doctype-root-element=”books” ... doctype-system=”books.dtd”/> • Global deklarierte Fragmente vor/nach Ausgabe 3.23 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.24 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3 Java Server Pages (JSP) 3 Java Server Pages (JSP) ■ Beispiel (angelehnt an Tomcat JSP example) ■ JSTL - Java Server Pages Standard Tag Library ◆ Standardisierte Tags <tags:xhtmlbasic xmlns:tags="urn:jsptagdir:/WEB-INF/tags" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:fmt="http://java.sun.com/jsp/jstl/fmt" xmlns="http://www.w3.org/1999/xhtml"> <jsp:directive.page contentType="text/html" /> <head> <title>...</title> </head> <body> <h1>...</h1> <jsp:useBean id="now" class="java.util.Date" /> <fmt:formatDate value="${now}" pattern="MMMM d, yyyy, HH:mm:ss"/> </body> </tags:xhtmlbasic> • Interoperabilität • Rollentrennung, Programmierung “ohne Java” ◆ XML-Manipulation, DB, I18N, Conditionals, Flusskontrolle ◆ Komponenten • Core http://java.sun.com/jsp/jstl/core • XML http://java.sun.com/jsp/jstl/xml • I18N http://java.sun.com/jsp/jstl/fmt • SQL http://java.sun.com/jsp/jstl/sql • Functions http://java.sun.com/jsp/jstl/functions 3.25 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.26 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3 Java Server Pages (JSP) 3 Java Server Pages (JSP) ■ Deklaration als xmlns:prefix oder: ■ JSTL-Beispiel: Core ◆ Variablen setzen/löschen <%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %> ■ Interaktion mit Tag-Daten <c:set var=”pass” scope=”session” value=”${param.PwdField}”/> <c:remove var=”pass” scope=”session”/> ◆ Flusskontrolle <c:if test=”...”>... <c:set var=”bookId” value=”${param.Add}”/> <jsp:useBean id=”bookId” type=”java.lang.String” /> <c:choose> <c:when test=”...”>... <c:otherwise> ... <% cart.add(bookId); %> <sql:query var=”books” dataSource=”${applicationScope.DB}”> select * from PUBLIC.books where id = ? <sql:param value=”${bookId}” /> </sql:query> <c:forEach var=”item” items=”${sessionScope.cart.items}”>... ◆ Import 3.27 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ <c:import url=”/books.xml” var=”xml”> <c:param ...> <c:redirect url=”...”> <c:param ...> 3 Java Server Pages (JSP) 3 Apache Tomcat ■ Custom Tags ■ Servlet Container ◆ Implementierung, z.B.: ◆ http://tomcat.apache.org/ (Aktuelle Version: 5.5.17) public ATagImpl extends SimpleTagSupport { ... public void doTag() throws JspException, IOException { getJspContext().getOut().write(”AVID-SS06”); } } ◆ Zusätzlich Parameter, Variablen, Nested-Tags, ... ■ Umfangreiche Beispielsammlung! ■ Tomcat liefert kleinen HTTP-Server mit (Default Port 8080) ◆ Inkl. Admin/Managemente-Konsole ■ Anbindung an HTTP-Server ◆ Tag Library Descriptor (TLD) ... <tag> <name>atag</name> <tag-class>infvs.avid.tags.ATagImpl</tag-class> <body-content>scriptless</body-content> ... <attribute> <name>test</name> ... </attribute> ... </tag> ◆ Weitaus komplexere Konstrukte möglich... © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.28 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ ◆ Bsp.: Apache Proxy Modul greif ab best. Pfadpräfix ◆ http://www.sw/tomcat/MyApps/Intro?param1 • ”tomcat“ ist Suchmuster für Proxy Modul • ”MyApps“ ist Context Root der Web-Application • ”Intro“ ist Servlet-Alias • “param1“ ist Parameter 3.29 3.30 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3 Apache Tomcat 3 Apache Tomcat ■ Deployment ■ Deployment-Descriptor (stark gekürzt) ◆ Web ARchive (.war) <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> • JAR-File mit striktem Aufbau / – Document Root (.html, .jsp, ...) /WEB-INF/web.xml – Deployment Descriptor /WEB-INF/classes – Java Class Files /WEB-INF/lib – JARs • Servlets/Filter... werden logisch definiert und benamt <display-name>My Web Application</display-name> • Logische Namen an konkrete Pfade geknüpft <context-param> <param-name>webmaster</param-name> <param-value>[email protected]</param-value> ... ◆ WAR in ${TOMCAT}/webapps/... kopieren • Auto-Deployment und Entpacken durch Tomcat [...] ◆ Archivname ohne WAR wird Context Root 3.31 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.32 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3 Apache Tomcat 4 Aufgaben ■ Deployment-Descriptor (stark gekürzt) ■ Servlets ◆ Implementierung einer Taskliste [...] • Anzeige Tasks • Hinzufügen Tasks <servlet> <servlet-name>first</servlet-name> <servlet-class>sw.myhost.FirstServlet</servlet-class> <init-param> <param-name>testInit</param-name> <param-value>bla</param-value> </init-param> ... • Löschen Tasks ■ Java Server Pages ◆ Implementierung Taskliste ◆ Gleiche Funktionalität/ Erscheinungsbild wie Servlet-Anwendung <servlet-mapping> <servlet-name>first</servlet-name> <url-pattern>*.do</url-pattern> ... ■ Tomcat ◆ Installieren ◆ Doku/Beispiele studieren <session-config> <session-timeout>30</session-timeout> ... ◆ J2EE-Tutorial ◆ Google, ... </web-app> 3.33 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/ 3.34 © 2006, Holger Schmidt, Verteilte Systeme, Univ. Ulm, [u3.fm, 2006-05-29 11.07] http://www-vs.informatik.uni-ulm.de/teach/ss06/avid/