## The Loader Component

### Table of Contents

- Introduction
- Attributes
  1. Common Attributes
  2. Standard Implementation
- Nested Components
- Special Features
  1. Logging

### Introduction

The Loader element represents the web application class loader that will be used to load Java classes and resources for your web application. Such a class loader must follow the requirements of the Servlet Specification, and load classes from the following locations:

- From the `/WEB-INF/classes` directory inside your web application.
- From JAR files in the `/WEB-INF/lib` directory inside your web application.
- From resources made available by Catalina to all web applications globally.

A Loader element MAY be nested inside a Context component. If it is not included, a default Loader configuration will be created automatically, which is sufficient for most requirements.

For a more in-depth description of the class loader hierarchy that is implemented by Catalina, see the ClassLoader HowTo.

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 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.

### Attributes

#### Common Attributes

All implementations of Loader support the following attributes:

Attribute | Description
--- | ---
`className` | Java class name of the implementation to use. This class must implement the `org.apache.catalina.Loader` interface. If not specified, the standard value (defined below) will be used.
`delegate` | Set to `true` if you want the class loader to follow the standard Java2 delegation model, and attempt to load classes from parent class loaders before looking inside the web application. Set to `false` (the default) to have the class loader look inside the web application first, before asking parent class loaders to find requested classes or resources.

#### Standard Implementation

The standard implementation of Loader is org.apache.catalina.loader.WebappLoader. It supports the following additional attributes (in addition to the common attributes listed above):

Attribute | Description
--- | ---
`loaderClass` | Java class name of the `java.lang.ClassLoader` implementation class to use. Custom implementations must extend `org.apache.catalina.loader.WebappClassLoaderBase`. If not specified, the default value is `org.apache.catalina.loader.ParallelWebappClassLoader`. The default loaderClass is parallel capable, which means that multiple threads may load difference classes in parallel. A non-parallel capable loaderClass is available and can be used by specifying `org.apache.catalina.loader.WebappClassLoader`.

### Nested Components

No components may be nested inside a Loader element.

### Special Features

#### Logging

A loader is associated with the log category based on its classname.