This version is very crude; it is all written as a Servlet, as we'd have done it in 1998 when Servlets were new and there was nothing better.
This version also lacks any error checking, so that, for example, omitting required parameters throws a NullPointerException.