Java 动态地将servlet添加到servletConfig

Java 动态地将servlet添加到servletConfig,java,class,web-applications,servletconfig,Java,Class,Web Applications,Servletconfig,我有一个使用插件架构的Java web应用程序。我想知道是否有人有一个解决方案,可以在web应用程序运行时添加一个servlet,并将serlvet映射到servletconfig?其想法是,可以将一个类添加到/WEB-INF/classes文件夹中,并将其作为servlet激活,而无需重新启动WEB应用程序。同样,如果用户选择删除“插件”,那么让代码从servletconfig中删除类。在运行的应用程序中添加和删除类是很困难的。您可能需要寻找一种商业解决方案 如果你的用户没有很长时间的对话/会

我有一个使用插件架构的Java web应用程序。我想知道是否有人有一个解决方案,可以在web应用程序运行时添加一个servlet,并将serlvet映射到servletconfig?其想法是,可以将一个类添加到/WEB-INF/classes文件夹中,并将其作为servlet激活,而无需重新启动WEB应用程序。同样,如果用户选择删除“插件”,那么让代码从servletconfig中删除类。

在运行的应用程序中添加和删除类是很困难的。您可能需要寻找一种商业解决方案

如果你的用户没有很长时间的对话/会话,那么重新启动你的Web应用程序可能足够快,他们不会注意到。如果这能帮到你,那么问题就变得很简单了


假设您正在运行Tomcat,您可以将服务器配置为
reloadable=true
,并且每当您将新的
web.xml
放入
webapps
目录时,它都会重新启动您的应用程序。您可以将新类添加到
WEB-INF/classes
目录,然后更新
WEB.xml
,这样应该可以正常工作。如果正在使用这些类,则删除这些类可能会更困难。您可能需要执行一个两步流程,首先部署一个不再路由到给定servlet类的
web.xml
,然后等待类用户离开,然后删除该类并再次重新部署更新的
web.xml

我认为您不能动态地这样做,但是您可以尝试使用预配置的过滤器使servlet处于活动或非活动状态。在数据库或文件系统中,让过滤器检查您可以动态更改的值,并告诉它在servlet“关闭”时如何重新路由请求


我认为在不给用户反馈的情况下关闭servlet是不礼貌的

没有标准的Servlet API来实现这一点

你可以在Tomcat中这样做。在您的webapp中,您的主servlet(创建其他servlet的主servlet)必须实现
ContainerServlet
,这样您就可以获得
包装器
对象。安装类文件后,可以进行以下调用:

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);
这些调用动态创建一个servlet。您需要找到保存此信息的方法。您可以通过更新web.xml或写入自己的文件来实现这一点