--- a/jdk/test/com/sun/net/httpserver/FileServerHandler.java Thu Feb 25 11:27:30 2016 -0800
+++ b/jdk/test/com/sun/net/httpserver/FileServerHandler.java Thu Feb 25 23:14:22 2016 +0000
@@ -23,6 +23,7 @@
import java.util.*;
import java.util.concurrent.*;
+import java.util.logging.*;
import java.io.*;
import java.net.*;
import java.security.*;
@@ -36,6 +37,10 @@
* Must be given an abs pathname to the document root.
* Directory listings together with text + html files
* can be served.
+ *
+ * File Server created on files sub-path
+ *
+ * Echo server created on echo sub-path
*/
public class FileServerHandler implements HttpHandler {
@@ -44,14 +49,24 @@
System.out.println ("usage: java FileServerHandler rootDir port logfilename");
System.exit(1);
}
+ Logger logger = Logger.getLogger("com.sun.net.httpserver");
+ ConsoleHandler ch = new ConsoleHandler();
+ logger.setLevel(Level.ALL);
+ ch.setLevel(Level.ALL);
+ logger.addHandler(ch);
+
String rootDir = args[0];
int port = Integer.parseInt (args[1]);
String logfile = args[2];
- HttpServer server = HttpServer.create (new InetSocketAddress (8000), 0);
+ HttpServer server = HttpServer.create (new InetSocketAddress (port), 0);
HttpHandler h = new FileServerHandler (rootDir);
+ HttpHandler h1 = new EchoHandler ();
- HttpContext c = server.createContext ("/", h);
+ HttpContext c = server.createContext ("/files", h);
c.getFilters().add (new LogFilter (new File (logfile)));
+ HttpContext c1 = server.createContext ("/echo", h1);
+ c.getFilters().add (new LogFilter (new File (logfile)));
+ c1.getFilters().add (new LogFilter (new File (logfile)));
server.setExecutor (Executors.newCachedThreadPool());
server.start ();
}
@@ -72,7 +87,8 @@
URI uri = t.getRequestURI();
String path = uri.getPath();
- while (is.read () != -1) ;
+ int x = 0;
+ while (is.read () != -1) x++;
is.close();
File f = new File (docroot, path);
if (!f.exists()) {
@@ -164,3 +180,61 @@
t.close();
}
}
+
+class EchoHandler implements HttpHandler {
+
+ byte[] read(InputStream is) throws IOException {
+ byte[] buf = new byte[1024];
+ byte[] result = new byte[0];
+
+ while (true) {
+ int n = is.read(buf);
+ if (n > 0) {
+ byte[] b1 = new byte[result.length + n];
+ System.arraycopy(result, 0, b1, 0, result.length);
+ System.arraycopy(buf, 0, b1, result.length, n);
+ result = b1;
+ } else if (n == -1) {
+ return result;
+ }
+ }
+ }
+
+ public void handle (HttpExchange t)
+ throws IOException
+ {
+ InputStream is = t.getRequestBody();
+ Headers map = t.getRequestHeaders();
+ String fixedrequest = map.getFirst ("XFixed");
+
+ // return the number of bytes received (no echo)
+ String summary = map.getFirst ("XSummary");
+ if (fixedrequest != null && summary == null) {
+ byte[] in = read(is);
+ t.sendResponseHeaders(200, in.length);
+ OutputStream os = t.getResponseBody();
+ os.write(in);
+ os.close();
+ is.close();
+ } else {
+ OutputStream os = t.getResponseBody();
+ byte[] buf = new byte[64 * 1024];
+ t.sendResponseHeaders(200, 0);
+ int n, count=0;;
+
+ while ((n = is.read(buf)) != -1) {
+ if (summary == null) {
+ os.write(buf, 0, n);
+ }
+ count += n;
+ }
+ if (summary != null) {
+ String s = Integer.toString(count);
+ os.write(s.getBytes());
+ }
+ os.close();
+ is.close();
+ }
+ }
+}
+