I have been trying to work on a personal project which simulates on-line purchasing of books for days. This project does not use a database and this bookstore only has three books. The information about these three books are provided in a file called Catalog.jsp. After many attempts, I have decided to declare that my knowledge about
JSP is too limited. I just cannot figure out the puzzle. And here I am to ask for help. (All my JSP pages are in the "bookstore" subdirectory, and will be listed following a short description of what I am doing. Then, I am going to show the error messages. The problems are that I do not know exactly what to do with several JSP pages involved.) I know that I am throwing something big at you, but I do not know what to do.
Description of what I am doing:
The first page (HomePage.jsp) is a very simple HTML like page which gives users three categories of books to select. In case that a user chooses to view the category of children's books, "CatalogPage.jsp" declares an array of item IDs, looks them up by means of a bean "Item.jsp" in the "Catalog.jsp" and put their corresponding Item entry into the items array. The Item contains a short description and a price, using the item ID as the unique key. Please bear with me. I am going to present my source codes:
HomePage.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Home Page of the Bookstore</title></head>
<body BGCOLOR="#FDF5E6" ALINK="#52B552" VLINK="#299C39" LINK="#218429">
<CENTER><H1><FONT COLOR="#218429">Welcome to the On-Line Bookstore</FONT></H1></CENTER>
<CENTER><H3><FONT COLOR="#218429">Classification of Our Books</FONT></H3></CENTER>
<CENTER>
<TABLE>
<UL>
<TR><TD><LI TYPE=disc><STRONG><FONT SIZE="3"><A href="/bookstore/KidsBooksPage.jsp">Children</A></FONT></STRONG></LI></TD></TR>
<TR><TD><LI TYPE=disc><STRONG><FONT SIZE="3"><A href="/bookstore/TechBooksPage.jsp">Internet Technology</A></FONT></STRONG></LI></TD></TR>
<TR><TD><LI TYPE=disc><STRONG><FONT SIZE="3"><A href="/bookstore/ScFicBooksPage.jsp">Science Fiction</A></FONT></STRONG></LI></TD></TR>
</UL>
</TABLE>
</CENTER>
</body></html>
KidsBooksPage.jsp initializes the IDs of book items and CatalogPage.jsp looks those IDs up in the Catalog.jsp, and prints the info about the books in the browser window.
KidsBooksPage.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>This Page Provides ID of Three Children's Books</TITLE>
</HEAD>
<BODY>
<%--
/** This class "extends" CatalogPage.jsp that
* displays a destination page listing three famous kids-book
* series. Orders will be sent to the OrderPage.jsp.
* <P>
*/
--%>
<%@ page extends="CatalogPage" %>
<%!
String[] ids = { "lewis001", "alexander001", "rowling001" };
setItems(ids);
setTitle("All-Time Best Children's Fantasy Books");
%>
</BODY>
</HTML>
CatalogPage.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Catalog Page Provides a List of Books in Each Category</TITLE>
</HEAD>
<% page import="
java.io.*,
javax.servlet.*,
javax.servlet.http.*,
java.util.*,
bookstore.*"
%>
<%!
private Item[] items;
private String[] itemIDs;
private String title;
%>
<%--
/** Given an array of item IDs, look them up in the
* Catalog and put their corresponding Item entry
* into the items array. The Item contains a short
* description, and a price,
* using the item ID as the unique key.
* <P>
*/
--%>
<%
<jsp:useBean id="item"
class="bookstore.Item"
scope="session" />
<jsp:getProperty name="item" property="items" />
<jsp:getProperty name="item" property="title" />
protected void setItems(String[] itemIDs) {
this.itemIDs = itemIDs;
items = new Item[itemIDs.length];
for(int i=0; i<items.length; i++) {
items[i] = Catalog.getItem(itemIDs[i]);
}
}
protected void setTitle(String title) {
this.title = title;
}
%>
<%--
/** First display title, then, for each catalog item,
* put its short description in a level-two (H2) heading
* with the price in parentheses. Below each entry, put an
* order button that submits info to the OrderPage.jsp for
* the associated catalog entry.
* <P>
*/
--%>
<% response.setContentType("text/html"); %>
<% if (items == null) {
response.sendError(response.SC_NOT_FOUND,
"Missing Items.");
return;
}
%>
<BODY BGCOLOR="#FDF5E6" ALINK="#52B552" VLINK="#299C39" LINK="#218429">
<H1 ALIGN="CENTER"><%= title %></H1>
<%!
Item item;
%>
<%
for(int i=0; i<items.length; i++) {
%>
<HR>
<%
item = items[i];
// Show error message if subclass lists item ID
// that's not in the catalog.
if (item == null) {
%>
<FONT COLOR="RED">Unknown item ID <%= itemIDs[i] %></FONT>
<% } else {
%>
<P>
<%
String formURL =
"OrderPage";
// Pass URLs that reference own site through encodeURL.
formURL = response.encodeURL(formURL);
%>
<FORM ACTION="<%= formURL %>">
<INPUT TYPE="HIDDEN" NAME="itemID" VALUE="<%= item.getItemID() %>">
<CENTER><H3><%= item.getShortDescription() %></H3></CENTER>
<P><CENTER>
<B><FONT SIZE="3"><A href="<%= item.getItemID() %>">View The Description of the Book</A></FONT></B></CENTER>
<P><CENTER>
<INPUT TYPE="SUBMIT" VALUE="Add to Checkout Cart">
</CENTER><P>
</FORM>
<%
}
}
%>
<HR>
</BODY>
</HTML>
The CatalogPage.jsp looks IDs up by means of a bean "Item.jsp"
Item.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>The itemID uniquely identifies the item</TITLE>
</HEAD>
<BODY>
<%--
/** Describes a catalog item for on-line store. The itemID
* uniquely identifies the item, the short description
* gives brief info like the book title and author,
* the long description describes the item in a couple
* of sentences, and the cost gives the current per-item price.
* Both the short and long descriptions can contain HTML
* markup.
* <P>
*/
--%>
<%!
private String itemID;
private String shortDescription;
private String longDescription;
private double cost;
%>
<%--
A bean class must have a zero-argument constructor
--%>
<%
public Item() {}
public Item(String itemID, String shortDescription,
String longDescription, double cost) {
setItemID(itemID);
setShortDescription(shortDescription);
setLongDescription(longDescription);
setCost(cost);
}
public String getItemID() {
return(itemID);
}
protected void setItemID(String itemID) {
this.itemID = itemID;
}
public String getShortDescription() {
return(shortDescription);
}
protected void setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
}
public String getLongDescription() {
return(longDescription);
}
protected void setLongDescription(String longDescription) {
this.longDescription = longDescription;
}
public double getCost() {
return(cost);
}
protected void setCost(double cost) {
this.cost = cost;
}
%>
</BODY>
</HTML>
Catalog.jsp is where the information about the three children's books is provided:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>This file is a database that provides the information about all books in the library</TITLE>
</HEAD>
<BODY>
<%--
/** A catalog listing the items available in inventory.
* <P>
*/
--%>
<%!
private static Item[] items =
{ new Item("lewis001",
"<I>The Chronicles of Narnia</I> by C.S. Lewis",
"The classic children's adventure pitting " +
"Aslan the Great Lion and his followers\n" +
"against the White Witch and the forces " +
"of evil. Dragons, magicians, quests, \n" +
"and talking animals wound around a deep " +
"spiritual allegory. Series includes\n" +
"<I>The Magician's Nephew</I>,\n" +
"<I>The Lion, the Witch and the " +
"Wardrobe</I>,\n" +
"<I>The Horse and His Boy</I>,\n" +
"<I>Prince Caspian</I>,\n" +
"<I>The Voyage of the Dawn " +
"Treader</I>,\n" +
"<I>The Silver Chair</I>, and \n" +
"<I>The Last Battle</I>.",
19.95),
new Item("alexander001",
"<I>The Prydain Series</I> by Lloyd Alexander",
"Humble pig-keeper Taran joins mighty " +
"Lord Gwydion in his battle against\n" +
"Arawn the Lord of Annuvin. Joined by " +
"his loyal friends the beautiful princess\n" +
"Eilonwy, wannabe bard Fflewddur Fflam," +
"and furry half-man Gurgi, Taran discovers " +
"courage, nobility, and other values along\n" +
"the way. Series includes\n" +
"<I>The Book of Three</I>,\n" +
"<I>The Black Cauldron</I>,\n" +
"<I>The Castle of Llyr</I>,\n" +
"<I>Taran Wanderer</I>, and\n" +
"<I>The High King</I>.",
19.95),
new Item("rowling001",
"<I>The Harry Potter Trilogy</I> by " +
"J.K. Rowling",
"The first three of the popular stories " +
"about wizard-in-training Harry Potter\n" +
"topped both the adult and children's " +
"best-seller lists. Series includes\n" +
"<I>Harry Potter and the " +
"Sorcerer's Stone</I>,\n" +
"<I>Harry Potter and the " +
"Chamber of Secrets</I>, and\n" +
"<I>Harry Potter and the " +
"Prisoner of Azkaban</I>.",
25.95)
};
%>
<%
public static Item getItem(String itemID) {
%>
<%!
Item item;
%>
<%
if (itemID == null) {
return(null);
}
for(int i=0; i<items.length; i++) {
item = items[i];
if (itemID.equals(%><%= item.getItemID() %><%)) {
return(item);
}
}
return(null);
}
%>
</BODY>
</HTML>
Error Messages:
Compilation of 'C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java' failed:
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:45: invalid method declaration; return type required
probably occurred due to an error in /bookstore/KidsBooksPage.jsp line 19:
setItems(ids);
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:45: expected
probably occurred due to an error in /bookstore/KidsBooksPage.jsp line 19:
setItems(ids);
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:45: ')' expected
probably occurred due to an error in /bookstore/KidsBooksPage.jsp line 19:
setItems(ids);
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:46: invalid method declaration; return type required
probably occurred due to an error in /bookstore/KidsBooksPage.jsp line 20:
setTitle("All-Time Best Children's Fantasy Books");
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:46: illegal start of type
probably occurred due to an error in /bookstore/KidsBooksPage.jsp line 20:
setTitle("All-Time Best Children's Fantasy Books");
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:46: expected
probably occurred due to an error in /bookstore/KidsBooksPage.jsp line 20:
setTitle("All-Time Best Children's Fantasy Books");
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:39: cannot resolve symbol
(No more information available, probably caused by another error)
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:45: cannot resolve symbol
probably occurred due to an error in /bookstore/KidsBooksPage.jsp line 19:
setItems(ids);
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:50: cannot resolve symbol
(No more information available, probably caused by another error)
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:63: cannot resolve symbol
(No more information available, probably caused by another error)
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:65: incompatible types
(No more information available, probably caused by another error)
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:68: getPageContext(javax.servlet.Servlet,javax.servlet.ServletRequest,javax.servlet.ServletResponse,java.lang.String,boolean,int,boolean) in javax.servlet.jsp.JspFactory cannot be applied to (jsp_servlet._bookstore._kidsbookspage,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,,boolean,int,boolean)
(No more information available, probably caused by another error)
C:\weblogic\myserver\classfiles\jsp_servlet\_bookstore\_kidsbookspage.java:86: cannot resolve symbol
(No more information available, probably caused by another error)
Wed Feb 28 23:00:15 EST 2001