/* * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/* * Simple http server to service http requests. Auto shutdown * if "idle" (no requests) for 10 seconds. Forks worker thread * to service persistent connections. Work threads shutdown if * "idle" for 5 seconds.
*/ staticclass HttpServer implements Runnable {
publicvoid run() {
InputStream in = null; try {
in = s.getInputStream(); for (;;) {
// read entire request from client byte b[] = newbyte[1024]; int n, total=0;
// max 5 seconds to wait for new request
s.setSoTimeout(5000); try { do {
n = in.read(b, total, b.length-total); // max 0.5 seconds between each segment // of request.
s.setSoTimeout(500); if (n > 0) total += n;
} while (n > 0);
} catch (SocketTimeoutException e) { }
// create http server
HttpServer svr = HttpServer.create();
// create class loader
URL urls[] = {
URIBuilder.newBuilder().scheme("http").loopback().port(svr.port())
.path("/dir1/").toURL(),
URIBuilder.newBuilder().scheme("http").loopback().port(svr.port())
.path("/dir2/").toURL(),
};
URLClassLoader cl = new URLClassLoader(urls);
// Test 1 - check that getResource does single HEAD request
svr.counters().reset();
URL url = cl.getResource("foo.gif");
System.out.println(svr.counters());
// Test 2 - check that getResourceAsStream does at most // one GET request
svr.counters().reset();
InputStream in = cl.getResourceAsStream("foo2.gif");
in.close();
System.out.println(svr.counters()); if (svr.counters().getCount() > 1) {
failed = true;
}
// Test 3 - check that getResources only does HEAD requests
svr.counters().reset();
Enumeration e = cl.getResources("foos.gif"); try { for (;;) {
e.nextElement();
}
} catch (NoSuchElementException exc) { }
System.out.println(svr.counters()); if (svr.counters().getCount() > 1) {
failed = true;
}
// shutdown http server
svr.shutdown();
if (failed) { thrownew Exception("Excessive http connections established - Test failed");
}
}
}
¤ Dauer der Verarbeitung: 0.2 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.