package main
import (
"fmt"
"html/template"
"log"
"net/http"
"strings"
)
func main() {
http.HandleFunc("/", sayhello) //設定訪問的路由
http.HandleFunc("/login", login) //設定訪問的路由
err := http.ListenAndServe(":9999", nil) //設定監聽地址和連接埠
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
func sayhello(w http.ResponseWriter, r *http.Request) { //用於輸出首頁面
r.ParseForm()
fmt.Println(r.Form)
fmt.Println("path", r.URL.Path)
fmt.Println("scheme", r.URL.Scheme)
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("value:", strings.Join(v, ""))
}
fmt.Fprintf(w, "Hello Golang")
}
/*
該函數根據提交方法執行不同的操作。
如果提交方法是get,則向用戶端輸出登入頁面
如果提交方法是post,則擷取用戶端提交的表單內容
*/
func login(w http.ResponseWriter, r *http.Request) {
fmt.Println("method :", r.Method)
if r.Method == "GET" {
t, _ := template.ParseFiles("login.html")
t.Execute(w, nil)
} else {
r.ParseForm() //這裡的ParseForm方法調用是必須的,否則下面無法擷取表單內容
//下面的代碼是對錶單內容的邏輯處理
fmt.Println("username :", r.Form["username"])
fmt.Println("password :", r.Form["password"])
}
}
控制台直接運行:
使用IE進行訪問首頁面:
控制台輸出:
接著,使用IE訪問登入頁面:
控制台輸出:
輸入使用者名稱和密碼,點擊登入按鈕,將資料提交給後台進行邏輯處理:
控制台輸出:
後台將表單裡的使用者名稱和密碼進行了列印。