PS: the best hack I can think of so far is:
1. Have a single static variable which is some object.
2. Have the main service() method of the servlet wait() on that object's monitor
3. When servicing is complete, notify()
So, I will have some (possibly huge depending upon how crap the J2EE container is) number of instances of each servlet, but they will be stuck on monitors and only one will be allowed to execute at once. My experience of monitors these days is that they're fast enough that this should not impact performance too much even under high load
...but life would be much easier if there were some feature in J2EE that I could invoke to prevent this wasteful blocking

.