Download Ch23

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Chapter 23
The Cart application
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 1
A Product page
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 2
The Quick Order page
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 3
The Cart page
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 4
The User page
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 5
The Invoice page
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 6
The Credit Card page
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 7
The structure of the Cart application
music.cart package
quick_order.jsp
DisplayQuickOrderServlet
cart.jsp
DisplayCartServlet
user.jsp
CheckUserServlet
SSL
ProcessUserServlet
invoice.jsp
DisplayInvoiceServlet
credit_card.jsp
CompleteOrderServlet
complete.jsp
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 8
The DisplayQuickOrderServlet class
package music.cart;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.ArrayList;
import music.business.*;
import music.data.*;
public class DisplayQuickOrderServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
HttpSession session = request.getSession();
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 9
The DisplayQuickOrderServlet class (cont.)
// if list of products doesn't exist, initialize it,
// and store it for the remainder of the session
if (session.getAttribute("products") == null)
{
ArrayList<Product> products =
ProductDB.selectProducts();
session.setAttribute("products", products);
}
// forward to the Quick Order page
String url = "/cart/quick_order.jsp";
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
}
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 10
The code for the Quick Order page
<jsp:include page="/includes/header.html" />
<jsp:include page="/includes/column_left_order.jsp" />
<!-- begin middle column -->
<td width="570" valign="top" colspan="2">
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Quick order an album</h1>
<table cellpadding="5" border="0">
<tr valign="bottom">
<th align="left">Description</th>
<th align="left">Price</th>
<th align="left">&nbsp;</th>
</tr>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 11
The code for the Quick Order page (cont.)
<c:forEach var="product" items="${products}">
<tr valign="top">
<td>
<a href="
<c:url value='/catalog/displayProduct?productCode=
${product.code}'/>">
${product.description}
</a>
</td>
<td>${product.priceCurrencyFormat}</td>
<td>
<a href="
<c:url value='/cart/displayCart?productCode=
${product.code}'/>">
Add To Cart
</a></td>
</tr>
</c:forEach>
</table>
</td>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 12
The code for the Quick Order page (cont.)
<!-- end middle column -->
<jsp:include page="/includes/footer.jsp" />
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 13
The links from a Product page that call the
DisplayCartServlet class
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<a href="<c:url value=
'/cart/displayCart?productCode=${product.code}'/>">
<img src="/musicStore/images/addtocart.gif"
width="113" height="47">
</a><br><br>
<a href="<c:url value='/cart/displayCart'/>">
<img src="/musicStore/images/showcart.gif" width="113"
height="47">
</a><br><br>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 14
The DisplayCartServlet class
package music.cart;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import music.business.*;
import music.data.*;
public class DisplayCartServlet extends HttpServlet
{
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
String quantityString =
request.getParameter("quantity");
String productCode =
request.getParameter("productCode");
String removeButtonValue =
request.getParameter("removeButton");
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 15
The DisplayCartServlet class (cont.)
HttpSession session = request.getSession();
Cart cart = (Cart) session.getAttribute("cart");
if (cart == null)
{
cart = new Cart();
session.setAttribute("cart", cart);
}
// If the user enters a negative or invalid number
// in the Update text box, the quantity is
// automatically reset to 1.
int quantity = 1;
try
{
quantity = Integer.parseInt(quantityString);
if (quantity < 0)
quantity = 1;
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 16
The DisplayCartServlet class (cont.)
catch(NumberFormatException nfe)
{
quantity = 1;
}
// If the user clicks the Remove button
if (removeButtonValue != null)
{
quantity = 0;
}
// Get product from product code
Product product =
ProductDB.selectProduct(productCode);
session.setAttribute("product", product);
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 17
The DisplayCartServlet class (cont.)
// If product exists, add or remove from cart
if (product != null)
{
LineItem lineItem = new LineItem();
lineItem.setProduct(product);
lineItem.setQuantity(quantity);
if (quantity > 0)
cart.addItem(lineItem);
else
cart.removeItem(lineItem);
}
session.setAttribute("cart", cart);
// If no items exist in cart, forward to the Quick
// Order page.Otherwise, forward to the Cart page.
String url = "";
if (cart.getItems().size() <= 0)
{
url = "/cart/displayQuickOrder";
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 18
The DisplayCartServlet class (cont.)
else
{
url = "/cart/cart.jsp";
}
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
doPost(request, response);
}
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 19
The cart.jsp file
<jsp:include page="/includes/header.html" />
<jsp:include page="/includes/column_left_all.jsp" />
<!-- begin middle column -->
<td>
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Your cart</h1>
<form action="<c:url value='/cart/displayCart' />"
method="post">
<table cellspacing="5" border="0">
<tr>
<th align="left">Qty</th>
<th align="left">Description</th>
<th align="left">Price</th>
<th align="left">Amount</th>
</tr>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 20
The cart.jsp file (cont.)
<c:forEach var="item" items="${cart.items}">
<tr valign="top">
<td>
<input type="hidden" name="productCode"
value="${item.product.code}">
<input type="text" size="2" name="quantity"
value="${item.quantity}">
<input type="submit" value="Update">
</td>
<td>${item.product.description}</td>
<td>${item.product.priceCurrencyFormat}</td>
<td>${item.totalCurrencyFormat}</td>
<td><input type="submit" name="removeButton"
value="Remove"></td>
</tr>
</c:forEach>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 21
The cart.jsp file (cont.)
<tr>
<td colspan="3">
<p><b>To change the quantity for an item</b>, enter
the new quantity and click on the Update
button.</p>
<p><b>To remove an item</b>, click on the Remove
button.</p>
</td>
</tr>
</table>
</form>
<form action="<c:url value='/cart/displayQuickOrder' />"
method="post">
<input type="submit" value="Continue Shopping">
</form>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 22
The cart.jsp file (cont.)
<form action=
"<c:url value=
'https://localhost:8443/musicStore/cart/checkUser' />"
method="post">
<input type="submit" value="Checkout">
</form>
<!-- end middle column -->
<jsp:include page="/includes/footer.jsp" />
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 23
The CheckUserServlet class
package music.cart;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import music.business.*;
import music.data.*;
import music.util.*;
public class CheckUserServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
String url = "/cart/user.jsp";
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 24
The CheckUserServlet class (cont.)
// if the User object exists with address1,
// skip User page
if (user != null && !user.getAddress1().equals("") )
{
url = "/cart/displayInvoice";
}
// otherwise, check the email cookie
else
{
Cookie[] cookies = request.getCookies();
String emailAddress =
CookieUtil.getCookieValue(
cookies, "emailCookie");
if (emailAddress.equals(""))
{
user = new User();
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 25
The CheckUserServlet class (cont.)
else
{
user = UserDB.selectUser(emailAddress);
if (user != null &&
!user.getAddress1().equals("") )
url = "/cart/displayInvoice";
}
}
session.setAttribute("user", user);
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
}
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 26
The user.jsp file
<jsp:include page="/includes/header.html" />
<jsp:include page="/includes/column_left_all_absolute.jsp" />
<!-- begin middle column -->
<td>
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Enter your name and contact information</h1>
<form action="<c:url value='/cart/processUser' />"
method=post>
<table border="0" cellpadding="5">
<tr>
<td></td>
<td align=left>Required <font color=red>*</font></td>
</tr>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 27
The user.jsp file (cont.)
<tr>
<td align=right>First Name</td>
<td><input type="text" name="firstName" size="20"
maxlength=20 value="${user.firstName}">
<font color=red>*</font></td>
</tr>
<tr>
<td align=right>Last Name</td>
<td><input type=text name="lastName" size=20
value="${user.lastName}">
<font color=red>*</font></td>
</tr>
.
.
<tr>
<td align=right>Country</td>
<td><input type=text name="country" size=20
value="${user.country}">
<font color=red>*</font></td>
</tr>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 28
The user.jsp file (cont.)
<tr>
<td align=right>&nbsp;</td>
<td><input type="button" value="Continue"
onClick="validate(this.form)"></td>
</tr>
</table>
</form>
</td>
<!-- end middle column -->
<jsp:include page="/includes/footer.jsp" />
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 29
The ProcessUserServlet class
package music.cart;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import music.business.*;
public class ProcessUserServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
String firstName =
request.getParameter("firstName");
String lastName = request.getParameter("lastName");
String companyName =
request.getParameter("companyName");
String emailAddress =
request.getParameter("emailAddress");
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 30
The ProcessUserServlet class (cont.)
String
String
String
String
String
String
address1 = request.getParameter("address1");
address2 = request.getParameter("address2");
city = request.getParameter("city");
state = request.getParameter("state");
zip = request.getParameter("zip");
country = request.getParameter("country");
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
user.setFirstName(firstName);
user.setLastName(lastName);
user.setEmailAddress(emailAddress);
user.setCompanyName(companyName);
user.setAddress1(address1);
user.setAddress2(address2);
user.setCity(city);
user.setState(state);
user.setZip(zip);
user.setCountry(country);
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 31
The ProcessUserServlet class (cont.)
session.setAttribute("user", user);
String url = "/cart/displayInvoice";
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
doGet(request, response);
}
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 32
The DisplayInvoiceServlet class
package music.cart;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import music.business.*;
public class DisplayInvoiceServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
Cart cart = (Cart) session.getAttribute("cart");
java.util.Date today = new java.util.Date();
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 33
The DisplayInvoiceServlet class (cont.)
Invoice invoice = new Invoice();
invoice.setUser(user);
invoice.setInvoiceDate(today);
invoice.setLineItems(cart.getItems());
session.setAttribute("invoice", invoice);
String url = "/cart/invoice.jsp";
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
doGet(request, response);
}
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 34
The invoice.jsp file
<jsp:include page="/includes/header.html" />
<jsp:include page=
"/includes/column_left_all_absolute.jsp" />
<!-- begin middle column -->
<td>
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Your invoice</h1>
<table border="0" cellspacing="5">
<tr><td><b>Date:</b></td>
<td width="400">
${invoice.invoiceDateDefaultFormat}</td>
<td></td>
</tr>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 35
The invoice.jsp file (cont.)
<tr valign="top">
<td><b>Ship To:</b></td>
<td>${user.addressHTMLFormat}</td>
<td></td>
</tr>
<tr><td colspan="3"><hr></td></tr>
<tr><td><b>Qty</b></td>
<td><b>Description</b></td>
<td><b>Price</b></td>
</tr>
<c:forEach var="item" items="${invoice.lineItems}">
<tr>
<td><p>${item.quantity}</td>
<td><p>${item.product.description}</td>
<td><p>${item.totalCurrencyFormat}</td>
</tr>
</c:forEach>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 36
The invoice.jsp file (cont.)
<tr>
<td><b>Total:</b></td>
<td></td>
<td>${invoice.invoiceTotalCurrencyFormat}</td>
</tr>
</table>
<form action="<c:url value='/cart/user.jsp' />"
method="post">
<input type="submit" value="Edit Address">
</form>
<form action="<c:url value='/cart/credit_card.jsp' />"
method="post">
<input type="submit" value="Continue">
</form>
</td>
<!-- end middle column -->
<jsp:include page="/includes/footer.jsp" />
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 37
The creditcard.jsp file
<td>
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Enter your credit card information</h1>
<form action="<c:url value='/cart/completeOrder' />"
method="post">
<table border="0" cellpadding="5">
<tr>
<td align="right"><p>Credit card type</td>
<td><select name="creditCardType" size="1">
<option value="Visa">Visa</option>
<option value="Mastercard">Mastercard</option>
<option value="AmEx">American Express</option>
</select>
</td>
</tr>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 38
The creditcard.jsp file (cont.)
<tr>
<td align="right">Card number</td>
<td><input type="text" size="20"
name="creditCardNumber"
maxlength="25"></td>
</tr>
<tr>
<td align="right"><p>Expiration date (mm/yyyy)</td>
<td><select name="creditCardExpirationMonth">
<option value="01">01
<option value="02">02
<option value="03">03
<option value="04">04
<option value="05">05
<option value="06">06
<option value="07">07
<option value="08">08
<option value="09">09
<option value="10">10
<option value="11">11
<option value="12">12
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 39
The creditcard.jsp file (cont.)
</select>
/
<select name="creditCardExpirationYear">
<c:forEach var="year"
items="${creditCardYears}">
<option value="${year}">${year}
</c:forEach>
</select>
</td>
</tr>
<tr>
<td></td>
<td align="left">
<input type="submit" value="Submit Order"></td>
</tr>
</table>
</form>
</td>
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 40
The CompleteOrderServlet class
package music.cart;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import javax.mail.*;
import music.business.*;
import music.data.*;
import music.util.*;
public class CompleteOrderServlet extends HttpServlet
{
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
HttpSession session = request.getSession();
User user = (User)session.getAttribute("user");
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 41
The CompleteOrderServlet class (cont.)
Invoice invoice =
(Invoice)session.getAttribute("invoice");
String creditCardType =
request.getParameter("creditCardType");
String creditCardNumber =
request.getParameter("creditCardNumber");
String creditCardExpMonth = request.getParameter(
"creditCardExpirationMonth");
String creditCardExpYear = request.getParameter(
"creditCardExpirationYear");
user.setCreditCardType(creditCardType);
user.setCreditCardNumber(creditCardNumber);
user.setCreditCardExpirationDate(creditCardExpMonth
+ "/" + creditCardExpYear);
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 42
The CompleteOrderServlet class (cont.)
// If a record for the User object exists, update it
if (UserDB.emailExists(user.getEmailAddress()))
{
UserDB.update(user);
}
// Otherwise, write a new record for the User object
else
{
UserDB.insert(user);
}
// Write a new invoice record
InvoiceDB.insert(invoice);
// Set the emailCookie in the user's browser.
Cookie emailCookie = new Cookie("emailCookie",
user.getEmailAddress());
emailCookie.setMaxAge(60*24*365*2*60);
emailCookie.setPath("/");
response.addCookie(emailCookie);
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 43
The CompleteOrderServlet class (cont.)
// Remove all items from the user's cart
Cart cart = (Cart) session.getAttribute("cart");
cart.setItems(new ArrayList<LineItem>());
// Send an email to the user to confirm the order.
String to = user.getEmailAddress();
String from = "[email protected]";
String subject = "Order Confirmation";
String body =
"Dear " + user.getFirstName() + ",\n\n" +
"Thanks for ordering from us. " +
"You should receive your order in " +
"3-5 business days. " +
"Please contact us if you have any questions.\n" +
"Have a great day and thanks again!\n\n" +
"Joe King\n" +
"Fresh Corn Records";
boolean isBodyHTML = false;
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 44
The CompleteOrderServlet class (cont.)
try
{
MailUtil.sendMail(
to, from, subject, body, isBodyHTML);
}
catch(MessagingException e)
{
this.log(
"Unable to send email. \n" +
"You may need to configure your system as " +
"described in chapter 15. \n" +
"Here is the email you tried to send: \n" +
"=====================================\n" +
"TO: " + to + "\n" +
"FROM: " + from + "\n" +
"SUBJECT: " + subject + "\n" +
"\n" +
body + "\n\n");
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 45
The CompleteOrderServlet class (cont.)
String url = "/cart/complete.jsp";
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
}
Murach’s Java Servlets/JSP (2nd Ed.), C23
© 2008, Mike Murach & Associates, Inc.
Slide 46
Related documents