Загрузка классов (ClassLoader)#

По аналогии с другими серверными приложениями Tomcat устанавливает различные загрузчики классов (классы, реализующие java.lang.ClassLoader), чтобы позволить различным частям контейнера и веб-приложениям, работающим на контейнере, получить доступ к различным репозиториям доступных классов и ресурсов. Данный механизм используется для предоставления функциональности, определенной в спецификации Servlet.

В среде Java загрузчики классов организованы в виде дерева «родитель-потомок». Обычно, когда загрузчик получает запрос на загрузку определенного класса или ресурса, он сначала делегирует запрос родительскому загрузчику. Если «родитель» не может найти запрошенный класс или ресурс, «потомок» ищет в собственных репозиториях.

Определения загрузчиков классов#

Tomcat создает следующие загрузчики классов при инициализации:

  • Bootstrap — содержит основные классы среды выполнения, предоставляемые виртуальной машиной Java, а также классы из JAR-файлов, присутствующих в каталоге системных расширений ($JAVA_HOME/jre/lib/ext).

  • System — инициализируется из содержимого переменной окружения CLASSPATH. Данные классы находятся в зоне видимости Tomcat и веб-приложений.

  • Common — содержит дополнительные классы, которые находятся в зоне видимости Tomcat и веб-приложений.

    По умолчанию включает:

    • annotations-api.jar — классы Common Annotations 1.3;

    • catalina.jar — реализация контейнерной части сервлета Catalina;

    • catalina-ant.jar — задачи Tomcat Catalina Ant для работы с веб-приложением Manager (опционально);

    • catalina-ha.jar — пакет высокой доступности, обеспечивающий функциональность кластеризации сеансов, построенный на Tribes (опционально);

    • catalina-ssi.jar — серверная часть с модулем (опционально);

    • catalina-storeconfig.jar — генерация XML-файлов конфигурации из текущего состояния (опционально);

    • catalina-tribes.jar — пакет групповой коммуникации, используемый пакетом высокой доступности (опционально);

    • ecj-*.jar — компилятор Java Eclipse JDT, используемый для компиляции JSP в сервлеты (опционально);

    • el-api.jar — API EL 3.0 (опционально);

    • jasper.jar — компилятор и среда выполнения JSP Tomcat Jasper (опционально);

    • jasper-el.jar — реализация EL Tomcat (опционально);

    • jaspic-api.jar — Jakarta Authentication 3.1 API;

    • jsp-api.jar — API Jakarta Pages 4.0 (опционально);

    • servlet-api.jar — Jakarta Servlet 6.1 API;

    • tomcat-api.jar — несколько интерфейсов, определенных Tomcat;

    • tomcat-coyote.jar — соединители Tomcat и служебные классы;

    • tomcat-dbcp.jar — реализация пула соединений с базой данных на основе переименованной копии Apache Commons Pool 2 и Apache Commons DBCP 2 (опционально);

    • tomcat-i18n-**.jar — опциональные JAR-файлы, содержащие комплекты ресурсов для других языков. Поскольку стандартные комплекты ресурсов также включены в каждый отдельный JAR, их можно безопасно удалить, если перевод сообщений не требуется;

    • tomcat-jdbc.jar — альтернативная реализация пула соединений с базой данных, известная как Tomcat JDBC pool (опционально);

    • tomcat-jni.jar — интеграция с библиотекой Tomcat Native;

    • tomcat-util.jar — общие классы, используемые различными компонентами Tomcat;

    • tomcat-util-scan.jar — функциональность сканирования классов, используемая в Tomcat;

    • tomcat-websocket.jar — реализация Java WebSocket 1.1 (опционально);

    • websocket-api.jar — API Java WebSocket 1.1 (опционально).

  • WebappX — создается для каждого веб-приложения, развернутого в одном экземпляре Tomcat. Все распакованные классы и ресурсы содержатся в каталоге /WEB-INF/classes веб-приложения. Классы и ресурсы в JAR-файлах в каталоге /WEB-INF/lib веб-приложения находятся в зоне видимости данного веб-приложению, но не других.