Загрузка классов (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веб-приложения находятся в зоне видимости данного веб-приложению, но не других.