JDK 6中嵌入的Http Server对开发web服务有很大的帮助,但我遇到过这样的情况:我发布了一个端点,然后代码崩溃,让服务器继续运行。
一旦丢失了对嵌入式服务器(或发布的端点)的引用,如何关闭该服务器?
发布于 2010-05-27 06:29:12
我使用下面的代码来启动它
this.httpServer = HttpServer.create(addr, 0);
HttpContext context = this.httpServer.createContext("/", new DocumentProcessHandler());
this.httpThreadPool = Executors.newFixedThreadPool(this.noOfThreads);
this.httpServer.setExecutor(this.httpThreadPool);
this.httpServer.start();和下面的代码来停止它
this.httpServer.stop(1);
this.httpThreadPool.shutdownNow();发布于 2009-05-30 01:26:11
我以前从未使用过这个服务器,也找不到任何好的文档。也许你已经想到了这些不那么优雅的解决方案,但我只是想提一下。
看起来com.sun.net.httpserver.HttpServer有一个名为HttpServerImpl的实现类。它有一个名为stop()的方法。
或者,您可以找到在服务器套接字上侦听的线程,并调用interrupt()。
肖恩
发布于 2009-06-16 09:13:25
那么,为什么不丢失引用呢?当你说你的代码崩溃时,我假设你在某个地方得到了一个异常。具体在哪里?因此,有能力拦截此异常的人显然还需要有对HttpServer的引用,您可能需要自己传递它。
编辑:哦。在这种情况下,如果您不想杀死包含HttpServer的整个JVM,那么您将需要向环境提供某种形式的进程间通信,例如,通过RMI可以从Java程序(以及Ant)调用的命令通道。
另一种解决方案是让服务器侦听一些“秘密”cookie查询,例如,您可以在启动时打印/保存cookie,以便Ant脚本可以检索cookie,并且您可以向您的“秘密”URL发出一个查询,服务器将在该URL上优雅地退出。
我会选择一个快速的RMI解决方案。
https://stackoverflow.com/questions/928211
复制相似问题