diff --git a/24-httpserver/httpserver/main.go b/24-httpserver/httpserver/main.go index 95fd3e1..16f97c9 100644 --- a/24-httpserver/httpserver/main.go +++ b/24-httpserver/httpserver/main.go @@ -1,46 +1,7 @@ package main -import ( - "io" - "net/http" -) - -type StringHandle struct { - message string -} - -func (sh *StringHandle) ServeHTTP(writer http.ResponseWriter, request *http.Request) { - - Printfln("\n----------\nMethod: %v Protocol: %v Host: %v URL: %v URL.Host: %v RequestURI: %v", - request.Method, request.Proto, request.Host, - request.URL.String(), request.URL.Host, request.RequestURI) - for name, val := range request.Header { - Printfln("Header: %v = %v", name, val) - } - Printfln("RemoteAddr: %v", request.RemoteAddr) - Printfln("ContentLength: %v", request.ContentLength) - Printfln("Body: %v", request.Body) - Printfln("TLS: %v", request.TLS) - Printfln("--------------") - if request.URL.Path == "/favicon.ico" { - Printfln("Request for favicon.ico detected - returning 404") - Printfln("--------------\n") - writer.WriteHeader(http.StatusNotFound) - return - } - writeLen, err := io.WriteString(writer, sh.message) - if err != nil { - Printfln("ServeHTTP Error: %v", err) - return - } - Printfln("ServeHTTP Wrote %d bytes", writeLen) - Printfln("--------------\n") -} - func main() { - err := http.ListenAndServe("localhost:5000", &StringHandle{message: "Hello World!"}) - if err != nil { - Printfln("ListenAndServe Error: %v", err) - return - } + // main1() + // main2() + main3() } diff --git a/24-httpserver/httpserver/main1.go b/24-httpserver/httpserver/main1.go new file mode 100644 index 0000000..4e346b2 --- /dev/null +++ b/24-httpserver/httpserver/main1.go @@ -0,0 +1,46 @@ +package main + +import ( + "io" + "net/http" +) + +type StringHandle1 struct { + message string +} + +func (sh *StringHandle1) ServeHTTP(writer http.ResponseWriter, request *http.Request) { + + Printfln("\n----------\nMethod: %v Protocol: %v Host: %v URL: %v URL.Host: %v RequestURI: %v", + request.Method, request.Proto, request.Host, + request.URL.String(), request.URL.Host, request.RequestURI) + for name, val := range request.Header { + Printfln("Header: %v = %v", name, val) + } + Printfln("RemoteAddr: %v", request.RemoteAddr) + Printfln("ContentLength: %v", request.ContentLength) + Printfln("Body: %v", request.Body) + Printfln("TLS: %v", request.TLS) + Printfln("--------------") + if request.URL.Path == "/favicon.ico" { + Printfln("Request for favicon.ico detected - returning 404") + Printfln("--------------\n") + writer.WriteHeader(http.StatusNotFound) + return + } + writeLen, err := io.WriteString(writer, sh.message) + if err != nil { + Printfln("ServeHTTP Error: %v", err) + return + } + Printfln("ServeHTTP Wrote %d bytes", writeLen) + Printfln("--------------\n") +} + +func main1() { + err := http.ListenAndServe("localhost:5000", &StringHandle1{message: "Hello World!"}) + if err != nil { + Printfln("ListenAndServe Error: %v", err) + return + } +} diff --git a/24-httpserver/httpserver/main2.go b/24-httpserver/httpserver/main2.go new file mode 100644 index 0000000..92bb70e --- /dev/null +++ b/24-httpserver/httpserver/main2.go @@ -0,0 +1,40 @@ +package main + +import ( + "io" + "net/http" +) + +type StringHandle2 struct { + message string +} + +func (sh *StringHandle2) ServeHTTP(writer http.ResponseWriter, request *http.Request) { + + Printfln("\n----------\nMethod: %v Protocol: %v Host: %v URL: %v URL.Host: %v RequestURI: %v", + request.Method, request.Proto, request.Host, + request.URL.String(), request.URL.Host, request.RequestURI) + + switch request.URL.Path { + case "/favicon.ico": + http.NotFound(writer, request) + case "/message": + writeLen, err := io.WriteString(writer, sh.message) + if err != nil { + Printfln("ServeHTTP Error: %v", err) + return + } + Printfln("ServeHTTP Wrote %d bytes", writeLen) + default: + http.Redirect(writer, request, "/message", http.StatusTemporaryRedirect) + } + Printfln("--------------\n") +} + +func main2() { + err := http.ListenAndServe("localhost:5000", &StringHandle2{message: "Hello World!"}) + if err != nil { + Printfln("ListenAndServe Error: %v", err) + return + } +} diff --git a/24-httpserver/httpserver/main3.go b/24-httpserver/httpserver/main3.go new file mode 100644 index 0000000..312ed96 --- /dev/null +++ b/24-httpserver/httpserver/main3.go @@ -0,0 +1,26 @@ +package main + +import ( + "io" + "net/http" +) + +type StringHandle3 struct { + message string +} + +func (sh *StringHandle3) ServeHTTP(writer http.ResponseWriter, request *http.Request) { + Printfln("Request for %v", request.URL.Path) + io.WriteString(writer, sh.message) +} + +func main3() { + http.Handle("/message", &StringHandle3{message: "Hello World!"}) + http.Handle("/favicon.ico", http.NotFoundHandler()) + http.Handle("/", http.RedirectHandler("/message", http.StatusTemporaryRedirect)) + err := http.ListenAndServe("localhost:5000", nil) + if err != nil { + Printfln("ListenAndServe Error: %v", err) + return + } +}