AytchTeeTeePee.md
· 1.4 KiB · Markdown
原始文件
# 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
原始文件
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 |