The "Customer Lookup" application
To show how these principles work, let's create a small, simple
"lookup-customer" application. It consists of a single page where you
enter the customer's ID, push a button and consequently get the data
for the customer (name and address in our example).
It's a good idea to let the controller- and view-files have
similar names. We'll call our controller ctrlcustomerinfo.jsp and the
view customerinfo.jsp. To prefix with "ctrl" is yet another standard
that's useful to follow.
The "Customer" JavaBean
We'll need a single bean to get customer data from a database. It
will contain these methods:
|
Method syntax
|
Purpose
|
|
void setCustomerID(String id)
|
set the ID of the customer
|
|
int readCustomerInfo()
|
read the data for the customer. Return the number one if the
customer was found, else zero.
|
|
String getCustomerName()
|
get the name of the customer
|
|
String getCustomerAddress()
|
get the address of the customer
|
If you look at the code for the
JavaBean, you'll see that for simplicity the data base access has
been left out, and replaced by some simple logic that will return
data for ID-values of 1 and 2 only.
Commands to the controller
It might seem that there is only one command to this page, namely
the one that initiates the fetch for customer data. But many pages
also need an "initial" command simply to put up the page the first
time it's shown. So does our page. This gives us these commands:
The "prompt" command doesn't do much--it shows the page with a
message asking the user to enter an ID.
The "getdata" command will do this:
- get the customer ID from the form
- invoke a bean to get the customer data
- check if data was returned
- setup an appropriate message
Generally, if the controller receives a command that it does not
recognize, it should treat it as system error, and handle it
accordingly. This could be by throwing an exception, showing an
"Application Error" page to the user, or whatever has been decided as
the standard way of handling system errors. In our small application
we will simply throw an exception with an informative message, which
will end up on the common error page.
The structure of the JSP-controller
With the above principles in mind the controller ends up looking
like this:
<%@ page import="java.util.*" %>
<%@ page errorPage="error.jsp" %>
<jsp:useBean id="customer" class="hansen.playground.Customer" scope="request" />
<%@ include file = "util.inc" %> // contains "cString"
<%String url = request.getRequestURI(); // name of this file
// get command
String command = cString(request.getParameter("command"));
if (command.equals("prompt")) {
// prompt user for the id
session.putValue("customerinfo.message","");
} else if (command.equals("getdata")) {
// let the bean fetch data for this customer
String id = cString(request.getParameter("id"));
customer.setId(id);
if (customer.readCustomerInfo() == 1) {
// id found
session.putValue("customerinfo.message","Customer found");
} else {
session.putValue("customerinfo.message","Customer not found");
}
} else if (command.equals("")) throw new Exception("No command given to "+url);
else throw new Exception("Invalid command (" + command + ") given to "+url);
pageContext.forward("customerinfo.jsp"); %>
The file "util.inc" contains the utility
method "cString" mentioned earlier.
The exceptions thrown for invalid or missing commands are caught
by the error-page.
Note, that the controller should never contain HTML-code or
anything else submitted to the browser. It's a good, general
principle that the controller should not deal with the presentation
of data.
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.