Zuletzt aktiv 1750422453

a very simple HTTP server in Java

AytchTeeTeePee.md Orginalformat

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 Orginalformat
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