Подтвердить что ты не робот

Как определить порядок слушателей в web.xml

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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