Этот хмл содержит рутовый тег <Server ...="">...</Server> - этот тег представляет контейнр сервлетов Каталину, через него мы настраиваем контейнер сервлетов. Ну только вот это еще не совсем контейнер, это более тег подготовки среды.
Этот тег имеет три атрибута:
Этот тег содержит три ребенка:
- Listener - один и больше тегов, которые подгружают разные классы, которые выполняют свой обьем работ. Это библиотека APR, Джаспер(превращает jsp в сервлеты), класс для непозволения утечек памяти, классы для поддрежки JMX(Java Management Extensions - классы для управления и мониторинга приложений, системных обьектов, устройств и сервис-ориентированных сетей).
- Service - один или больше тегов представляющих сервисы.
- GlobalNamingResources - так настраивают глобальные JNDI ресурсы для всего сервера.
GlobalNamingResources если определен это не означает, что этот ресурс будет автомаитчески доступен из инджинов, хостов и приложений, определенных ниже. Чтобы они имели доступ к ресурсу им нужно явно определить тег ResourceLink на этот глобальный ресурс. Определяется ресурс вложенным тегом Resource в тэг GlobalNamingResources, в этом теге указывается атрибут имя, и на это имя может ссылаться ResourceLink.
Service - предоставляет один или несколько компонентов Конектор(Connector), которые разделяют один Движок(Engine) для обработки входящих запросов. Коннекторы могут разделять между собой один пул потоков, для этого перед ними нужно описать этот пул(он представляется под тегом Executor) и ссылаться в своих атрибутах на его имя.
Атрибуты:
Есть три конектора:
1) Java HTTP Connector - для запросов по протоколу хттп.
2) Java AJP Connector - для запросов по протоколу Apache JServ Protocol. Это протокол, который используют между собой хттп-сервер и аппликейшин сервер в случае сайта с реверсным проксированием.
3) APR (HTTP/AJP) Connector- Apache Portable Runtime - эта библиотека сердце Apache HTTP Server 2.x., позволяющая не смотреть на платформу сервера, а предоставлять унифицированный интерфейс для разработчиков. Используя эту библиотеку Томкат позвояет использовать последние технология веб-сервера, а не просто быть сервером-приложений. Так вот такого отдельного конектора нет, прото когда мы через Listener подключим APR, то хттп и AJP конекторы получат дополнительные атрибуты для настройки. Ведь теперь они будут работать через АПР.
Все конекторы обслуживаются полюбому одним движком. Engine и представляет собою реализацию сервлет-контейнера. Этот сервлет контейнер передает сервлетам запросы от конекторов и возращает от них ответы.
Атрибуты тега Инджин:
Инджин внутри себя имеет минимум один виртуальный Host. Host же имеет в себе минимум один Context, который определяет веб-приложение. Под одним вирутальным хостом может быть несколько веб-приложений. Виртуальные хосты настраиваются алиасами и т.д.
Все эти три уровня могут иметь тег Realmn, который определяет базу данных с именем пользоваеля, его паролем, ролью (эквивалентно группе в юниксистеме) и таким образом определет пользователей. Это позволяет отстроить систему безопасности между приложениями, виртуальными хостами, сервлет-контейнерами. Realmn более низкого уровня унаследывает базу более высокого, при этом он может ее перегружать. Есть множество классов, которые получают доступ к различным базам. Пожалуй самый простой это org.apache.catalina.realm.UserDatabaseRealm, который определяет один дополнительный атрибут в тег
Вернемся к Контексту под контекст определятся часть ури которая идет после домееного имени, среди контестов должен быть обязательно дефолтовый контекст, который определяет какому веб-приложению передать запрос, если не один из контекстов не подошел, это обычно контекст под "/". Когда контейнер определил какому контексту(приложению) передать запрос, он решает дальше какому именно сервлету контекста передать этот запрос. Это он выясняет из дескриптора приложения WEB-INF/web.xml. Кстати определять контексты напрямую в файле server.xml не рекомендуется ведь, чтобы добавить новое приложение нам необходимо останавливать сервер.
Вот возможные варианты размещения файла настроек:
1)
2)
3)
4) Если в
Этот тег имеет три атрибута:
className | Имя класса который должен реализовывать org.apache.catalina.Server интрерфейс. Инстанция этого класса и будет контейнером сервлетов. Если не указано имя класса то используется страндартный org.apache.catalina.core.StandardServer. |
port | Номер порта TCP/IP на котором сервер ждет shutdown команды. Соединение с этим пором возможно только с комтьютера на котором запущемн Tomcat. |
shutdown | Строка которая представляет какую команду бедет ожидать на выше описанном порте сервер, чтобы остановиться. |
Этот тег содержит три ребенка:
- Listener - один и больше тегов, которые подгружают разные классы, которые выполняют свой обьем работ. Это библиотека APR, Джаспер(превращает jsp в сервлеты), класс для непозволения утечек памяти, классы для поддрежки JMX(Java Management Extensions - классы для управления и мониторинга приложений, системных обьектов, устройств и сервис-ориентированных сетей).
- Service - один или больше тегов представляющих сервисы.
- GlobalNamingResources - так настраивают глобальные JNDI ресурсы для всего сервера.
GlobalNamingResources если определен это не означает, что этот ресурс будет автомаитчески доступен из инджинов, хостов и приложений, определенных ниже. Чтобы они имели доступ к ресурсу им нужно явно определить тег ResourceLink на этот глобальный ресурс. Определяется ресурс вложенным тегом Resource в тэг GlobalNamingResources, в этом теге указывается атрибут имя, и на это имя может ссылаться ResourceLink.
Service - предоставляет один или несколько компонентов Конектор(Connector), которые разделяют один Движок(Engine) для обработки входящих запросов. Коннекторы могут разделять между собой один пул потоков, для этого перед ними нужно описать этот пул(он представляется под тегом Executor) и ссылаться в своих атрибутах на его имя.
Атрибуты:
className | Имя класса который должен реализовывать org.apache.catalina.Service интерфейс. Стандратный класс org.apache.catalina.core.StandardService |
name | Имя Service, им сервис подписывается в логах. The name of each Service that is associated with a particular Server must be unique. |
Есть три конектора:
1) Java HTTP Connector - для запросов по протоколу хттп.
2) Java AJP Connector - для запросов по протоколу Apache JServ Protocol. Это протокол, который используют между собой хттп-сервер и аппликейшин сервер в случае сайта с реверсным проксированием.
3) APR (HTTP/AJP) Connector- Apache Portable Runtime - эта библиотека сердце Apache HTTP Server 2.x., позволяющая не смотреть на платформу сервера, а предоставлять унифицированный интерфейс для разработчиков. Используя эту библиотеку Томкат позвояет использовать последние технология веб-сервера, а не просто быть сервером-приложений. Так вот такого отдельного конектора нет, прото когда мы через Listener подключим APR, то хттп и AJP конекторы получат дополнительные атрибуты для настройки. Ведь теперь они будут работать через АПР.
Все конекторы обслуживаются полюбому одним движком. Engine и представляет собою реализацию сервлет-контейнера. Этот сервлет контейнер передает сервлетам запросы от конекторов и возращает от них ответы.
Атрибуты тега Инджин:
backgroundProcessorDelay | This value represents the delay in seconds between the invocation of the backgroundProcess method on this engine and its child containers, including all hosts and contexts. Child containers will not be invoked if their delay value is not negative (which would mean they are using their own processing thread). Setting this to a positive value will cause a thread to be spawn. After waiting the specified amount of time, the thread will invoke the backgroundProcess method on this engine and all its child containers. If not specified, the default value for this attribute is 10, which represent a 10 seconds delay. |
className | Имя класса, который должен реализовывать интерфейс org.apache.catalina.Engine. Стандарный org.apache.catalina.core.StandardEngine. |
defaultHost | Дефолтовый хост, я так понимаю запросы передаются ему если они пришли, но при этом такого имя не определено в настройках. В данном инджене должнен быть минимум один Хост и его имя должно совпадать с указанным в данном атрибуте. |
| Идентификатор, который используется при балансировке нагрузки, который выделяет сессию под конкретную инстанцию томката в кластере. Каждый томкат в кластере должен иметь свой уникальный идентификатор, чтобы пронт-прокси понимал, с какой инсанцией была соединениа сессия и передавать последующие запросы именно тому томкату. Этот идентификатор является вроде как префиксом в идентификатора сессии. | |
name | Это имя отображается в логах. Оно должно быть уникально для каждого Сервиса, если у нас на Сервере несколько Сервисов(контейнеров сервлетов). |
Инджин внутри себя имеет минимум один виртуальный Host. Host же имеет в себе минимум один Context, который определяет веб-приложение. Под одним вирутальным хостом может быть несколько веб-приложений. Виртуальные хосты настраиваются алиасами и т.д.
Все эти три уровня могут иметь тег Realmn, который определяет базу данных с именем пользоваеля, его паролем, ролью (эквивалентно группе в юниксистеме) и таким образом определет пользователей. Это позволяет отстроить систему безопасности между приложениями, виртуальными хостами, сервлет-контейнерами. Realmn более низкого уровня унаследывает базу более высокого, при этом он может ее перегружать. Есть множество классов, которые получают доступ к различным базам. Пожалуй самый простой это org.apache.catalina.realm.UserDatabaseRealm, который определяет один дополнительный атрибут в тег
resourceName , который ссылается на выше определенный ресурс через GlobalNamingResources(JNDI).Вернемся к Контексту под контекст определятся часть ури которая идет после домееного имени, среди контестов должен быть обязательно дефолтовый контекст, который определяет какому веб-приложению передать запрос, если не один из контекстов не подошел, это обычно контекст под "/". Когда контейнер определил какому контексту(приложению) передать запрос, он решает дальше какому именно сервлету контекста передать этот запрос. Это он выясняет из дескриптора приложения WEB-INF/web.xml. Кстати определять контексты напрямую в файле server.xml не рекомендуется ведь, чтобы добавить новое приложение нам необходимо останавливать сервер.
Вот возможные варианты размещения файла настроек:
1)
$CATALINA_BASE/conf/context.xml2)
$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default -- эти настройки будут полюбому подгружатся для каждого контекста хоста.3)
$CATALINA_BASE/conf/[enginename]/[hostname]/foo#bar.xml - это так называются файлы с настройками конкретных контекстов, в данном случае это контекст foo/bar/.4) Если в
$CATALINA_BASE/conf/[enginename]/[hostname]/ не существует файл под конкретный контекст, то ищется файл /META-INF/context.xml и он копируется в данную директорию под именем этого контекста.
Комментариев нет:
Отправить комментарий