Web プログラムの入出力を処理します
I. 概要
小規模な Web アプリケーションを設計して、静的ファイルの提供、JS リクエストのサポート、テンプレート出力、フォーム処理、フィルター ミドルウェアの設計などの機能を実証します。(データベースのサポートは必要ありません)
2. タスク
Web アプリケーションのプログラミング Cloudgo-io。タスク完了の証拠をプロジェクトの README.MD に記載してください。
基本的な要件
- 静的ファイルの提供をサポート
- シンプルなJSアクセスをサポート
- フォームを送信してフォームを出力する
- 開発中にプロンプトを表示し
/unknown
、コードを返す5xx
3. 基本機能の実装
1.静的ファイルサービスをサポート
静的フォルダアクセス(フォルダファイル一覧表示)
静的ファイル アクセス (特定のファイルを表示)
ハンドル関数コードを設定します。
mx.PathPrefix("/static").Handler(http.StripPrefix("/static/",http.FileServer(http.Dir(webRoot+"/assets/"))))
アクセス リンクに /static プレフィックスが付いている場合は、静的ファイル アクセス モードを開始します。
2. シンプルな JS アクセスをサポート
jsファイル
jquery の非同期アクセスを使用して Cloudio サーバーにアクセスし、テーブルのタイトルを返します。
$(document).ready(function() {
$.ajax({
url: "/getHeader"
}).then(function(data) {
alert("simple js acess: " + data);
$('#head').html(data);
});
});
goハンドラー関数
http 応答ストリームを使用してテーブル タイトルを返します。
func getHeader(w http.ResponseWriter, req *http.Request) {
w.Write([]byte("register"))
}
jsファイルを呼び出す
ヘッダーを更新する
3. フォームを送信し、フォームを出力します
localhost:8080でアクセスするとフォームページに入り、フォームが に送信されますlocalhost:8080/register
。
<form action="/register" method="post">
姓名:<input type="text" name="username">
密码:<input type="text" name="password">
邮箱:<input type="text" name="mail">
电话:<input type="text" name="phone">
<input type="submit" value="提交">
</form>
localhost:8080/register
postメソッドのレスポンスを設定する
mx.HandleFunc("/register", register).Methods("POST")
応答関数
まず投稿データを取得し、次にテンプレートを呼び出してパラメーターを含む HTML ファイルを作成し、次に Execute を呼び出して w を通じて HTML ファイルを返します。
func register(w http.ResponseWriter, req *http.Request) {
req.ParseForm()
username := req.Form["username"][0]
password := req.Form["password"][0]
mail := req.Form["mail"][0]
phone := req.Form["phone"][0]
page := template.Must(template.ParseFiles("assets/info.html"))
page.Execute(w, map[string]string{
"username": username,
"password": password,
"mail": mail,
"phone": phone,
})
}
情報.html
フォームを送信した後、情報ページに入って送信したばかりのデータを表示し{
{.variable}}
、渡されたパラメーターを使用します。
<html>
<head>
<link rel="stylesheet" href="css/main.css"/>
<title>Info</title>
</head>
<body>
<table border="1">
<tr>
<td>用户名</td><td>邮箱</td><td>电话</td>
</tr>
<tr>
<td>{
{.username}}</td><td>{
{.mail}}</td><td>{
{.phone}}</td>
</tr>
</table>
</body>
</html>
フォームに記入する
送信後にフォームを表示
4. /unknown の開発プロンプトを表示し、リターン コード 5xx を返します。
ハンドラー関数の設定
mx.HandleFunc("/unknown", unKnown).Methods("GET")
処理関数内で http の Error 関数を呼び出します。
func unKnown(reqw http.ResponseWriter, req *http.Request) {
http.Error(reqw, "501 Unkown!", 501)
}
4. 要件の引き上げ
1. gzipフィルターのソースコードを解析して読み取る
gzip の概要
Gzip は元々、UNIX システムでのファイル圧縮用に Jean Loup Gailly と Mark Adler によって作成されました。Linux では、接尾辞 Gz の付いたファイルをよく使用しますが、それらは gzip 形式です。現在、インターネット上で一般的なファイル圧縮形式となっています。
HTTP プロトコル上の Gzip エンコードは、Web アプリケーションのパフォーマンスを向上させるために使用されるテクノロジです。トラフィックの多い Web サイトでは、ユーザーが高速に感じられるようにするために gzip 圧縮テクノロジーが使用されることがよくあります。これは通常、WWW サーバーにインストールされている機能を指します。誰かがこのサーバーの Web サイトにアクセスすると、サーバーのこの機能が Web コンテンツを圧縮し、訪問先のコンピューターのブラウザーに送信して表示します。一般に、プレーン テキスト コンテンツは元のサイズの 40% まで圧縮できます。このようにすると、送信が非常に速くなり、URL をクリックしたときにすぐに表示されるという効果があります。当然、サーバーへの負荷も増大するため、この機能モジュールは多くのサーバーに搭載されています。