Dokumentation J2SE Marc Domenig Ein Servlet

Werbung
Dokumentation J2SE
C:\j2sdk1.4.1\docs\index.html
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4-1
Marc Domenig
Was ist ein Servlet?
Ein Servlet ist ein Java Programm,
das in einem Webcontainer lebt.
http://www.canoo.com/
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4-2
1
Dokumentation J2EE
C:\Programme\jwsdp1_0_01\docs\api\index.html
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4-3
Dynamische Konfiguration des
Servletcontainers
http://<host>:8080/manager/install?
path=/mywebapp&war=file:/path/to/mywebapp.war!
Auspacken der Servletklassen
mywebapp.war
Institut für Informatik
Universität Basel
jwsdp-1_0/work/
Standard Engine/localhost/
WEB-INF/classes/...
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4-4
2
2. Methode zur
Installation eines Servlets
WAR-File
Eine Webanwendung kann auf einem Server installiert
werden, indem das WAR-File in den webapps Ordner
kopiert wird.
Konfiguration server.xml
<Host ... appBase="webapps“ ...
liveDeploy="true" ...
unpackWARs=“true"
name="localhost">
htttp://jakarta.apache.org
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4-5
2.9 Filter
neu seit Version 2.3
Vorbearbeiten von Requests und
Nachbearbeiten von Responses
Lebenszyklus ähnlich dem eines Servlets,
– init(FilterConfig config)
– doFilter(ServletRequest req, ServletResponse res,
FilterChain chain)
– destroy()
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4-6
3
Filter
Einsatzmöglichkeiten:
– Authentifizierung, Logging, BildKonvertierung, Kompression,
Verschlüsselung, XSL/T Filter, etc.
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
import javax.servlet.*;
import java.io.IOException;
public class SimpleFilter implements Filter
{
private FilterConfig filterConfig;
www.ifi.unibas.ch/studies
Klassenvariable Zugriff auf
Konfiguration (web.xml)
public void doFilter (ServletRequest request,
ServletResponse response, FilterChain chain)
{
try
{
System.out.print ("Within Simple Filter ... ");
System.out.println ("Filtering the Request ...");
chain.doFilter (request, response);
Java Apache XML (JAX)
Lektion 4: Servlets III
Vorbearbeitung
Nächster Filter oder Servlet
System.out.print ("Within Simple Filter ... ");
System.out.println ("Filtering the Response ...");
Institut für Informatik
Universität Basel
4-7
Nachbearbeitung
www.ifi.unibas.ch/studies
4-8
4
} catch (IOException io) {
System.out.println ("IOException raised in SimpleFilter");
} catch (ServletException se) {
System.out.println ("ServletException raised in SimpleFilter");
}
}
public FilterConfig getFilterConfig()
{
return this.filterConfig;
}
Return KonfigurationsObjekt
public void setFilterConfig (FilterConfig filterConfig)
{
this.filterConfig = filterConfig;
Schreibt die Konfiguration in
}
die Klassenvariable
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4-9
Verketten von Filter
Reihenfolge wird in der web.xml
Konfigurationsdatei definiert.
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 10
5
web.xml (Filter Tags)
<filter>
<filter-name>Logger</filter-name>
<filter-class>filters.LoggerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Logger</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 11
LoggerFilter
package filters;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public final class LoggerFilter implements Filter {
private FilterConfig filterConfig = null;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
long startTime = System.currentTimeMillis();
String remoteAddress = request.getRemoteAddr();
String remoteHost = request.getRemoteHost();
String reqURI = request.getRequestURI();
String browserUsed =
request.getHeader("User-Agent").toLowerCase();
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 12
6
LoggerFilter
chain.doFilter(request, response);
filterConfig.getServletContext().log("Request Originated from IP " +
remoteAddress + "(" + remoteHost + "), using browser (" +
browserUsed + ") and accessed resource " + reqURI +
" and used " + (System.currentTimeMillis() - startTime) + " ms" );
}
public void destroy() {
this.filterConfig = null;}
public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;}
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 13
LoggerFilter
2002-11-14 14:46:53 Request Originated from IP 127.0.0.1(localhost), using
browser (mozilla/5.0 (macintosh; u; ppc mac os x; en-us; rv:1.1) gecko/20020826)
and accessed resource /lekt3/randomforward and used 6 ms
2002-11-14 14:46:55 Request Originated from IP 127.0.0.1(localhost), using
browser (mozilla/5.0 (macintosh; u; ppc mac os x; en-us; rv:1.1) gecko/20020826)
and accessed resource /lekt3/html/regenschauer.gif and used 1 ms
2002-11-14 14:50:44 Request Originated from IP 127.0.0.1(localhost), using
browser (mozilla/5.0 (macintosh; u; ppc mac os x; en-us; rv:1.1) gecko/20020826)
and accessed resource /lekt3/prime and used 3 ms
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 14
7
Was ist ein Cookie?
4Ein Cokie sind kleine Textinformation
4vom Server zum Client gesendet
4Jedes Mal, wenn der Browser die Seite wieder
besucht wird das Cookie geschickt.
4HTTP Verbindungen sind zustandslos.
4Cookies können Daten über mehrere HTTP
Verbindungen speichern.
4RFC 2109
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 15
2.10 Cookies
• Zur Verwaltung von Cookies gibt die spezielle
Cookieklasse.
• Damit ein Cookie Informationen speichern kann, muss das
Cookie erstellt werden und bei der Antwort dem Header
angehängt werden.
• Alle Informationen in Cookies müssen Textdaten sein
• Einsatz:
4 Identifizierung eine Users
4 Personifizierte Homepages, Portale, User Profiles
4 Automatisches login
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 16
8
Servlet Cookie API
Erzeugen mit:
c = new Cookie(name, value)
Attribute:
public String getComment()
public void setComment(String comment)
public String getDomain()
public void setDomain(String domainPattern)
c.setDomain(.unibas.ch)
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 17
Servlet Cookie API
public String getMaxAge()
public void setMaxAge(int lifetime in Sekunden)
lifetime < 0 das Cookie nicht speichern
lifetime = 0 das Cookie von der Disk löschen
public String getPath()
public void setPath(String path)
path =“/ “ Alle Seiten des Servers erhalten das Cookie
path = “/ifi/user “ Bei allen Seiten unterhalb dieses
Pfades schickt der User-Agent das Cookie
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 18
9
Bsp:
Private static final String SUM_KEY = “”
…
Int sum=…;
Cookie sumCookie = new Colkie (SUM_KEY, Integer.toString(sum));
response.setContentType(“text/html”);
response.addCookie(sumCookie);
• Falls keine Lebensdauer angegeben wird
(setMaxAge(intervall)) lebt das Cookie während einer
Browser Session.
• Falls das intervall negativ ist, wird das Cookie nach
verlassen des Browser zerstört.
• Falls der Wert 0 ist, wird das Cookie sofort wieder
zerstört.
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 19
Beispiel SetCookies
package cookies;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SetCookies extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
for(int i=0; i<3; i++) {
// Default maxAge is -1, indicating cookie
// applies only to current browsing session.
Cookie cookie = new Cookie("Session-Cookie-" + i,
"Cookie-Value-S" + i);
response.addCookie(cookie);
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 20
10
Beispiel SetCookies
cookie = new Cookie("Persistent-Cookie-" + i,
"Cookie-Value-P" + i);
// Cookie is valid for an hour, regardless of whether
// user quits browser, reboots computer, or whatever.
cookie.setMaxAge(3600);
response.addCookie(cookie);
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Setting Cookies";
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 21
Beispiel SetCookies
out.println (ServletUtilities.headWithTitle(title) +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
"There are six cookies associated with this page.\n" +
"To see them, visit the\n" +
"<A HREF=\"/servlet/cookies.ShowCookies\">\n" +
"<CODE>ShowCookies</CODE> servlet</A>.\n" +"<P>\n" +
"Three of the cookies are associated only with the\n" +
"current session, while three are persistent.\n" +
"Quit the browser, restart, and return to the\n" +
"<CODE>ShowCookies</CODE> servlet to verify that\n" +
"the three long-lived ones persist across sessions.\n" +
"</BODY></HTML>");
}
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 22
11
2.11 Session Tracking
• Identifizierung und
Speicherung
persönlicher Daten
A
RnEm
Q
eE+ld
ID
R
SIuDn
g
ID: ETWEFDR234ewdw
• Warenkorb
Lösung:
• Session mit ID
ID: JKLMGHNB45kdse43k
Institut für Informatik
Universität Basel
www.ifi.unibas.ch/studies
Java Apache XML (JAX)
ID: JEWTSDTRWE45rrtt
Lektion 4: Servlets III
4 - 23
HTTP ist zustandslos
Es gibt bei HTTP keine Möglichkeit Daten
zwischen den einzelnen Anfrage
auszutauschen.
Der Server hat keine Information über
Vorgeschichte oder Zugehörigkeit der
verschiedenen eintreffenden Anfragen
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 24
12
Session Tracking Techniken
Grundtechniken:
• Cookies
Amzon.com
http://lw10fd.law10.hotmail.msn.com/
cgi-bin/HoTMaiL?curmbox=F000000001
<INPUT TYPE="hidden"
&a=4f15a3f4b9e618bb68727d60fcba29
NAME="p_sess_id"
d1
• URL-Rewriting
hotmail.com
VALUE="1BE12318ECCE2571214
F630AF7D941">
• Versteckte Formulare
yellownet.ch
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 25
Cookies
String sessionID = makeUniqueString();
Cokie sessionCookie = new Cokie(“jsession“, sessionID);
sessionCookie.setPath(“/ “);
response.addCookie(sessionCookie);
Server:
Generierung einer eindeutigen ID
Client:
Verwaltet Cookies
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 26
13
URL-Rewriting
String originalURL = “http://host/path/index.html“
String info = “jsession=1234“
out.println(“<A HREF=\““ + originalURL + “;“ + info + “\“>
…. </A>“);
Server:
Generierung einer eindeutigen ID
Client:
URL enthält mit zusätzliche Information.
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 27
Hidden Form Fields
<FORM ACTION="onl_kdl_kto.buch_list_get" METHOD="POST"
NAME=Bewegungen>
...
<TD>Lastkonto</TD>
<TD>40-143413-5 CHF Guggisberg Martin
<INPUT TYPE="hidden" NAME="p_lkto_nr" VALUE="401434135">
...
<INPUT TYPE="hidden" NAME="p_sess_id"
VALUE="1BE12318ECCE2571214F630AF7D941">
<INPUT TYPE="hidden" NAME="p_aufsetz_buch_id" VALUE="">
<INPUT TYPE="hidden" NAME="p_aufsetz_datzeit" VALUE="">
</FORM>
Server:
Generierung einer eindeutigen ID
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 28
14
HTTPSession bei Servlets
http://..Session_Tomcat
Webserver
Servlet Container
Id keine !
neue Id
kgwx
Session
name:wert
http://..Session_Tomcat
Id kgwx
Institut für Informatik
Universität Basel
Id aus
Cookie oder URL
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 29
Methoden von HttpSession
public Object getAttribute(String name) [2.2]
public void setAttribute(String name,Object value);[2.2]
public void removeAttribute(String name);[2.2]
public Enumeration getAttributeNames() [2.2]
Alle Attribute einer Session werden zurückgegeben.
public String getId();
Eindeutige Session Id
public boolean isNew();
true, falls der Browser die Session noch nie gesehen hat.
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 30
15
Methoden von HttpSession
public long getCreationTime()
Zeit in Millisekunden von Januar 1970
public int getMaxInactiveInterval();
public void setMaxInactiveInterval(int seconds)
Maximale inaktive Zeit, die eine Session überleben soll.
seconds < 0 ; die Session soll immer aktiv bleiben
public void invalidate();
Session wird mit allen assoziierten Objekten gelöscht.
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 31
Automatische URL-rewriting
Das Servlet stellt automatisch auf URL-rewriting um, falls
Cookies nicht erlaubt sind.
Für lokale Links:
String originalURL = someRelativeorAbsoluteURL;
String encodedURL =
response.encodeURL(originalURL);
out.println(“<A HREF=\““ + encodedURL + “\“> ….</A>“);
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 32
16
Session
package session;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Session_Tomcat extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse
response)throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body bgcolor=\"white\"><head>");
String title = "Praxis der Internet Programmierung";
out.println("<title>" + title + "</title></head><body>");
www.ifi.unibas.ch/studies
Institut fürout.println("<h3>"
Informatik
Java+Apache
XML (JAX)
+ title
"</h3>");
Universität Basel
Lektion 4: Servlets III
4 - 33
Session
HttpSession session = request.getSession();
out.println("SessionId " + session.getId());
out.println("<br>Erzeugungszeit: ");
out.println(new Date(session.getCreationTime()) + "<br>");
out.println("Letztmals benutzt: ");
out.println(new Date(session.getLastAccessedTime()));
String dataName = request.getParameter("dataname");
String dataValue = request.getParameter("datavalue");
if (dataName != null && dataValue != null) {
session.setAttribute(dataName, dataValue);
}
out.println("<P>Session Data <br>");
Enumeration names = session.getAttributeNames();
while (names.hasMoreElements()) {
String name = (String) names.nextElement();
String value = session.getAttribute(name).toString();
out.println(name + " = " + value + "<br>");
}
www.ifi.unibas.ch/studies
Institut für Informatik
Java Apache XML (JAX)
Universität Basel
Lektion 4: Servlets III
4 - 34
17
Session
out.print("<P><form action=\"");
out.print(response.encodeURL("Session_Tomcat"));
out.print("\" ");
out.println("method=POST>");
out.println("Name: <input type=text size=20 name=dataname>");
out.println("<br>Wert:");
out.println("<input type=text size=20 name=datavalue>");
out.println("<br><input type=submit>");
out.println("</form>");
out.println("<P>GET based form:<br>");
out.print("<form action=\"");
out.print(response.encodeURL("Session_Tomcat"));
out.print("\" ");
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 35
Session
out.println("method=GET>");
out.println("Name:<input type=text size=20 name=dataname>");
out.println("<br>Wert:");
out.println("<input type=text size=20 name=datavalue>");
out.println("<br><input type=submit>");
out.println("</form>");
out.print("<p><a href=\"");
out.print(response.encodeURL("Session_Tomcat?dataname=foo&
datavalue=bar"));
out.println("\" >URL encoded </a>");
out.println("</body></html>");
}
public void doPost(HttpServletRequest request,HttpServletResponse
response)throws IOException, ServletException
{
doGet(request, response);
}
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 36
18
Warenkorb Bestellung
1
Katalog
Institut für Informatik
Universität Basel
2
Bestellung
Java Apache XML (JAX)
Lektion 4: Servlets III
3
Bestätigung
www.ifi.unibas.ch/studies
4 - 37
Modellierung Katalog
CatalogPage
ItemOrder
Item
KidsBookPage
KidsBookPage
init()
init()
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
Catalog
Repräsentation
Daten
www.ifi.unibas.ch/studies
4 - 38
19
Modellierung Bestellung, Bestätigung
OrderPage
ShoppingCart
addItem()
getItem()
CheckOut
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 39
Warenkorbsystem: CatalogPage
public abstract class CatalogPage extends HttpServlet {
private Item[ ] items;
private String[ ] itemIDs;
CatalogPage
private String title;
/** cut some lines **/
public void doGet(HttpServletRequest request,
HttpServletResponse response)
KidsBookPage
throws ServletException, IOException {
init()
response.setContentType("text/html");
if (items == null) {
response.sendError(response.SC_NOT_FOUND,
"Missing Items.");
return;
}
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
ItemOrder
Item
KidsBookPage
init()
www.ifi.unibas.ch/studies
4 - 40
20
Warenkorbsystem: CatalogPage
PrintWriter out = response.getWriter();
out.println(“<HTML><HEAD><TITLE>“+ title +“</TITLE></HEAD>“
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=\"CENTER\">" + title + "</H1>");
Item item;
for(int i=0; i<items.length; i++) {
out.println("<HR>");
item = items[i];
if (item == null) {
out.println("<FONT COLOR=\"RED\">" +
"Unknown item ID " + itemIDs[i] +
"</FONT>");
} else {
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 41
Warenkorbsystem: CatalogPage
out.println();
String formURL ="/servlet/onlinestore.OrderPage";
formURL = response.encodeURL(formURL);
out.println
("<FORM ACTION=\"" + formURL + "\">\n" +
"<INPUT TYPE=\"HIDDEN\" NAME=\"itemID\" " +
"
VALUE=\"" + item.getItemID() + "\">\n" +
"<H2>" + item.getShortDescription() +
" ($" + item.getCost() + ")</H2>\n" +
item.getLongDescription() + "\n" +
"<P>\n<CENTER>\n" +
"<INPUT TYPE=\"SUBMIT\" " +
"VALUE=\"Add to Shopping Cart\">\n" +
"</CENTER>\n<P>\n</FORM>"); ….
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 42
21
Warenkorbsystem: OrderPage
HttpSession session = request.getSession(true);
ShoppingCart cart;
synchronized(session) {
cart = (ShoppingCart)session.getValue("shoppingCart");
// New visitors get a fresh shopping cart.
// Previous visitors keep using their existing cart.
if (cart == null) {
cart = new ShoppingCart();
session.putValue("shoppingCart", cart);
}
OrderPage
ShoppingCart
addItem()
getItem()
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 43
Warenkorbsystem: OrderPage
String itemID = request.getParameter("itemID");
if (itemID != null) {
String numItemsString =
request.getParameter("numItems");
if (numItemsString == null) {
// If request specified an ID but no number, then customers
//came here via an "Add Item to Cart" button on a catalog page.
cart.addItem(itemID);
} else {
OrderPage
ShoppingCart
addItem()
getItem()
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 44
22
Warenkorbsystem: OrderPage
// If request specified an ID and number, then
// customers came here via an "Update Order" button
// after changing the number of items in order.
// Note that specifying a number of 0 results
// in item being deleted from cart.
int numItems;
try {
numItems = Integer.parseInt(numItemsString);
} catch(NumberFormatException nfe) {
numItems = 1;
}
cart.setNumOrdered(itemID, numItems);
}
}
}
OrderPage
ShoppingCart
addItem()
getItem()
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 45
Warenkorbsystem: OrderPage
// Whether or not the customer changed the order, show order status.
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Status of Your Order";
out.println(“<HTML><HEAD><TITLE>“+ title +“</TITLE></HEAD>“ +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=\"CENTER\">" + title + "</H1>");
synchronized(session) {
Vector itemsOrdered = cart.getItemsOrdered();
if (itemsOrdered.size() == 0) {
out.println("<H2><I>No items in your cart...</I></H2>");
OrderPage
ShoppingCart
addItem()
getItem()
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 46
23
Warenkorbsystem: OrderPage
for(int i=0; i<itemsOrdered.size(); i++) {
order = (ItemOrder)itemsOrdered.elementAt(i);
out.println
("<TR>\n" +
" <TD>" + order.getItemID() + "\n" +
" <TD>" + order.getShortDescription() + "\n" +
" <TD>" +
formatter.format(order.getUnitCost()) + "\n" + " <TD>" +
"<FORM ACTION=\"" + formURL + "\">\n" +
"<INPUT TYPE=\"HIDDEN\" NAME=\"itemID\"\n" +
"
VALUE=\"" + order.getItemID() + "\">\n" +
"<INPUT TYPE=\"TEXT\" NAME=\"numItems\"\n" +
"
SIZE=3 VALUE=\"" +
order.getNumItems() + "\">\n" +
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 47
Warenkorbsystem: OrderPage
} else {
// If there is at least one item in cart, show table
// of items ordered.
out.println
("<TABLE BORDER=1 ALIGN=\"CENTER\">\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
" <TH>Item ID<TH>Description\n" +
" <TH>Unit Cost<TH>Number<TH>Total Cost");
ItemOrder order;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String formURL = "OrderPage";
formURL = response.encodeURL(formURL);
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 48
24
Warenkorbsystem: OrderPage
"<SMALL>\n" +
"<INPUT TYPE=\"SUBMIT\"\n "+
"
VALUE=\"Update Order\">\n" +
"</SMALL>\n" +
"</FORM>\n" +
" <TD>" +
formatter.format(order.getTotalCost()));
}
String checkoutURL =
response.encodeURL("Checkout");
OrderPage
ShoppingCart
addItem()
getItem()
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 49
Warenkorbsystem: OrderPage
// "Proceed to Checkout" button below table
out.println
("</TABLE>\n" +
"<FORM ACTION=\"" + checkoutURL + "\">\n" +
"<BIG><CENTER>\n" +
"<INPUT TYPE=\"SUBMIT\"\n" +
"
VALUE=\"Proceed to Checkout\">\n" +
"</CENTER></BIG></FORM>");
}
out.println("</BODY></HTML>");
} /** synchronized **
}
OrderPage
ShoppingCart
addItem()
getItem()
Institut für Informatik
Universität Basel
Java Apache XML (JAX)
Lektion 4: Servlets III
www.ifi.unibas.ch/studies
4 - 50
25
Herunterladen