2008-10-07 2 views
20

У меня есть куча слушателей контекста сервлета в моем Java webapp, каждый из которых собирает некоторую информацию об окружающей среде.Как определить порядок слушателей в web.xml

Некоторые из них зависят от информации, собираемой другим слушателем. Но я не могу определить порядок регистрации и вызова слушателей, поэтому мне нужно дублировать код.

Я понимаю, что слушатели зарегистрированы в порядке их заказа в web.xml, но это звучит немного расплывчато для меня, слишком расплывчато, чтобы полагаться на него.

У вас есть подсказка, как я могу решить свою проблему?

ответ

25

Все контейнеры сервлетов и контейнеры Java EE реализуют эту часть спецификации строго. Вы можете положиться на то, что слушатели вызываются в порядке, указанном в web.xml.

У вас может быть структура данных LEVEL приложения (HashMap), которая будет обновляться каждым фильтром/слушателем, когда он встречает данные из запросов. Это позволит каждому слушателю обновить только то, что необходимо. Вы можете поместить общий код в базовый прослушиватель, чтобы не было дублирования кода.

2

Казалось бы, вы можете создать ListenerManager, который вы размещаете как ваш и только слушатель, и иметь в нем других слушателей. Когда событие приходит, просто вызовите каждого из других прослушивателей в нужном вам порядке (вероятно, порядок, который вы создали в конструкторе ListenerManager).

К сожалению, это означает изменение кода при добавлении Listeners, но вы можете избежать этого путем умного использования файлов свойств и кода типа-класса.

8

Почему это расплывчато? Заказ в web.xml - это именно тот порядок, в котором они называются, это очень четко указано в спецификации Java EE. Все в порядке, чтобы полагаться на это.

Смежные вопросы