![]() Version: 9.3.9.v20160517 |
private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ... scalability guidance for your apps and Ajax/Comet projects ... development services for sponsored feature development
Jetty is built around an extensible Deployment Manager architecture complete with formal LifeCycle for Web Applications going through it.
For Jetty to serve content (static or dynamic), you need to create a
ContextHandler
and add it to Jetty in the appropriate place. A pluggable
DeploymentManager exists in Jetty 7 and later to make this process
easier. The Jetty distribution contains example DeploymentManager
configurations to deploy WAR files found in a directory to Jetty, and to
deploy Jetty context.xml files into Jetty as well.
The DeploymentManager is the heart of the typical webapp deployment mechanism; it operates as a combination of an Application LifeCycle Graph, Application Providers that find and provide Applications into the Application LifeCycle Graph, and a set of bindings in the graph that control the deployment process.

Before Jetty deploys an application, an AppProvider identifies the App and then provides it to the DeploymentManager. The main AppProvider with the Jetty distribution is the WebAppProvider.
The core feature of the DeploymentManager is the Application LifeCycle Graph.

The nodes and edges of this graph are pre-defined in Jetty along the most common actions and states found. These nodes and edges are not hardcoded; you can adjust and add to them depending on your needs (for example, any complex requirements for added workflow, approvals, staging, distribution, coordinated deploys for a cluster or cloud, etc.).
New applications enter this graph at the Undeployed node, and the
java.lang.String DeploymentManager.requestAppGoal(App,String)
method pushes them through the graph.
A set of default
AppLifeCycle.Bindings
defines standard behavior, and handles deploying, starting, stopping,
and undeploying applications. If you choose, you can write your own
AppLifeCycle.Bindings and assign them to anywhere on the Application
LifeCycle graph.
Examples of new AppLifeCycle.Binding implementations that you can
write include:
There are four default bindings:

A fifth, non-standard binding, called Debug Binding, is also available for debugging reasons; It logs the various transitions through the Application LifeCycle.
The WebAppProvider is for the deployment of Web Applications packaged as WAR files, expanded as a directory, or declared in a Jetty Deployable Descriptor XML File. It supports hot (re)deployment.
The basic operation of the WebAppProvider is to periodically scan a
directory for deployables. In the standard Jetty Distribution, this is
configured in the ${jetty.home}/etc/jetty-deploy.xml file.
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Call name="addBean">
<Arg>
<New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
<Set name="contexts">
<Ref refid="Contexts" />
</Set>
<Call id="webappprovider" name="addAppProvider">
<Arg>
<New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
<Set name="monitoredDirName"><Property name="jetty.home" default="." />/webapps</Set>
<Set name="defaultsDescriptor"><Property name="jetty.home" default="." />/etc/webdefault.xml</Set>
<Set name="scanInterval">1</Set>
<Set name="extractWars">true</Set>
</New>
</Arg>
</Call>
</New>
</Arg>
</Call>
</Configure>The above configuration will create a DeploymentManager tracked as a Server LifeCycle Bean, with the following configuration.
id="Contexts" found in the
${jetty.home}/etc/jetty.xml file, which itself is an instance of
ContextHandlerCollection.Is a file path or URL to the directory to scan for web applications. + Scanning follows these rules: +
".") are ignored".d" are ignored."CVS" and "CVSROOT" are ignored*.war files are considered
automatic deployables*.xml files are considered
context descriptor deployablesroot.war/ROOT.war or directory name root/ROOT will result in a
deployment to the "/" context path./WEB-INF/web.xml is applied. The ${jetty.home}/etc/webdefault.xml
that comes with the Jetty distribution controls the configuration of
the JSP and Default servlets, along with mimetypes and other basic
metadata.monitoredDirName for
changes: new contexts to deploy, changed contexts to redeploy, or
removed contexts to undeploy.