# 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 URL is `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 interface `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.

If no `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 `xs:untypedAtomic` strings (which will be converted to the declared type of the variable if necessary, provided that the code was compiled using the `-untyped` option). Any query parameters that do not correspond to declared external variables in the query will be ignored.

Next