首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将servlet动态添加到servletConfig

将servlet动态添加到servletConfig
EN

Stack Overflow用户
提问于 2009-12-11 05:52:03
回答 3查看 4.5K关注 0票数 9

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-11 09:47:40

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

您可以在Tomcat中做到这一点。在您的get应用程序中,您的主servlet (创建其他servlet的那个)必须实现ContainerServlet,这样您才能获得Wrapper对象。一旦安装了类文件,您就可以进行以下调用,

代码语言:javascript
复制
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或写入您自己的文件来完成此操作。

票数 5
EN

Stack Overflow用户

发布于 2009-12-11 06:52:21

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2009-12-11 07:46:34

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

我认为简单地关闭一个servlet而不给用户一些反馈是不礼貌的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1884310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档