Java 如何关闭com.sun.net.httpserver.httpserver?
JDK 6中嵌入的Http服务器对开发web服务有很大帮助,但我发布了一个端点,然后代码崩溃,服务器继续运行Java 如何关闭com.sun.net.httpserver.httpserver?,java,jdk1.6,com.sun.net.httpserver,Java,Jdk1.6,Com.sun.net.httpserver,JDK 6中嵌入的Http服务器对开发web服务有很大帮助,但我发布了一个端点,然后代码崩溃,服务器继续运行 一旦丢失了对嵌入式服务器(或已发布的端点)的引用,如何关闭该服务器?我以前从未使用过该服务器,并且找不到任何好的文档。也许你已经想到了这些不那么优雅的解决方案,但我只是想提一下 似乎com.sun.net.httpserver.httpserver有一个名为HttpServerImpl的实现类。它有一个名为stop()的方法 或者,您可以找到正在服务器套接字上侦听的线程并调用interr
一旦丢失了对嵌入式服务器(或已发布的端点)的引用,如何关闭该服务器?我以前从未使用过该服务器,并且找不到任何好的文档。也许你已经想到了这些不那么优雅的解决方案,但我只是想提一下 似乎com.sun.net.httpserver.httpserver有一个名为HttpServerImpl的实现类。它有一个名为stop()的方法 或者,您可以找到正在服务器套接字上侦听的线程并调用interrupt() 肖恩 查找端口打开的进程的pid(假设您知道端口),以及
终止进程。那么,不丢失引用如何?当你说你的代码崩溃时,我假设你在某个地方遇到了异常。具体在哪里?因此,能够拦截此异常的人显然还需要有一个对HttpServer的引用,您可能需要将其传递给自己 编辑:哦。在这种情况下,如果您不想杀死包含HttpServer的整个JVM,那么您将需要向环境提供某种形式的IPC,例如,通过RMI的命令通道,可以从Java程序(以及Ant)调用 另一种解决方案是让服务器监听一些“秘密”cookie查询,例如,在启动时打印/保存cookie,以便Ant脚本可以检索cookie,并且可以对“秘密”URL发出查询,服务器将在该URL上正常退出
我会使用快速RMI解决方案。我使用下面的代码启动它
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();
如果我有HttpServerImpl的句柄,我可以对其调用stop(),但我有一个进程创建HttpServer,并希望用另一个进程对其调用stop。呃,它是类上的公共抽象void stop(…),那么问题出在哪里?请看:我应该提供更多的细节。我在一个JVM中发布端点,如果端点上的操作崩溃,我需要在另一个JVM中关闭服务器。我需要调用服务器的管理端口,但我没有看到嵌入式服务器的管理套接字。我猜服务器在JVM中作为线程运行,所以你建议用重拳击倒整个JVM@Dean:我认为您正在寻找一种更干净的解决方案,它不需要重新启动JVM?它是示例客户端中发布端点并执行示例的main()方法。如果它崩溃了,我需要能够通过Ant关闭服务器。publish()和stop()将在不同的JVM中完成;httpThreadPool.shutdown();尝试{httpThreadPool.awaitTerminator(2,TimeUnit.HOURS)}捕获(异常e){…尖叫!…}
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();