Architekturen für verteilte Internetdienste

Werbung
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/
Herunterladen