|
@@ -0,0 +1,57 @@
|
|
|
+package benchmarks;
|
|
|
+
|
|
|
+import java.io.ByteArrayInputStream;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
|
|
|
+import fi.iki.elonen.NanoHTTPD;
|
|
|
+
|
|
|
+public class Server extends NanoHTTPD {
|
|
|
+
|
|
|
+ private static final String SERVER_NAME = "NanoHTTPD";
|
|
|
+ private static final String HELLO_TEXT = "Hello, World!";
|
|
|
+ private static final byte[] HELLO_BYTES = HELLO_TEXT.getBytes();
|
|
|
+ private static final int HELLO_LENGTH = HELLO_BYTES.length;
|
|
|
+ private static final ObjectMapper MAPPER = new ObjectMapper();
|
|
|
+
|
|
|
+ static {
|
|
|
+ MAPPER.registerModule(new AfterburnerModule());
|
|
|
+ }
|
|
|
+
|
|
|
+ public Server(int port) {
|
|
|
+ super(port);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override public Response serve(IHTTPSession session) {
|
|
|
+ Response response;
|
|
|
+ switch (session.getUri()) {
|
|
|
+
|
|
|
+ case "/plaintext":
|
|
|
+ response = newFixedLengthResponse(Response.Status.OK, "text/plain",
|
|
|
+ new ByteArrayInputStream(HELLO_BYTES), HELLO_LENGTH);
|
|
|
+ response.addHeader("Server", SERVER_NAME);
|
|
|
+ return response;
|
|
|
+
|
|
|
+ case "/json":
|
|
|
+ Message msg = new Message(HELLO_TEXT);
|
|
|
+ byte[] bytes;
|
|
|
+ try {
|
|
|
+ bytes = MAPPER.writeValueAsBytes(msg);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ response = newFixedLengthResponse(Response.Status.OK, "application/json",
|
|
|
+ new ByteArrayInputStream(bytes), bytes.length);
|
|
|
+ response.addHeader("Server", SERVER_NAME);
|
|
|
+ return response;
|
|
|
+
|
|
|
+ default:
|
|
|
+ return newFixedLengthResponse(Response.Status.NOT_FOUND, MIME_PLAINTEXT, "Not found");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) throws Exception {
|
|
|
+ int port = args.length > 0 ? Integer.parseInt(args[0]) : 8080;
|
|
|
+ NanoHTTPD server = new Server(port);
|
|
|
+ server.start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
|
|
|
+ }
|
|
|
+}
|