/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package test; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import java.io.IOException; import java.net.InetSocketAddress; import java.security.AccessController; import java.security.PrivilegedExceptionAction; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; /** * * Sample case which starts and stops HTTPServer on the same port in the loop */ public class TestHttpServer { private HttpServer server; private ExecutorService executors; final HttpHandler handler = new ParameterizedHandler(); private int port; private TestHttpServer(int port) { this.port = port; } public static TestHttpServer startServer(int startingPort) throws Exception { int max = startingPort + 2; for (int port = startingPort; port <= max; port++) { try { System.out.println("Starting server at port " + port); TestHttpServer server = new TestHttpServer(port); server.start(); System.out.println("Server started " + server + " at port " + port); return server; } catch (Exception e) { e.printStackTrace(System.out); System.out.println("Trying next port because: " + e.getMessage()); } } throw new Exception("Failed to start webserver: tried port numbers: " + startingPort + "-" + max + ", need investigate"); } public void start() throws Exception { final InetSocketAddress addr = new InetSocketAddress(port); server = HttpServer.create(addr, 0); AccessController.doPrivileged( new PrivilegedExceptionAction() { public Object run() { server.createContext("/", handler); executors = Executors.newCachedThreadPool( new ThreadFactory() { public Thread newThread(Runnable r) { Thread t = new Thread(r); t.setDaemon(true); return t; } }); server.setExecutor(executors); server.start(); return null; } }); System.out.println("Server IS listening on port " + port); } public void shutdown() throws Exception { AccessController.doPrivileged( new PrivilegedExceptionAction() { public Object run() { if (executors != null) { executors.shutdownNow(); executors = null; } if (server != null) { server.stop(0); System.out.println("Stopped server on port " + server.getAddress().getPort()); server = null; } return null; } }); } class ParameterizedHandler implements HttpHandler { public void handle(HttpExchange exchange) throws IOException { } } public static void main(String[] args) { System.out.println(System.getProperty("java.version")); for (int i = 1; i < 100; i++) { System.out.println("Starting server " + i); try { TestHttpServer server = TestHttpServer.startServer(1835); server.shutdown(); } catch (Exception ex) { ex.printStackTrace(); } } } }