У меня есть веб-приложение Java, которое использует архитектуру плагина. Я хотел бы знать, есть ли у кого-нибудь решение, по которому можно добавить сервлет, с сервлет-отображением в servletconfig во время работы веб-приложения? Идея состоит в том, что класс можно добавить в папку/WEB-INF/classes и стать активным как сервлет без перезапуска веб-приложения. По той же самой природе, если пользователь решает удалить «плагин», тогда код должен удалить класс из файла servletconfig.Динамически добавить сервлет в servletConfig
ответ
Для этого не существует стандартного API Servlet.
Вы можете сделать это в Tomcat. В вашем webapp ваш главный сервлет (тот, который создает другие) должен реализовать ContainerServlet
, чтобы вы могли получить объект Wrapper
. После того, как вы установили ваш файл класса, вы можете сделать следующие вызовы,
Context context = (Context) wrapper.getParent();
Wrapper newWrapper = context.createWrapper();
newWrapper.setName(name);
newWrapper.setLoadOnStartup(1);
newWrapper.setServletClass(servletClass);
context.addChild(newWrapper);
context.addServletMapping(pattern, name);
Эти вызовы создают сервлет на лету. Вам нужно найти способ сохранить эту информацию. Вы можете сделать это, обновив web.xml или напишите в свой собственный файл.
Добавление и удаление классов в/из запущенного приложения затруднено. Вы можете посмотреть JRebel для коммерческого использования.
Если у ваших пользователей не очень длительные разговоры/сеансы, возможно, перезапуск вашего веб-приложения может быть достаточно быстрым, чтобы они не заметили. Если это будет сделано для вас, то проблема будет довольно легкой.
Предполагая, что вы используете Tomcat, вы можете настроить свой сервер с помощью reloadable=true
, и он перезапустит ваше приложение, когда вы бросаете новый web.xml
в каталог webapps
. Вы можете добавить новые классы в каталог WEB-INF/classes
, а затем обновить web.xml
, что должно работать нормально. Удаление классов может быть сложнее, если эти классы используются. Возможно, вы захотите сделать двухэтапный процесс, когда вы сначала развернете web.xml
, который больше не перенаправляется на данный класс сервлета, а затем немного подождите, пока пользователи класса уйдут, а затем удалите класс и повторно разверните обновленный web.xml
.
Я не думаю, что вы можете сделать это динамически, но вы можете попробовать сделать сервлет активным или неактивным, используя предварительно сконфигурированный фильтр. Сделайте проверку фильтра на значение, которое вы можете изменить динамически, либо в базе данных, либо в файловой системе, и сообщите ему, как перенаправить запрос, если сервлет «выключен».
Я думаю, было бы грубо просто отключить сервлет, не давая пользователям какой-либо обратной связи.
- 1. Программно добавить сервлет во встроенный гризли
- 2. Динамически генерировать JFreeChart в сервлет
- 3. java.lang.IllegalStateException: ServletConfig не был инициализирован
- 4. ServletConfig vs ServletContext
- 5. Перенаправить динамически сформированный сервлет (имя) на статический сервлет
- 6. Получить динамически добавлены таблицы значений в сервлет
- 7. Как проходит Guice в ServletContext/ServletConfig для привязок?
- 8. ServletConfig без конфигурации xml в jsp?
- 9. Как получить объект ServletConfig в Фильтр
- 10. Добавить динамически динамически в AdvancedDataGrid
- 11. Как вызвать сервлет с динамически создаваемыми кнопками
- 12. Почему мы используем интерфейс servletconfig и интерфейс servletcontext
- 13. Не удается добавить сервлет в проекте Maven
- 14. Как добавить банку в сервлет CLASSPATH?
- 15. Не удается добавить сервлет в Tomcat web.xml
- 16. Добавить флажок динамически динамически
- 17. Android - добавить динамически динамически
- 18. Нужно добавить динамически динамически
- 19. Нужно добавить динамически динамически
- 20. Динамически добавить строку в таблицу html
- 21. Как вызвать destroy() в сервлет из eclipse?
- 22. Как создаются объекты ServletConfig и ServletContext
- 23. Динамически добавить в horizontalscrollview
- 24. Simple Servlet Вопрос о ServletConfig конкретизации
- 25. Потребители инъекционных Весна @Resource в сервлет
- 26. добавить динамически динамически в excel для строки
- 27. Добавить колонку в динамически динамически используя jQuery
- 28. Сервлет-сервлет-сервлет недоступен (интеграция Spring + BlazeDS)
- 29. основного метода() не найден в моем сервлете программе даже при использовании инициализации (ServletConfig кон)
- 30. Добавление параметров init в список в init (ServletConfig)
Это идеальное, большое спасибо. – BigBadOwl