Server-side
Web Programming
Lecture 9:
Shopping Carts and the Model-
View-Control Architecture
1
Modeling the Business Process
• What information should a session deal with?
– What information must be gathered via forms?
• Items to purchase
• Customer information, etc.
– What information must be displayed to the user in response pages?
• Shopping cart contents, etc.
– What information must be stored long term?
• Throughout session
• Longer (in databases, etc.)
• Model of business process
– Defined by organization you develop site for
2
Model-View-Control Architecture
• Model = software classes that store/manipulate
information gathered in session
– Usually separate from servlets/JSPs
– Servlets/JSPs interact with those classes
– Often interact with databases
Store data Classes that
request Control
model
servlet
business
View process
JSP
View
JSP Access and
View display data
response JSP
Database
3
Model Classes and Session
• Bad design:
Store all session information as separate attributes
– May be dozens of attributes
– Servlet/JSP responsible for manipulating each individually
All session data
… …
Session ID = Session data
fieh4K39Rdk name “Fred”
email “fred@aolrock”
… … 4
Model Classes and Session
• Better design:
Create classes for blocks of information
– Store objects as session attributes
– Use class methods to store/access/manipulate data in object
All session data
… …
Session ID = Session data
fieh4K39Rdk customerInfo Customer object
cart Cart object
… … 5
Model Class Properties
• State variables for all information stored
• setVariable methods for each variable
– Takes value as parameter and stores it in state variable
– Usually called by servlet to store data from parameters
• getVariable methods for each variable
– Returns current state variable
– Usually called by JSP to display data stored earlier
These model classes often created by other programmers
– Business logic specialists create model
– Server programming specialists create servlets/JSPs
6
Example Customer Class
7
Creating Support Classes
• File New File
• Choose category Java, type class
8
Creating Support Classes
• As before, enter name
• Tomcat requires support classes to be in a package
– “Library” of related classes
– Can define one at this point (added to drop down in future)
9
Using Model Classes
• Must include package name at top of file
package packagename;
• Other classes that use class must import the package
– Servlets use import statement
– JSPs use <@ page import tag
10
Using Model Classes
In servlet:
• Construct a new instance of the model object
• Use its set methods to store parameters from form
• Store the object as a session attribute
11
Using Model Classes
In JSP:
• Retrieve the object from the session attributes
– Must cast back to its original type
• Use its get methods to retrieve data
• Display the data on the page
12
Business Model Objects
Key idea:
• Methods in model objects should implement business
model
– Methods to validate values
– Methods to perform computations
– Methods to store information in database
Goal:
• Separate web programming and business knowledge as
much as possible
13
Business Model Example
• Order class
– Methods to set/get quantity
– Method to get total cost of order
• Computed from quantity here instead of in JSP/servlet
– Method to check whether quantity valid in terms of
business model
• Servlet makes sure quantity is a number
• Business model class makes sure quantity is at least 1
14
Order Class
15
Validation in Servlet
16
Getting Cost in JSP
17
Shopping Carts
• Usually list of items
– List = Vector or ArrayList type in Java
– Has methods to add new element to end, get ith element, and
remove ith element
• Each list element is business model object
– Has fields for all relevant data about item purchased
• Set and get methods for each
• One field should be unique identifier (key field)
• Some fields populated by database lookup
– May have way to set quantity purchased
• Not all models have quantity – course registration, for example
18
Example “Bookstore” Cart
• Cart: list of Item objects Session ID: 98A6F401BC6393
Cart object
• Each customer has own Cart
object stored in their session Item object
Code: 0001
• Each Item has a unique code Title: Murach's Java Servlets
– Given a code, should look up and JSP
Price: $31.19
other fields in database Quantity: 1
– title and price
Item object
– Not implemented yet! Code: 0003
Title: HTML and XHTML
Pocket Reference
Price: $10.39
Quantity: 2
19
“Bookstore” Cart Methods
Usual methods:
• void addItem(code)
– add a new item to the cart with the given ID
• Item lookup(code)
– Lookup and return the Item in the list with the given ID
• void removeItem(code)
– Lookup and delete the Item in the list with the given ID
• void getItem(int)
– Return the ith Item in the list Used together to loop
• void size() through and show all
Items on “shopping
– Return the number of Items in the list cart” page
20
21
“Bookstore” Cart Methods
“Bookstore” Item Methods
Usual methods:
• Item(code)
– construct a new item
– Look up rest of fields in database based on code
• String get______()
– Return the value of the given field
– For bookstore: code, title, price, cost
• void setQuantity(int)
int getQuantity()
– Since can order multiple copies, need ways to change quantity
22
“Bookstore” Item Methods
23
Displaying Cart Contents
• Get cart from session
• Inside of a table:
– Get number of items in cart
– Use loop to get each item in sequence
• Number of items = length of loop
• Get the ith Item object from the Cart
– Get desired fields of that item
– Create new table row showing those fields
24
Inside table
Size of loop
Get ith item object
Get its fields
Inside loop, create new table
row showing those fields
25
Displaying Cart Contents
26
Displaying Cart Contents
27
Adding to the Cart in a Servlet
28
Adding to the Cart in a Servlet
• Get data from request and pass to Cart
– Cart will construct and store a new Item
– Will need to validate request first
• Will need to check whether item already in Cart
– Need to avoid duplicate entries in Cart
– Business model defines how handled
• Error message
• Change quantity,
• Add to quantity, etc.
29
Adding to the Cart in a Servlet
30
Adding to the Cart in a Servlet
• Can use servlet to modify Cart in other ways
– Example: Remove from Cart if quantity = 0
• Store modified Cart to session using setAttribute
31
Embedded Forms in Cart Pages
• Often embed buttons and other form elements into the
rows of a Cart page
– Example: simple REMOVE button and quantity updates
32
Embedded Forms in Cart Pages
• Must nest entire form inside a <td> element
– Action = servlet to handle desired change to the cart
– Contains SUBMIT button to send request
– Contains form element with data to submit with request
33
Simple Removal Servlet
34
Hidden Form Elements
• Must submit product code for remove to work
• Product code not displayed on page inside a form
element
– Common for most ecommerce pages
Can use hidden form element
• Not shown by browser
• Can store product code or other information that we
need to send to server
<input type=“hidden”
name=“parametername”
value=“<%= product code %>” 35
Hidden Form Elements
productCode read in from
Cart in session and stored in
hidden element inside
removal form
36
Quantity Update Example
37
Quantity Update Example
Pass productCode as hidden field so Also pass new quantity
servlet knows which Item to change entered by user 38
Passing Data using Links
• Many web sites use html links instead of forms
• Question: How can form information (such as product
code) be passed if no form is used?
39
Passing Data using Links
• Can append “form data” directly to URL in link
– Result similar to “get” method in form
• Syntax:
<a href = “url of servlet?name=value&name=value…”>
Submit request to the servlet
Each passed as a name=value
The ‘?’ indicates form pair separated by ‘&’
parameters
– Note: will need to use [Link] to insure this works
if cookies not enabled
<a href = “<%=[Link](‘servleturl? 40
name=value&…’)%>”>
Passing Data using Links
41