Jetty:动态删除已注册的servlet

Jetty:动态删除已注册的servlet,jetty,embedded-jetty,Jetty,Embedded Jetty,我用WebAppContext创建并启动了jetty服务器。我还可以使用addServlet方法将servlet添加到WebAppContext。但是我想动态删除这个servlet。 我该怎么做?WebAppContext中没有提供类似removeServlet()的功能。您需要手动执行此操作(可能应该有一个方便的方法,但没有) 在Jetty 7中,类似(未经测试): public void removeservlet(WebAppContext WebAppContext,类servlet)

我用WebAppContext创建并启动了jetty服务器。我还可以使用addServlet方法将servlet添加到WebAppContext。但是我想动态删除这个servlet。
我该怎么做?WebAppContext中没有提供类似removeServlet()的功能。

您需要手动执行此操作(可能应该有一个方便的方法,但没有)

在Jetty 7中,类似(未经测试):

public void removeservlet(WebAppContext WebAppContext,类servlet)
{
ServletHandler=webAppContext.getServletHandler();
/*未实现类“servlet”的所有servlet的列表,
(即,应将其保存在上下文中)*/
List servlets=new ArrayList();
/*这些名称包含我们删除的所有servlet,以便我们也可以删除映射*/
Set name=新的HashSet();
for(ServletHolder:handler.getServlets())
{
/*如果它是我们要删除的类,那么只需跟踪它的名称即可*/
if(servlet.isInstance(holder.getServlet())
{
name.add(holder.getName());
}
我们保留它*/
{
servlets.add(holder);
}
}
列表映射=新建ArrayList();
for(ServletMapping:handler.getServletMappings())
{
/*只保留不指向我们删除的servlet之一的映射*/
如果(!names.contains(mapping.getServletName()))
{
添加(映射);
}
}
/*为映射和servlet设置新配置*/
handler.setServletMappings(mappings.toArray(新的ServletMapping[0]);
handler.setServlets(servlets.toArray(新的ServletHolder[0]);
}

没问题-但是如果您喜欢答案,您应该单击答案右上角的勾号,将其标记为您接受的答案。这是表示“谢谢”的最佳方式关于堆栈溢出。嘿,蒂姆。虽然这个解决方案有效,但我想知道这里正在进行的servlet的重新映射。这段代码是否在每次调用时都会再次重新设置所有servlet?如果服务器只是为了删除其中一个servlet并将其余的servlet放回,似乎会很麻烦。这如果我是对的,可能在比赛中领先。