2014-01-30 2 views
2

Можно ли динамически добавлять шаблон URL-адреса сервлету во время выполнения? Например, когда сервлет запускается, сканируйте папку для аннотаций и затем вставляйте эти шаблоны url в сервлет?Java - динамическое добавление шаблона URL к сервлету

  • для обеспечения большей ясности -

В файле инициализации сервлета, я хочу сделать это (псевдокод)

// scan all the files in the package my.project.services 
// find all the classes with the Annotation @Service 
// read those annotations, find the url patterns in them, and insert them into the servlet 
+0

Возможно, я неправильно понял. Вы хотите это при запуске или позже? –

+0

При запуске в порядке. Например, в функции init() сервлета. – bluedevil2k

+0

Какова цель? Вы уверены, что это не будет лучше, если использовать простой шаблон контроллера? –

ответ

7

Я не уверен, я понимаю вашу конечную цель , но вот возможное решение.

С Servlet 3.0, реализовать интерфейс ServletContainerInitializer. Зарегистрируйте как Javadoc говорит

Реализация этого интерфейс должен быть объявлена ​​с помощью JAR-файла ресурса, расположенных внутри каталога META-INF/services и названный в честь полного имя класса этого интерфейса

В своем onStartup(..), у вас будет доступ ко всем классам в пути к классу вашего веб-приложения.

Сканирование их по одному. Если класс находится в пакете, который вам нужен, и у него есть аннотация, которую вы ищете, обработайте его и сохраните шаблон URL в коллекции.

После завершения сканирования вы можете зарегистрировать Servlet экземпляры/классы с предоставленным ServletContext и зарегистрировать шаблоны URL с данным ServletRegistration.Dynamic объектом.

ServletRegistration.Dynamic registration = servletContext.addServlet("myServlet", new MyServlet()); 
registration.addMapping(yourCollectionAsAStringArray); 

У вас есть много других вариантов конфигурации, если они вам понадобятся.

+0

Я согласен с вашим решением, но это работает только с помощью Servlet3 .. – Koitoer

+0

@Koitoer Да, я добавил разъяснение. Благодарю. –