И так контекст(веб-приложение) можно определять под сервер(тоже сомое, что под контейнер сервелетов) или виртуальных хост.
Это:
1)
2)
3)
4) Если в
Атрибуты тега:
Если в className стоит дефолтовый org.apache.catalina.core.StandardContext, то в тег Контекста добавляются следующие атрибуты:
Контекст може иметь следующие утилитные компоненты (которые вставляются в него вложенными тегами):
Loader - класс, обьект которого загружает сервлеты и бины приложения. Дефолтовый класс справляется чудесно с этим заданием.
Manager - класс, обьект которого создает, уничтожает и поддерживает сессии данного приложения. Дефолтовый чудесно справляется с поставленной задачей.
Realm - настройка собственной базы пользователей под данное приложение со своими ролями. Обычно приложение пользуется базой своего Хоста или Инджина.
Resources - определяется менеджер, который будет загружать статические ресурсы приложения. Дефолтовый чудестно справляется с этой задачей.
WatchedResource - автодеплоер монитирит указанные а таком теге ресурсы и если они изменяются то перегружает приложение. Примеры: WEB-INF/web.xml, META-INF/context.xml, WEB-INF/lib/log4j.xml.
В Инджине, в Хосте и в Контексте можно применять Valve, которые пропускают через себя поток байтов входящих запросов. Их примеры применения это:
Для логирования доступа:
Для фильтрования запросов:
Для единого входа через одно приложение хоста. Тоесть если юзер залогинится в одном из приложений хоста, то он авомаически считается вошедшим и в другие приложения этого хоста:
Вот дефолтовые конфигурации контекста, если не определять своих:
1) Используется дефолтовый загрузчик классов (Loader).
2) Используется дефолтовый менеджер сессий (Manager).
3) Используется дефолтовый менеджер статических ресурсов (Resources).
4) Настройки в
5) В приложении будет проверяется существует ли файл WEB-INF/web.xml, если да, то он будет обрабатываться и стандратные настройки могут расширяться/перегружаться.
6) Если для веб-приложения были определены ограничения безопасности, которые трубую аутентификации юзеров, то подходящие Аутинтификатор будет настроен, который реализует тот метод входа, что вы выбрали.
Для Контекста можно определять параметры контекста, которые будут доступны из сервлетов. Эти параметры можно определять как в context.xml:
Также мы можем определять ресурсы среды, отличие их от параметров в том, что они могут иметь тип отичительный от строкового:
context.xml:
WEB-INF/web.xml:
Вот возможные типы ресурсов среды:
К ресурсу среды обращаются из приложения через JNDI-контекст с его именем.
Если вы создали класс, который должен знать, когда запускается и останавливается этот контекст нужно опрделить Listener именно для этого контекста, нужно помнить, что этот класс должен реализовывать интерфейс
Определение ресурсов для доспупа к ним через JNDI. Чтобы их определить необходимо в параметре указать какая фабрика будет производить эти ресурсы, а также указать в параметрах настройки, которые необходимы для фабрики:
context.xml
А вот эквивалент такого определения в дескрипторе развертывания приложения (/WEB-INF/web.xml):
Вот параметры для настройки:
Определение ссылок на ресурсы.
Так ссылаются получают доступ к описанным глобальным JNDI ресурсам. Когда выполняют JNDI поиск по имени этой ссылки на ресурс, то получают ссылку на глобальный ресурс.
Это:
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 и он копируется в данную директорию под именем этого контекста.Атрибуты тега:
backgroundProcessorDelay | This value represents the delay in seconds between the invocation of the backgroundProcess method on this context and its child containers, including all wrappers. 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 host and all its child containers. A context will use background processing to perform session expiration and class monitoring for reloading. If not specified, the default value for this attribute is -1, which means the context will rely on the background processing thread of its parent host. |
className | Имя класса который должне реализовывать интерфейс org.apache.catalina.Context, инстанция этого класса будет выполнять функции обькта по управлению веб-приложением. По умолчанию это org.apache.catalina.core.StandardContext |
cookies | Если тру то идентификатор сессии будет записываться в кукисы, если фолс - то веб-приложение будет править урлы, чтобы в них хранить идентификатор сессии. По умолчанию тру. |
crossContext | Если тру, то поточное приложение вызвав ServletContext.getContext(), получит обьект реквест-диспетчера, который используется и другими приложениями этого хоста. Если фолс(а это значение по умолчанию) getContext() всегда будет возвращать null. |
docBase | Document Base (также известен как Context Root) каталог этого приложения, или путь к архиву (в случае, если приложение настроено на выполнение с архива). Путь может быть как абсолютным, так и оносительным к appBase каталогу поточного Host.Если это путь к симлинке, то ее изменение не повлияет на контекст, нужно только перезапустить Томкат, или отдеплоить и задеплоить контекст. Перегрузка контекста эффекта не даст. Это значение не нужно устанавливать, если настройки контекста беруться из META-INF/context.xml, так как путь будет определен процессом автодеплоя. |
override | Если тру, то контексту позволяется перегружать соответсвующие настройки из глобального или дефолтового для хоста контекста. По умолчанию настройки используются из дефолтового контекста. |
privileged | Set to true to allow this context to use container servlets, like the manager servlet. Use of the privileged attribute will change the context's parent class loader to be the Server class loader rather than the Shared class loader. Note that in a default installation, the Common class loader is used for both the Server and the Shared class loaders. |
path | Это префикс ури, который дает знать, что запрос касается нашего контекста. Если он пустой, то этот контекст будет дефолтовым для данного хоста. Вобщето, это значение не нужно устанавливать, кроме того случая, если мы контекст определяем прям в файле server.xml, в остальных случаях префикс возьмется либо с имени хмл-файла настройки, либо с docBase. |
reloadable | Стоить устанавливть в тру, если нужно, чтобы Каталина отслеживал изменения в каталогах /WEB-INF/classes/ and /WEB-INF/lib и вслучае обнаружения автоматически перегружал приложение. Эта фишка полезна в среде разработки, но на продакшине не годиться, поскольку снижает продуктивность сервера. По дефолту стоит в фолсе. Можно использовать в таком случае Менеджер приложений для перегрузки приложения, если мы только что обновили классы в этих каталогах. |
wrapperClass | Java class name of the org.apache.catalina.Wrapper implementation class that will be used for servlets managed by this Context. If not specified, a standard default value will be used. |
useHttpOnly | Опеределяет ставить ли HttpOnly флаг(этот флаг можно поставить в хттп-хедере при установки куки, чтобы клиентские скрипты не могли читать эту куку) для куки сессии. По-умолчанию фолс. |
Если в className стоит дефолтовый org.apache.catalina.core.StandardContext, то в тег Контекста добавляются следующие атрибуты:
allowLinking | Если тру то в каталогах нашего приложения можно использовать симлинки, при этом они могут ссылаться на ресурсы, которые находятся за пределами бейспаза. Это крайне не рекомендуется применять на виндовой платформе, поскольку там не чувствительная к регистру файловая система, что может привести к раскрытию jsp-шок и к другим проблемам безопасности. |
antiJARLocking | Если тру, то Томкатовый загрузчик классов примет екстра-меры, чтобы избежать блокировку архива, когда в нем находятся определенные ресурсы и к ним обращаются через урл клиенты. Блокировка возможно на некоторых платформах и при некоторых конфигурациях сервера. Поэтому это крайне полезно в таких случаях, не взирая на то, что время запуска приложения возростает. По умолчанию значение равно фолс. |
antiResourceLocking | Если тру, то Томкат не позволяет случиться любому блокированию файлов. Это позволяет выполнять любые горячие деплои и андеплои приложения, хотя крайне сказывается на времени запуска приложения. Есть баг в поточной версии Томката(6), что если включен флаг, то не будут обновляться jsp-шки, а только бины и простые классы. Есть еще одно ограничение, если приложение находится за пределами appBase Хоста(это по дефолту директория с именем webapps), то при остановке сервера приложение будет удаляться с того места. Поэтому нужно дважды подумать, если приложение живет за пределами апбейса, перед тем как включать этот флаг.По умолнчание он фолс. |
cacheMaxSize | Максимальный размер кеша в килобайтах для статических ресурсов. По умолчанию 10240 (это десять мегабайт). |
cacheObjectMaxSize | Максимальный размер одного статического ресурса в килобайтах. По-умолчанию это 512. Если это значение превышает cacheMaxSize/20, то оно автоматически понижается к значению cacheMaxSize/20. |
cacheTTL | Количество времени в милисекундах до переатестации кеша. По умолчанию 5000(5 сек). |
cachingAllowed | Тру - кешируем статические ресурсы. По умолчанию тру. |
caseSensitive | Осужденной свойство, в Томкате 7 оно не будет предоставляться на изменение, а всегда будет тру. В значении фолс оно приводит к проблемам с безопасностью на виндовой-платформе (где нечувствительная к реестру файловая система). Чем опасно описано в свойстве allowLinking. |
clearReferencesStopThreads | If true, Tomcat attempts to terminate threads that have been started by the web application. Stopping threads is performed via the deprecated (for good reason) Thread.stop() method and is likely to result in instability. As such, enabling this should be viewed as an option of last resort in a development environment and is not recommended in a production environment. If not specified, the default value of false will be used. |
processTlds | Обрабатывать ли TLDs(Tag Library Descriptor) при запуске приложения. По-умолчанию тру, в фолс можно ставить, если веб-приложение не использует TLDs. |
swallowOutput | Если тру, то байты которые оправлены приложением в System.out или System.err будут перенаправлены в logger приложения. По-умолчанию фолс. |
tldNamespaceAware | Если поставить это значение в тру, то ХМЛ-валидация TLD-файлов будет учитывать и простронство имен(как я понял будет проверяться не просто на правильность обычного хмл, а и на соответсвие схемам, которые прикриплены через неймспейсы). Если ставить это значение, то нужно поставить и tldValidation. Этимим флагами можно пользоваться на девелопмент среде, на продакшине это сильно скажется на производительности. |
tldValidation | Если тру, то TLD-файлы будут хмл-валидироваться на этапе загрузки контекста. Включенный флаг сильно влияет на производительность. |
unloadDelay | К-во милисекунд, которое контейнер будет ждать после команды отгрузить сервлеты. По умолчанию 2000. |
unpackWAR | Если тру, то Томкат будер розпаковывать архив перед запуском приложения и запускать и из разпакованной директории. По-умолчанию тру. |
useNaming | Если тру(это дефолтовое значение), то Каталина активирует JNDI InitialContext для данного приложения, что есть совместимо с J2EE платформенным соглашением. |
workDir | Путь к директории, которая предоставляется для данного Контекста, куда сервлеты могут писать, а потом читать свои временные файлы. Эту директорию сервлеты смогут видеть через контекстный атрибут сервлета javax.servlet.context.tempdir, который имеет тип java.io.File. Если значение не определено, то такой директорией является низлежащая в $CATALINA_BASE/work. |
Контекст може иметь следующие утилитные компоненты (которые вставляются в него вложенными тегами):
Loader - класс, обьект которого загружает сервлеты и бины приложения. Дефолтовый класс справляется чудесно с этим заданием.
Manager - класс, обьект которого создает, уничтожает и поддерживает сессии данного приложения. Дефолтовый чудесно справляется с поставленной задачей.
Realm - настройка собственной базы пользователей под данное приложение со своими ролями. Обычно приложение пользуется базой своего Хоста или Инджина.
Resources - определяется менеджер, который будет загружать статические ресурсы приложения. Дефолтовый чудестно справляется с этой задачей.
WatchedResource - автодеплоер монитирит указанные а таком теге ресурсы и если они изменяются то перегружает приложение. Примеры: WEB-INF/web.xml, META-INF/context.xml, WEB-INF/lib/log4j.xml.
В Инджине, в Хосте и в Контексте можно применять Valve, которые пропускают через себя поток байтов входящих запросов. Их примеры применения это:
Для логирования доступа:
<Context path="/examples" ...>
...
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="localhost_access_log." suffix=".txt"
pattern="common"/>
...
</Context>
Для фильтрования запросов:
<Context path="/examples" ...>
...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.mycompany.com,www.yourcompany.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192.168.1.*"/>
...
</Context>
Для единого входа через одно приложение хоста. Тоесть если юзер залогинится в одном из приложений хоста, то он авомаически считается вошедшим и в другие приложения этого хоста:
<Host name="localhost" ...>
...
<Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0" cookieDomain="localhost"/>
...
</Host>Вот дефолтовые конфигурации контекста, если не определять своих:
1) Используется дефолтовый загрузчик классов (Loader).
2) Используется дефолтовый менеджер сессий (Manager).
3) Используется дефолтовый менеджер статических ресурсов (Resources).
4) Настройки в
conf/web.xml будут считаться дефолтовыми для данного приложения (тут происходят стандартные мапинги по урлам, например к *.jsp привязывается сервлет Джаспера org.apache.jasper.servlet.JspServlet, к "/" org.apache.catalina.servlets.DefaultServlet, к расширениям прикрепляются майм-типы, устанавливается время сессии на 30 минут, задаются имена велкомных страниц).5) В приложении будет проверяется существует ли файл WEB-INF/web.xml, если да, то он будет обрабатываться и стандратные настройки могут расширяться/перегружаться.
6) Если для веб-приложения были определены ограничения безопасности, которые трубую аутентификации юзеров, то подходящие Аутинтификатор будет настроен, который реализует тот метод входа, что вы выбрали.
Для Контекста можно определять параметры контекста, которые будут доступны из сервлетов. Эти параметры можно определять как в context.xml:
<Context ...>
...
<Parameter name="companyName" value="My Company, Incorporated"
override="false" description="Info about destination of this param"/>
...
</Context>
Так и в дескприторе развертывания веб-приложения (/WEB-INF/web.xml), но тут чуток другой синтаксис:<context-param> <param-name>companyName</param-name> <param-value>My Company, Incorporated</param-value> </context-param>
Также мы можем определять ресурсы среды, отличие их от параметров в том, что они могут иметь тип отичительный от строкового:
context.xml:
<Context ...>
...
<Environment name="maxExemptions" value="10"
type="java.lang.Integer" override="false"/>
...
</Context>
WEB-INF/web.xml:
<env-entry> <env-entry-name>maxExemptions</param-name> <env-entry-value>10</env-entry-value> <env-entry-type>java.lang.Integer</env-entry-type> </env-entry>
Вот возможные типы ресурсов среды:
java.lang.Boolean, java.lang.Byte, java.lang.Character, java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short, or java.lang.String.К ресурсу среды обращаются из приложения через JNDI-контекст с его именем.
Если вы создали класс, который должен знать, когда запускается и останавливается этот контекст нужно опрделить Listener именно для этого контекста, нужно помнить, что этот класс должен реализовывать интерфейс
org.apache.catalina.LifecycleListener, а также находиться jar-запакованным в $CATALINA_HOME/lib.<Context path="/examples" ...> ... <Listener className="com.mycompany.mypackage.MyListener" ... > ... </Context>
Определение ресурсов для доспупа к ним через JNDI. Чтобы их определить необходимо в параметре указать какая фабрика будет производить эти ресурсы, а также указать в параметрах настройки, которые необходимы для фабрики:
context.xml
<Context ...>
...
<Resource name="jdbc/EmployeeDB" auth="Container"
type="javax.sql.DataSource"
description="Employees Database for HR Applications"/>
...
</Context>
А вот эквивалент такого определения в дескрипторе развертывания приложения (/WEB-INF/web.xml):
<resource-ref> <description>Employees Database for HR Applications</description> <res-ref-name>jdbc/EmployeeDB</res-ref-name> <res-ref-type>javax.sql.DataSource</res-ref-type> <res-auth>Container</res-auth> </resource-ref>
Вот параметры для настройки:
auth | Возможные значения Application/Container. Это значение определяет нужно ли из самого приложения програмно делать вход в менеджер данного ресурса, или же контейнер сам сделает вход от имени приложения. Если устанавливается данный атрибут через дескриптор развертывания приложения, то в случае использования тега этот параметр является обязательным, а если используется , то нет - ведь по-умолчанию он подразумевает, что входить будет контейнер. |
description | Опциональный, это коментарий для программистов. |
name | Имя ресурса, которое будет относительно java:comp/env контекста. |
scope | Возможные значения Shareable/Unshareable . Которые подразумевают может ли менеджер ресурса разделять этот конекшин между несколькими пользователями (обьектами приложения). По-умолчанию может. |
type | Полное имя класса, обьект которого будет получать(ожидать) веб-приложение после запроса у менеджера ресурса. |
Определение ссылок на ресурсы.
Так ссылаются получают доступ к описанным глобальным JNDI ресурсам. Когда выполняют JNDI поиск по имени этой ссылки на ресурс, то получают ссылку на глобальный ресурс.
<Context ...>
...
<ResourceLink name="linkToGlobalResource"
global="simpleValue"
type="java.lang.Integer"
...
</Context>
Вот параметры этого тега:global | Имя глобального ресурса в глобальном JNDI контексте, на который мы ссылаемся из нашей ресурсной ссылки. |
name | Имя ссылки на ресурс, к которой будет обращаться через java:comp/env контекст. |
type | Полное имя класса, обьект которого будет получать(ожидать) веб-приложение после запроса у менеджера ресурса. |
Комментариев нет:
Отправить комментарий