2009-12-10 71 views
9

我有一个使用插件体系结构的Java Web应用程序。我想知道是否有人有一个解决方案,通过一个人可以添加一个servlet,并且在web应用程序运行时通过serlvet映射到servletconfig?这个想法是,一个类可以添加到/ WEB-INF/classes文件夹中,并且可以在不重新启动Web应用程序的情况下作为servlet激活。同样,如果用户选择删除“插件”,然后让代码从servletconfig中删除类。动态添加servlet到servletConfig

回答

5

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

你可以在Tomcat中做到这一点。在您的Web应用程序中,您的主servlet(创建其他人)必须执行ContainerServlet,以便您可以获取Wrapper对象。一旦你安装了你的班级档案,你可以拨打以下电话:

​​

这些调用会立即创建一个servlet。你需要找到方法来坚持这些信息。您可以通过更新web.xml或写入您自己的文件来完成此操作。

+0

这非常完美,非常感谢。 – BigBadOwl 2009-12-13 21:35:40

1

向正在运行的应用程序中添加和从中删除类很困难。你可能想看看JRebel的商业解决方案。

如果您的用户没有很长时间的正在运行的对话/会话,可能重新启动您的Web应用程序可能会很快,以至于他们不会注意到。如果这会为你做,那么问题就变得很容易。

假设你正在运行Tomcat,你可以用reloadable=true配置您的服务器,当你抛出一个新的web.xmlwebapps目录将重新启动应用程序。您可以将新类添加到WEB-INF/classes目录,然后更新web.xml,这应该可以正常工作。如果这些类正在使用,删除类可能会更困难。您可能需要执行2个步骤,首先部署不再路由到给定Servlet类的web.xml,然后等待一段时间让类用户离开,然后删除该类并重新部署更新的web.xml

0

我不认为你可以做到这一点动态,但你可以尝试使用预先配置的过滤器使servlet活动或不活动。使筛选器检查一个可以在数据库或文件系统中动态更改的值,并告诉它如何在servlet“关闭”时重新路由请求。

我认为在没有给用户提供某种反馈的情况下简单地关闭servlet是不礼貌的。