Última actividad 1750422453

a very simple HTTP server in Java

AytchTeeTeePee.md Sin formato

AytchTeeTeePee

Verrrrry simple HTTP server in Java. Well, not as simple as golang or python, but well, because java.

in python3

bash$ python3 -m http.server 9000

(seriously, will start serving files from CWD)

in golang

package main

import (
    "net/http"
)

// create a handler struct
type HttpHandler struct{}

// implement `ServeHTTP` method on `HttpHandler` struct
func (h HttpHandler) ServeHTTP(res http.ResponseWriter, req *http.Request) {
    // create response binary data
    data := []byte("Hello World!") // slice of bytes
    // write `data` to response
    res.Write(data)
}

func main() {

    // create a new handler
    handler := HttpHandler{}

    // listen and serve
    http.ListenAndServe(":9000", handler)

}

or again in go

package main

import (
	"fmt"
	"io"
	"log"
	"net"
	"net/http"
	"os"
)

func main() {
	http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprint(w, "Hello, playground")
	})

	log.Println("Starting server...")
	l, err := net.Listen("tcp", "localhost:8080")
	if err != nil {
		log.Fatal(err)
	}
	go func() {
		log.Fatal(http.Serve(l, nil))
	}()

	log.Println("Sending request...")
	res, err := http.Get("http://localhost:8080/hello")
	if err != nil {
		log.Fatal(err)
	}

	log.Println("Reading response...")
	if _, err := io.Copy(os.Stdout, res.Body); err != nil {
		log.Fatal(err)
	}
}
httpjava.java Sin formato
1package rocks.zipcode;
2
3import java.io.IOException;
4import java.io.OutputStream;
5import java.net.InetSocketAddress;
6
7import com.sun.net.httpserver.HttpExchange;
8import com.sun.net.httpserver.HttpHandler;
9import com.sun.net.httpserver.HttpServer;
10
11public class Main {
12 static final int port = 8000;
13 public static void main(String[] args) throws Exception {
14 HttpServer server = HttpServer.create(new InetSocketAddress(Main.port), 0);
15 server.createContext("/", new RootHandler());
16 server.createContext("/test", new TestHandler());
17 server.createContext("/foo", new FooHandler());
18 server.createContext("/bar", new BarHandler());
19 // server.setExecutor(null); // creates a default executor
20 // server.setExecutor(java.util.concurrent.Executors.newCachedThreadPool());
21 server.setExecutor(java.util.concurrent.Executors.newFixedThreadPool(5));
22 server.start();
23 }
24
25 static class RootHandler implements HttpHandler {
26 @Override
27 public void handle(HttpExchange t) throws IOException {
28 String response = "Zip Code Rocks!";
29 t.sendResponseHeaders(200, response.length());
30 OutputStream os = t.getResponseBody();
31 os.write(response.getBytes());
32 os.close();
33 }
34 }
35 static class TestHandler implements HttpHandler {
36 @Override
37 public void handle(HttpExchange t) throws IOException {
38 String response = "Testing! Testing! Zip Code Rocks!";
39 t.sendResponseHeaders(200, response.length());
40 OutputStream os = t.getResponseBody();
41 os.write(response.getBytes());
42 os.close();
43 }
44 }
45 static class FooHandler implements HttpHandler {
46 @Override
47 public void handle(HttpExchange t) throws IOException {
48 String response = "<HTML><BODY><h1>HTML</h1><p>This is a proper paragraph of text.</p></BODY></HTML>";
49 t.sendResponseHeaders(200, response.length());
50 OutputStream os = t.getResponseBody();
51 os.write(response.getBytes());
52 os.close();
53 }
54 }
55
56 static class BarHandler implements HttpHandler {
57 @Override
58 public void handle(HttpExchange t) throws IOException {
59 String response = MakeBody();
60 t.sendResponseHeaders(200, response.length());
61 OutputStream os = t.getResponseBody();
62 os.write(response.getBytes());
63 os.close();
64 }
65 }
66
67 static String MakeBody() {
68 StringBuilder sb = new StringBuilder();
69 String css = "body { font-family: Arial, sans-serif; line-height: 1.6; color: #222; " +
70 "max-width: 40rem; padding: 2rem; margin: auto; background: #fafafa; }" +
71 "a { color: #2ECC40; } h1, h2, strong { color: #111; }";
72
73 sb.append("<HTML>");
74 sb.append("<style>");
75 sb.append(css);
76 sb.append("</style>");
77 sb.append("<BODY><h1>HTML Title</h1>");
78 sb.append("<p>");
79 for(int i = 0; i<10; i++) {
80 sb.append("This is a proper paragraph of text. ");
81 }
82 sb.append("</p>");
83 sb.append("</BODY></HTML>");
84
85 return sb.toString();
86 }
87
88}
89