我想动态地在servlet上下文中添加和删除servlet。我知道如何使用ContextHandlerCollection动态添加多个servlet上下文。但是,我需要在上下文中对多个servlet执行相同的操作。一旦启动servlet上下文,是否可以添加更多servlet?
答案 0 :(得分:0)
只能添加Servlet,而不能删除。
查看各种ServletContext.addServlet()
方法。
但请注意,您只能在ServletContextListener.contextInitialized()
期间更改ServletContext
(请参阅ServletContext.addServlet()
中的javadoc以了解UnsupportedOperationException
throwable
答案 1 :(得分:0)
几年前我在ECM组件中实现了它,因此可以通过ConfigAdmin设置添加和删除servlet,而无需在OSGi环境中重新启动Jetty。
就像两年多前一样,我不记得每一个细节,但你可以自己查看代码。请在此处查看 CustomServletHandler 类的 updateServletsAndFilters()函数:https://github.com/everit-org/jetty-server-ecm/blob/master/component/src/main/java/org/everit/jetty/server/ecm/internal/CustomServletHandler.java#L88
一些提示:
上面的函数是从 ServletContextHandlerFactoryComponent 类的 updateServletHandlerWithDynamicSettings()函数调用的(这是根据配置预先收集映射,servlet和过滤器的地方):{{3 }}