<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Application Developer's Guide (6.0.39) - Deployment</title><meta name="author" content="Craig R. McClanahan"><style type="text/css" media="print"> | |
.noPrint {display: none;} | |
td#mainBody {width: 100%;} | |
</style></head><body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"><table border="0" width="100%" cellspacing="0"><!--PAGE HEADER--><tr><td><!--PROJECT LOGO--><a href="http://tomcat.apache.org/"><img src="../images/tomcat.gif" align="right" alt=" | |
The Apache Tomcat Servlet/JSP Container | |
" border="0"></a></td><td><h1><font face="arial,helvetica,sanserif">Apache Tomcat 6.0</font></h1><font face="arial,helvetica,sanserif">Version 6.0.39, Jan 27 2014</font></td><td><!--APACHE LOGO--><a href="http://www.apache.org/"><img src="../images/asf-logo.gif" align="right" alt="Apache Logo" border="0"></a></td></tr></table><table border="0" width="100%" cellspacing="4"><!--HEADER SEPARATOR--><tr><td colspan="2"><hr noshade="noshade" size="1"></td></tr><tr><!--LEFT SIDE NAVIGATION--><td width="20%" valign="top" nowrap="nowrap" class="noPrint"><p><strong>Links</strong></p><ul><li><a href="../index.html">Docs Home</a></li></ul><p><strong>Contents</strong></p><ul><li><a href="index.html">Contents</a></li><li><a href="introduction.html">Introduction</a></li><li><a href="installation.html">Installation</a></li><li><a href="deployment.html">Deployment</a></li><li><a href="source.html">Source Code</a></li><li><a href="processes.html">Processes</a></li><li><a href="sample/">Example App</a></li></ul></td><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left" id="mainBody"><h1>Application Developer's Guide</h1><h2>Deployment</h2><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Table of Contents"><!--()--></a><a name="Table_of_Contents"><strong>Table of Contents</strong></a></font></td></tr><tr><td><blockquote> | |
<ul><li><a href="#Background">Background</a></li><li><a href="#Standard_Directory_Layout">Standard Directory Layout</a></li><li><a href="#Shared_Library_Files">Shared Library Files</a></li><li><a href="#Web_Application_Deployment_Descriptor">Web Application Deployment Descriptor</a></li><li><a href="#Tomcat_Context_Descriptor">Tomcat Context Descriptor</a></li><li><a href="#Deployment_With_Tomcat_6">Deployment With Tomcat 6</a></li></ul> | |
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Background"><strong>Background</strong></a></font></td></tr><tr><td><blockquote> | |
<p>Before describing how to organize your source code directories, | |
it is useful to examine the runtime organization of a web application. | |
Prior to the Servlet API Specification, version 2.2, there was little | |
consistency between server platforms. However, servers that conform | |
to the 2.2 (or later) specification are required to accept a | |
<em>Web Application Archive</em> in a standard format, which is discussed | |
further below.</p> | |
<p>A web application is defined as a hierarchy of directories and files | |
in a standard layout. Such a hierarchy can be accessed in its "unpacked" | |
form, where each directory and file exists in the filesystem separately, | |
or in a "packed" form known as a Web ARchive, or WAR file. The former format | |
is more useful during development, while the latter is used when you | |
distribute your application to be installed.</p> | |
<p>The top-level directory of your web application hierarchy is also the | |
<em>document root</em> of your application. Here, you will place the HTML | |
files and JSP pages that comprise your application's user interface. When the | |
system administrator deploys your application into a particular server, he | |
or she assigns a <em>context path</em> to your application (a later section | |
of this manual describes deployment on Tomcat). Thus, if the | |
system administrator assigns your application to the context path | |
<code>/catalog</code>, then a request URI referring to | |
<code>/catalog/index.html</code> will retrieve the <code>index.html</code> | |
file from your document root.</p> | |
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Standard Directory Layout"><!--()--></a><a name="Standard_Directory_Layout"><strong>Standard Directory Layout</strong></a></font></td></tr><tr><td><blockquote> | |
<p>To facilitate creation of a Web Application Archive file in the required | |
format, it is convenient to arrange the "executable" files of your web | |
application (that is, the files that Tomcat actually uses when executing | |
your app) in the same organization as required by the WAR format itself. | |
To do this, you will end up with the following contents in your | |
application's "document root" directory:</p> | |
<ul> | |
<li><strong>*.html, *.jsp, etc.</strong> - The HTML and JSP pages, along | |
with other files that must be visible to the client browser (such as | |
JavaScript, stylesheet files, and images) for your application. | |
In larger applications you may choose to divide these files into | |
a subdirectory hierarchy, but for smaller apps, it is generally | |
much simpler to maintain only a single directory for these files. | |
<br><br></li> | |
<li><strong>/WEB-INF/web.xml</strong> - The <em>Web Application Deployment | |
Descriptor</em> for your application. This is an XML file describing | |
the servlets and other components that make up your application, | |
along with any initialization parameters and container-managed | |
security constraints that you want the server to enforce for you. | |
This file is discussed in more detail in the following subsection. | |
<br><br></li> | |
<li><strong>/WEB-INF/classes/</strong> - This directory contains any Java | |
class files (and associated resources) required for your application, | |
including both servlet and non-servlet classes, that are not combined | |
into JAR files. If your classes are organized into Java packages, | |
you must reflect this in the directory hierarchy under | |
<code>/WEB-INF/classes/</code>. For example, a Java class named | |
<code>com.mycompany.mypackage.MyServlet</code> | |
would need to be stored in a file named | |
<code>/WEB-INF/classes/com/mycompany/mypackage/MyServlet.class</code>. | |
<br><br></li> | |
<li><strong>/WEB-INF/lib/</strong> - This directory contains JAR files that | |
contain Java class files (and associated resources) required for your | |
application, such as third party class libraries or JDBC drivers.</li> | |
</ul> | |
<p>When you install an application into Tomcat (or any other | |
2.2/2.3-compatible server), the classes in the <code>WEB-INF/classes/</code> | |
directory, as well as all classes in JAR files found in the | |
<code>WEB-INF/lib/</code> directory, are made visible to other classes | |
within your particular web application. Thus, if | |
you include all of the required library classes in one of these places (be | |
sure to check licenses for redistribution rights for any third party libraries | |
you utilize), you will simplify the installation of your web application -- | |
no adjustment to the system class path (or installation of global library | |
files in your server) will be necessary.</p> | |
<p>Much of this information was extracted from Chapter 9 of the Servlet | |
API Specification, version 2.3, which you should consult for more details.</p> | |
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Shared Library Files"><!--()--></a><a name="Shared_Library_Files"><strong>Shared Library Files</strong></a></font></td></tr><tr><td><blockquote> | |
<p>Like most servlet containers, Tomcat 6 also supports mechanisms to install | |
library JAR files (or unpacked classes) once, and make them visible to all | |
installed web applications (without having to be included inside the web | |
application itself). The details of how Tomcat locates and shares such | |
classes are described in the | |
<a href="../class-loader-howto.html">Class Loader HOW-TO</a> documentation. | |
The location commonly used within a Tomcat 6 installation for shared code is | |
<strong>$CATALINA_HOME/lib</strong>. JAR files placed here are visible both to | |
web applications and internal Tomcat code. This is a good place to put JDBC | |
drivers that are required for both your application or internal Tomcat use | |
(such as for a JDBCRealm).</p> | |
<p>Out of the box, a standard Tomcat 6 installation includes a variety | |
of pre-installed shared library files, including:</p> | |
<ul> | |
<li>The <em>Servlet 2.5</em> and <em>JSP 2.1</em> APIs that are fundamental | |
to writing servlets and JavaServer Pages.<br><br></li> | |
</ul> | |
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Web Application Deployment Descriptor"><!--()--></a><a name="Web_Application_Deployment_Descriptor"><strong>Web Application Deployment Descriptor</strong></a></font></td></tr><tr><td><blockquote> | |
<p>As mentioned above, the <code>/WEB-INF/web.xml</code> file contains the | |
Web Application Deployment Descriptor for your application. As the filename | |
extension implies, this file is an XML document, and defines everything about | |
your application that a server needs to know (except the <em>context path</em>, | |
which is assigned by the system administrator when the application is | |
deployed).</p> | |
<p>The complete syntax and semantics for the deployment descriptor is defined | |
in Chapter 13 of the Servlet API Specification, version 2.3. Over time, it | |
is expected that development tools will be provided that create and edit the | |
deployment descriptor for you. In the meantime, to provide a starting point, | |
a <a href="web.xml.txt">basic web.xml file</a> | |
is provided. This file includes comments that describe the purpose of each | |
included element.</p> | |
<p><strong>NOTE</strong> - The Servlet Specification includes a Document | |
Type Descriptor (DTD) for the web application deployment descriptor, and | |
Tomcat 6 enforces the rules defined here when processing your application's | |
<code>/WEB-INF/web.xml</code> file. In particular, you <strong>must</strong> | |
enter your descriptor elements (such as <code><filter></code>, | |
<code><servlet></code>, and <code><servlet-mapping></code> in | |
the order defined by the DTD (see Section 13.3).</p> | |
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Tomcat Context Descriptor"><!--()--></a><a name="Tomcat_Context_Descriptor"><strong>Tomcat Context Descriptor</strong></a></font></td></tr><tr><td><blockquote> | |
<p>A /META-INF/context.xml file can be used to define Tomcat specific | |
configuration options, such as an access log, data sources, session manager | |
configuration and more. This XML file must contain one Context element, which | |
will be considered as if it was the child of the Host element corresponding | |
to the Host to which the web application is being deployed. The | |
<a href="../config/index.html">Tomcat configuration documentation</a> contains | |
information on the Context element.</p> | |
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Deployment With Tomcat 6"><!--()--></a><a name="Deployment_With_Tomcat_6"><strong>Deployment With Tomcat 6</strong></a></font></td></tr><tr><td><blockquote> | |
<blockquote><em> | |
<p>The description below uses the variable name $CATALINA_BASE to refer the | |
base directory against which most relative paths are resolved. If you have | |
not configured Tomcat 6 for multiple instances by setting a CATALINA_BASE | |
directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME, | |
the directory into which you have installed Tomcat 6.</p> | |
</em></blockquote> | |
<p>In order to be executed, a web application must be deployed on | |
a servlet container. This is true even during development. | |
We will describe using Tomcat 6 to provide the execution environment. | |
A web application can be deployed in Tomcat by one of the following | |
approaches:</p> | |
<ul> | |
<li><em>Copy unpacked directory hierarchy into a subdirectory in directory | |
<code>$CATALINA_BASE/webapps/</code></em>. Tomcat will assign a | |
context path to your application based on the subdirectory name you | |
choose. We will use this technique in the <code>build.xml</code> | |
file that we construct, because it is the quickest and easiest approach | |
during development. Be sure to restart Tomcat after installing or | |
updating your application. | |
<br><br></li> | |
<li><em>Copy the web application archive file into directory | |
<code>$CATALINA_BASE/webapps/</code></em>. When Tomcat is started, it will | |
automatically expand the web application archive file into its unpacked | |
form, and execute the application that way. This approach would typically | |
be used to install an additional application, provided by a third party | |
vendor or by your internal development staff, into an existing | |
Tomcat installation. <strong>NOTE</strong> - If you use this approach, | |
and wish to update your application later, you must both replace the | |
web application archive file <strong>AND</strong> delete the expanded | |
directory that Tomcat created, and then restart Tomcat, in order to reflect | |
your changes. | |
<br><br></li> | |
<li><em>Use the Tomcat 6 "Manager" web application to deploy and undeploy | |
web applications</em>. Tomcat 6 includes a web application, deployed | |
by default on context path <code>/manager</code>, that allows you to | |
deploy and undeploy applications on a running Tomcat server without | |
restarting it. See the administrator documentation (TODO: hyperlink) | |
for more information on using the Manager web application.<br><br></li> | |
<li><em>Use "Manager" Ant Tasks In Your Build Script</em>. Tomcat 6 | |
includes a set of custom task definitions for the <code>Ant</code> | |
build tool that allow you to automate the execution of commands to the | |
"Manager" web application. These tasks are used in the Tomcat deployer. | |
<br><br></li> | |
<li><em>Use the Tomcat Deployer</em>. Tomcat 6 includes a packaged tool | |
bundling the Ant tasks, and can be used to automatically precompile JSPs | |
which are part of the web application before deployment to the server. | |
<br><br></li> | |
</ul> | |
<p>Deploying your app on other servlet containers will be specific to each | |
container, but all containers compatible with the Servlet API Specification | |
(version 2.2 or later) are required to accept a web application archive file. | |
Note that other containers are <strong>NOT</strong> required to accept an | |
unpacked directory structure (as Tomcat does), or to provide mechanisms for | |
shared library files, but these features are commonly available.</p> | |
</blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade="noshade" size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em> | |
Copyright © 1999-2014, Apache Software Foundation | |
</em></font></div></td></tr></table></body></html> |