O'Reilly logo

Practical Internet Groupware by Jon Udell

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

The Polls Servlet

As we saw in Chapter 4, the Polls servlet presents a simple web API used to create a new instance of a poll, cast votes, and view the tally. Table 10.1 illustrates the Polls API.

Table 10-1. The Polls Servlet’s Web API

Action

URL

Create a new poll

/Polls?name=Picnic99&1=Sat+June+12&2=Sat+June+19&3=Sun+June+20

Cast a vote

/Polls?name=Picnic99&vote=Sun+June+20

View the tally

/Polls?name=Picnic99&tally=

At the heart of Polls is a Java hash-of-hashes (HoH)—that is, a Java Hashtable whose keys are the names of poll instances (such as Picnic99) and whose values are hashtables. The keys of each interior hashtable are the names of the choices in that poll (e.g., “Sat June 19”), and the values count the votes for each of these choices. Table 10.2 depicts these structures.

Table 10-2. The Polls Servlet’s Central Data Structure

Key: poll name

Value: Hashtable

Picnic99

key: choice name

value: vote count

 

Sat June 12

12

 

Sat June 19

5

 

Sun June 20

14

Preferred HMO

Tufts

3

 

Matthew Thornton

11

 

Harvard Pilgrim

7

In Perl, as in Java, it’s easy to create this kind of HoH. But a Perl CGI script can’t so easily meet the following requirements:

  • Retain the object in memory across multiple invocations of the script.

  • Protect the object from concurrent use by multiple clients.

  • Retrieve the object from disk at start-up and keep the in-memory version synched with the on-disk version as updates occur.

Larry Wall likes to say that Perl aims to makes easy ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required