傳統的Web應用開發局限於有限的靜態頁面(HTML靜態頁面),不利於系統的擴展,不能提供及時信息,而且修改維護麻煩,所以建立一個動態Web應用程序尤為重要。一方面根據訪問者的不同請求返回不同的訪問信息,即滿足服務的多樣性;另一方面,可以直接通過后台管理頁面發布和修改信息即可,再也不需要修改頁面程序。
下面介紹一種簡單的創建動態頁面的方法和技術:
CGI:Common Gateway Interface,公共網關接口
CGI, 一種基於瀏覽器的輸入、在Web服務器上運行的程序方法。CGI腳本簡單地講是個運行在Web服務器上的程序, 有瀏覽器的輸入觸發. 這個腳本通常象服務器和系統中其他程序如數據庫的橋梁。CGI是一種接口的標准,並不區分編程語言,也就是說,CGI可以用任何一種語言編寫,只要這種語言具有標准輸入、輸出和環境變量。CGI會將標准輸出重定向到給http的response,返回給瀏覽器。其操作流程如下圖:
首先用戶需要在瀏覽器地址欄輸入URL地址,或者單擊鏈接來調用相應的CGI程序,例如chenbjin.tk/cgi-bin/test.cgi。通過URL地址,客戶端取得與域名為chenbjin.tk的服務器主機連接,通過Web服務器調用cgi-bin目錄下的test.cgi程序,然后將動態生成的HTML頁面輸出,最后由Web服務器通過網絡將生成的HTML頁面返回給客戶端瀏覽器。
CGI程序在服務器端執行,並可以和Web服務器在同一主機上。常用的CGI語言有Perl、shell、Python,在windows上也可以用C、C++或Java等進行編寫。下面簡單介紹shell編寫CGI程序。涉及web服務器的搭建,以及具體CGI環境的配置,這里不做詳細介紹,有興趣的朋友可看文章最后的鏈接。
#!/bin/sh echo "Content-type:text/html" echo echo '<html>' echo '<head>' echo '<title>Hello World - First CGI Program</title>' echo '</head>' echo '<body>' echo '<h2>Hello World! This is my first CGI program</h2>' echo '</body>' echo '</html>'
第一行是個特殊的命令,告訴UNIX系統這是個shell腳本;
第三行是Web服務器用來告訴瀏覽器輸出這個文本是什么類型的. 有關content-type解釋可以見有關HTML的說明。有三個類型的頭部: Content-type, Location, 和Status。其中 Content-type 最普遍的。注意content-type 后面必須跟一個空行. 如果你沒有空行,服務器將無法搞清這個頭部在哪里結束。
再接着下面是普通的html頁面內容,相信大家都能看懂。
對於CGI而言,最主要就是接收到用戶的請求,從請求中,解析出get或者post方法傳遞過來的參數。這點,我認為也是對於初學者最麻煩的地方,這里提供一個已經完成這種功能的腳本—proccgi.sh(http://www.fpx.de/fp/Software/proccgi.sh)。這個腳本可以直接解析出get和post方法傳過來的數據。
這里以一個簡單的form表單來描述:
<form action="http://chenbjin.tk/cgi-bin/test.cgi" method="post"> email: <input type="text" name="email"/> user: <input type="text" name="user"/> <input type="submit" value="submit"/> </form>
提交郵箱及用戶名到test.cgi,此時test.cgi便能獲取表單中傳遞的數據。
使用方法:在test.cgi腳本中調用eval './proccgi.sh $*'語句,然后使用"$FORM_"和參數的key,就可以獲得參數的值了,如email="$FORM_email"。
#!/bin/sh eval 'proccgi.sh $*' mail=$FORM_email user=$FORM_user echo Content-type: text/plain echo echo "傳遞的參數及其值:[mail,$mail] ,[user,$user]" echo done.
雖然CGI實現了網站動態性,但是CGI也存在很多不足之處:
1、需要為每個請求啟動一個操作CGI程序的系統進程,如果請求非常頻繁,開銷會很大
2、需要重復編寫網絡協議的代碼以及進行編碼,耗時長。
人往高處走,偉大的程序員都會尋求更優的途徑來解決問題,既然CGI有不足,那自然會有新的技術出現解決這些問題。
---------------------------------------------------
有興趣的同學可通過以下鏈接進一步學習CGI:
1、CGI入門教程:http://www.jdon.com/idea/cgi.htm
2、c語言寫CGI程序:http://www.cs.tut.fi/~jkorpela/forms/cgic.html
3、perl寫CGI程序:http://www.yiibai.com/perl/perl_cgi.html
4、python寫CGI程序:http://www.yiibai.com/python/python_cgi_programming.html
4、proccgi.sh源網址:http://www.fpx.de/fp/Software/ProcCGIsh.html