HelloWebServer.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package hello;
  2. import java.io.IOException;
  3. import java.util.concurrent.*;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
  6. import net.freeutils.httpserver.HTTPServer;
  7. import net.freeutils.httpserver.HTTPServer.*;
  8. public class HelloWebServer {
  9. private static final String HELLO_TEXT = "Hello, World!";
  10. private static final byte[] HELLO_BYTES = HELLO_TEXT.getBytes();
  11. private static final String HELLO_LENGTH = Long.toString(HELLO_BYTES.length);
  12. private static final ObjectMapper MAPPER = new ObjectMapper();
  13. static {
  14. MAPPER.registerModule(new AfterburnerModule());
  15. }
  16. public static void main(String[] args) throws Exception {
  17. // parse arguments
  18. int port = args.length > 0 ? Integer.parseInt(args[0]) : 8080;
  19. // create server
  20. HTTPServer server = new HTTPServer(port);
  21. server.setExecutor(new ThreadPoolExecutor(
  22. 8, Integer.MAX_VALUE, 300, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()));
  23. VirtualHost host = server.getVirtualHost(null); // default virtual host
  24. // add plaintext test handler
  25. host.addContext("/plaintext", new ContextHandler() {
  26. @Override
  27. public int serve(Request req, Response resp) throws IOException {
  28. resp.getHeaders().add("Content-Type", "text/plain");
  29. resp.getHeaders().add("Content-Length", HELLO_LENGTH);
  30. resp.sendHeaders(200);
  31. resp.getOutputStream().write(HELLO_BYTES);
  32. return 0;
  33. }
  34. });
  35. // add json test handler
  36. host.addContext("/json", new ContextHandler() {
  37. @Override
  38. public int serve(Request req, Response resp) throws IOException {
  39. Message msg = new Message(HELLO_TEXT);
  40. byte[] bytes;
  41. try {
  42. bytes = MAPPER.writeValueAsBytes(msg);
  43. } catch (Exception e) {
  44. throw new RuntimeException(e);
  45. }
  46. resp.getHeaders().add("Content-Type", "application/json");
  47. resp.getHeaders().add("Content-Length", Long.toString(bytes.length));
  48. resp.sendHeaders(200);
  49. resp.getOutputStream().write(bytes);
  50. return 0;
  51. }
  52. });
  53. // start server
  54. server.start();
  55. }
  56. }