學習ASP,最重要的就是要掌握ASP內建的六大物件,如果以前沒接觸過,聰明的您就不要管這些概念了,知道怎麼用就行了,我的觀點是剛開始關鍵在於臨摹學習ASP,最重要的就是要掌握ASP內建的六大物件。事實上,在上一講中,我們已經了解了Response對象,以及Response物件中最常用的Write方法、Redirect方法和Expires屬性。看到物件、方法、屬性、集合、事件這些概念(俺一個都不識!),如果以前沒接觸過,聰明的您就不要管這些概念了,知道怎麼用就行了,我的觀點是剛開始關鍵在於臨摹。下面我們繼續透過實例學習Request對象,為了加深理解,務請執行這些程式看看輸出結果。
一、 使用Request.ServerVariables取得環境變量,這部分內容很簡單,但取得的內容卻很重要,如何取得?請看下例:
複製代碼代碼如下:
<%@ Language=VBScript %>
<HTML><BODY>
<% 'wuf8.asp
Response.Write 運行ASP檔案的路徑: &_
Request.ServerVariables(Script_Name) & <Br>
Response.Write 傳回content的資料長度: &_
Request.ServerVariables(Content_Length) & <Br>
Response.Write 傳回客戶的IP位址: &_
Request.ServerVariables(Remote_Addr) & <Br>
Response.Write 瀏覽器名稱: &_
Request.ServerVariables(HTTP_USER_AGENT) & <Br>
Response.Write 傳回首頁實際實體路徑: &_
Request.ServerVariables(APPL_PHYSICAL_PATH) & <Br>
%>
<table colspan=8 cellpadding=5 border=0>
<tr>
<td align=CENTER bgcolor=#800000 width=109> <font style=ARIAL NARROW color=#ffffff size=2>環境變數名稱</font></td>
<td align=CENTER width=459 bgcolor=#800000> <font style=ARIAL NARROW color=#ffffff size=2>內容</font></td>
</tr>
<tr>
<td bgcolor=f7efde align=CENTER> <font style=ARIAL NARROW size=2>
result1
</font></td>
<td bgcolor=f7efde align=CENTER> <font style=ARIAL NARROW size=2>
result2
</font></td></tr>
</table>
</BODY></HTML>
Now,你應該發現上一講中的例程wuf2.asp原來是多麼的easy!
注意:程式的後面一部分HTML標記純粹是為下面的例子作準備的,所以不要覺得奇怪。那麼,還有哪些環境變數呢?運行下面的例子就知道了(本程式刪除了部分程式碼,最好去我網站下載原始程式便於理解)。
複製代碼代碼如下:
<%@ Language=VBScript %>
<% 'wuf9.asp
Option Explicit
Dim Sv
%>
<HTML><BODY>
<table colspan=8 cellpadding=5 border=0>
<tr>
<td align=CENTER bgcolor=#800000 width=109> <font style=ARIAL NARROW color=#ffffff size=2>環境變數名稱</font></td>
<td align=CENTER width=459 bgcolor=#800000> <font style=ARIAL NARROW color=#ffffff size=2>結果</font></td>
</tr>
<%
for each Sv In Request.ServerVariables
Response.Write <tr>
Response.Write <td bgcolor='f7efde' align=CENTER> <font style='ARIAL NARROW' size='2'>
Response.Write Sv
Response.Write </font></td>
Response.Write <td bgcolor='f7efde' align=CENTER> <font style='ARIAL NARROW' size='2'>
Response.Write Request.ServerVariables(Sv)
Response.Write </font></td></tr>
next
%>
</table>
</BODY></HTML>
這裡使用了For…Each循環,用來列舉一個集合中的所有元素。如果後半部看不懂,請對照wuf8.asp,再瞧瞧運行結果,仔細體會一下(什麼態度?)。
二、 透過表單傳送資料給伺服器(也可這樣理解,伺服器端如何讀取客戶端傳送的資料)
做過主頁,應該知道很多主頁通常都使用Form表單讓使用者輸入數據,然後透過submit(提交)按鈕發送數據。 From表單中的method有兩種主要方法:POST和GET,而action後一般都是指定一個.cgi、.pl或.asp文件,今天我們要學習的就是如果寫這個.asp文件。
(一) 如果使用POST方法傳送數據,則用Request.Form讀取資料。
先編輯以下一個wuf10.htm文件,供使用者輸入資料:
複製代碼代碼如下:
<html>
<body bgcolor=#FFFFFF>
<form method=post action=wuf11.asp>
姓名: <input type=text name=yourname><br>
性別: <select name=gender>
<option>男</option>
<option>女</option>
</select> <br>
留言: <textarea name=message>您好!
注意多行文字的處理</textarea> <br>
嗜好(按住Ctrl鍵可多選):
<select name=hobby multiple size=4>
<option>電腦</option>
<option>購物</option>
<option>電影</option>
<option>閱讀</option>
</select> <br>
<input type=submit name=Submit value=提交>
<input type=reset name=Submit2 value=Reset>
</form>
</body>
</html>
再編寫一個wuf10.htm需用到的檔案wuf11.asp收集資料:
複製代碼代碼如下:
<%@ Language=VBScript %>
<% 'wuf11.asp
Option Explicit
Response.Expires=0
Dim StrName, StrGender, StrM, StrMsg
StrName = Trim(Request.Form(yourname)) 'Trim函式用來除首尾空格
StrGender = Trim(Request.Form(gender))
StrM = Trim(Request.Form(message))
StrMsg = Replace(StrM,vbcrlf,<Br> & vbcrlf)
' vbcrlf相當於回車符和換行符的組合。至於Replace函數,其作用就是將字串StrM中的vbcrlf替換為<Br> & vbcrlf(請思考這個vbcrlf有什麼用?查看輸出檔的HTML源碼就明白了),詳細請參考VBScript幫助。
%>
<HTML><BODY>
姓名: <%= StrName%><Br><Br>
性別: <%= StrGender%><Br><Br>
留言: <Br><Br>
<%= StrM%><Br><Br>
<%= StrMsg%><Br><Br>
實際上, 提交按鈕的值也被傳遞: <Br>
<%= Request.Form(Submit)%><Br><Br>
<% '先把上面看懂, 有興趣再看看如何讀取多個選項
Response.Write 共選擇愛好項數: & Request.Form(hobby).Count & <Br>
Dim I
For I = 1 to Request.Form(hobby).Count
Response.Write Request.Form(hobby)(I) & <Br>
Next
%>
</BODY></HTML>
在這個的例子中,為了便於理解,我們使用了兩個程序,實際上只使用一個程序也可以,如果有興趣請看下面的例程wuf12.asp,有助於加深對環境變量的理解。
複製代碼代碼如下:
<%@ Language=VBScript %>
<% 'wuf12.asp
Option Explicit
Response.Expires=0
Dim StrName, StrGender, StrM, StrMsg
If Request.ServerVariables(Content_Length) <> 0 Then
'提交資料後,這個長度就不會是0, 因此執行下面的語句, 將結果顯示出來
'下面一部分其實是照搬wuf11.asp
StrName = Trim(Request.Form(yourname))
StrGender = Trim(Request.Form(gender))
StrM = Trim(Request.Form(message))
StrMsg = Replace(StrM,vbcrlf,<Br> & vbcrlf)
%>
<HTML><BODY>
姓名: <%= StrName%><Br><Br>
性別: <%= StrGender%><Br><Br>
留言: <Br><Br>
<%= StrM%><Br><Br>
<%= StrMsg%><Br><Br>
<%
Response.Write 共選擇愛好項數: & Request.Form(hobby).Count & <Br>
Dim I
For I = 1 to Request.Form(hobby).Count
Response.Write Request.Form(hobby)(I) & <Br>
Next
%>
</BODY></HTML>
<%
Else
'當第一次載入頁面時,沒有提交任何資料,故前面一部分並不執行,而是從這裡開始
'這也就是為什麼會有兩對<HTML></HTML> 的原因
'下面照搬wuf10.htm 就行了
'<form method=post action=wuf11.asp> 給用環境變數替換掉了, 其實完全一樣
Response.Write 看看結果: & Request.ServerVariables(Script_name) & <Br>
%>
<HTML><BODY>
<form method=post action=<%= Request.ServerVariables(Script_name)%>>
姓名: <input type=text name=yourname><br>
性別: <select name=gender>
<option>男</option>
<option>女</option>
</select> <br>
留言: <textarea name=message>您好!
注意多行文字的處理</textarea> <br>
嗜好(按住Ctrl鍵可多選):
<select name=hobby multiple size=4>
<option>電腦</option>
<option>購物</option>
<option>電影</option>
<option>閱讀</option>
</select> <br>
<input type=submit name=Submit value=提交>
<input type=reset name=Submit2 value=Reset>
</form>
</BODY></HTML>
<%End If%>
(二)如果使用GET方法傳送數據,則用Request.Querystring來讀取資料。
先編輯以下一個wuf13.htm文件,供使用者輸入資料:
<html>
<body bgcolor=#FFFFFF>
<form method=get action=wuf14.asp>
英文名稱: <input type=text name=Ename> <br>
中文名稱: <input type=text name=Cname><br>
性別: <select name=gender>
<option>男</option>
<option>女</option>
</select> <br>
<input type=submit name=Submit value=提交>
<input type=reset name=Submit2 value=Reset>
</form>
</body>
</html>
再編寫一個wuf13.htm需用到的檔案wuf14.asp收集資料:
<%@ Language=VBScript %>
<% 'wuf14.asp
Option Explicit
Response.Expires=0
Dim StrCname, StrEname, StrGender
StrEname = Trim(Request.QueryString(Ename)) 'Trim函數用來除首尾空格
StrCname = Trim(Request.QueryString(Cname))
StrGender = Trim(Request.QueryString(gender))
%>
<HTML><BODY>
英文姓名: <%= StrEname%><Br><Br>
中文姓名: <%= StrCname%><Br><Br>
性別: <%= StrGender%><Br><Br>
看看提交的字串: <Br>
<%= Request.ServerVariables(Query_String)%>
</BODY></HTML>
為了更好地理解這個程序,你最好先在瀏覽器中試試例程wuf13.htm的效果,看看輸出的結果,你會發現地址欄中長長的字符串似曾相識,如同在Yahoo搜索時看到的差不多。這時,你試著在網址列直接輸入http://localhost/wuf14.asp?Ename=Rose&Cname=李二&gender=女,居然也得到了同樣的結果。所以你可以這樣看,wuf13.htm的結果就是得到了類似這樣的一個參數的連結。而Request.QueryString則是從http:// 位址的附加參數讀取各個資料。
實際上,按下提交按鈕後,查詢字串(輸入的資料)會以參數的形式附加到URL位址後(各參數間以&分隔),達到傳遞資料的目的。同時,注意瀏覽器中顯示的查詢字串中沒有中文,而是不認識的含百分號的亂碼,這是因為進行了編碼的緣故。最後,與前面一樣,這兩個程式也可合併為一個程式(例程wuf15.asp,需去我網站下載)。
幾點說明:
1. 若使用POST方法提交數據,則Request.ServerVariables(Content_Length)>0。
若使用GET方法提交數據,則Request.ServerVariables(Query_String) <> 。
2. 弄清楚原理後,你完全可以在同一個ASP檔案中混合使用Request.Form和Request.QueryString。
3. 如果在一個Form表單中,有幾個按鈕,你如何確定使用者按了哪個按鈕?如果留意的話,會發現例程wuf11.asp中有一句,提交按鈕的值也被傳送,而wuf13.htm中產生的查詢字串最後也可以找到類似的值。請注意:只有被按按鈕的值被傳送,而其他按鈕的值為,這就是判斷依據(《中計報》InfoWeb網站有一篇類似文章)。