AytchTeeTeePee.md
· 1.4 KiB · Markdown
Raw
# AytchTeeTeePee
Verrrrry simple HTTP server in Java. Well, not as simple as golang or python, but well, _because java._
in python3
```python
bash$ python3 -m http.server 9000
```
(seriously, will start serving files from CWD)
in golang
```go
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
```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)
}
}
```
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
· 3.2 KiB · Java
Raw
package rocks.zipcode;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class Main {
static final int port = 8000;
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(Main.port), 0);
server.createContext("/", new RootHandler());
server.createContext("/test", new TestHandler());
server.createContext("/foo", new FooHandler());
server.createContext("/bar", new BarHandler());
// server.setExecutor(null); // creates a default executor
// server.setExecutor(java.util.concurrent.Executors.newCachedThreadPool());
server.setExecutor(java.util.concurrent.Executors.newFixedThreadPool(5));
server.start();
}
static class RootHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String response = "Zip Code Rocks!";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
static class TestHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String response = "Testing! Testing! Zip Code Rocks!";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
static class FooHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String response = "<HTML><BODY><h1>HTML</h1><p>This is a proper paragraph of text.</p></BODY></HTML>";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
static class BarHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String response = MakeBody();
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
static String MakeBody() {
StringBuilder sb = new StringBuilder();
String css = "body { font-family: Arial, sans-serif; line-height: 1.6; color: #222; " +
"max-width: 40rem; padding: 2rem; margin: auto; background: #fafafa; }" +
"a { color: #2ECC40; } h1, h2, strong { color: #111; }";
sb.append("<HTML>");
sb.append("<style>");
sb.append(css);
sb.append("</style>");
sb.append("<BODY><h1>HTML Title</h1>");
sb.append("<p>");
for(int i = 0; i<10; i++) {
sb.append("This is a proper paragraph of text. ");
}
sb.append("</p>");
sb.append("</BODY></HTML>");
return sb.toString();
}
}
| 1 | package rocks.zipcode; |
| 2 | |
| 3 | import java.io.IOException; |
| 4 | import java.io.OutputStream; |
| 5 | import java.net.InetSocketAddress; |
| 6 | |
| 7 | import com.sun.net.httpserver.HttpExchange; |
| 8 | import com.sun.net.httpserver.HttpHandler; |
| 9 | import com.sun.net.httpserver.HttpServer; |
| 10 | |
| 11 | public 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 |