Running a Compiled Query as a Servlet
If a query has been compiled as a servlet, the class file should be installed in the relevant application
directory of the servlet container, and registered in the
web.xml configuration file
in the normal way.
The query can then be invoked using an HTTP GET request using the name assigned to the servlet
in the configuration file
By default (see below) it is possible to specify query parameters in the URL used to invoke the query. For example if the
http://localhost:8080/servet/qexample?x=10&y=20, and if the query body declares external variables
$x and $y, then these will be initialized to the values 10 and 20.
The query output will be serialized and written to the HTTP response stream. Serialization parameters
can be written within the query using the
saxon:output option declaration.
When you compile a query as a servlet, the Java class generated will extend
com.saxonica.deploy.CompiledQueryServlet. Alternatively, you can nominate a superclass for the
generated code, which should itself subclass
CompiledQueryServlet, giving you more control
over the behavior of the servlet, for example the way in which parameters are supplied. This is particularly
useful if different servlets are to share resources such as access to in-memory documents.
During servlet initialization, the init() method attempts to determine whether the servlet context
includes an attribute named
com.saxonica.servlet.applicationdata that is an instance of the
SharedApplicationDataHandler. If this object exists, it is called on each servlet
request, at which
point it has the opportunity to configure the
Controller for the query execution,
for example by supplying
parameter values, setting a
URIResolver, or otherwise.
SharedApplicationDataHandler object is available, external variables for the query can be specified
as query parameters in the request URL. The names of query parameters are taken as local names of no-namespace
variables, and the values are treated as UntypedAtomic strings (which will be converted to the declared type
of the variable if necessary). Any query parameters that do not correspond to declared external variables in
the query will be ignored.