ASP程式寫作入門

編寫:黃自強   dd@mail.ysps.tp.edu.tw

李忠憲 shane@mail.spps.tp.edu.tw

寫在前面

  不管您是為了個人興趣,或是純粹為了工作需要來學習ASP程式設計,學習方法上是很重要的。從不斷嚐試錯誤中學習而得的經驗固然可貴,但是在學習效果上並不好。

  這裡建議的能力培養順序應該是:

  1. 熟練 html 語法(學習網頁編寫能力)

  2. 了解IIS/ASP的運作原理(系統管理能力)

  3. 了解IE4.0以上的DHTML/CSS(網頁元件物件控制能力)

  4. Java/VB 等Client端 Script( Client 端檢查/控制能力)

  5. ASP六大物件和語法及ActiveX元件使用(Server 端 Script 控制能力)

  6. 資料庫設計/分析(資料庫規劃能力)

  7. SQL語法(資料庫增刪修等管理能力)

  8. ActiveX元件設計/網頁美工設計(非必要能力,會的話更好)

  以上條列的能力對非資訊專長出身的國小教師來說,是零散、複雜需逐步整合及長時間進修培養的。尋找坊間的書籍和網路上的ASP教學站台,罕有人把這些學習內容整合成教學文件 ,能夠讓學習者以〝站在高崗上向下望〞的角度去學習ASP程式設計。除了 Html 和 ActiveX 兩項外,本文嘗試盡量以介紹/實作的方式,來循序介紹以上系列課程。

    希望您讀完本課程後,再從眼底看網頁程式寫作這件事情,能像 Matrix(駭客任務)片尾 Neo 眼裡所看到的電腦人和牆壁一樣,變得條理清晰、了然於心。

  雖然 ASP.NET 好像又要開始在 Windows Server 2003 上引領風騷、Linux/windows 上Unix/PC 雙作業系統都能跑的 Apache / PHP / MySQL 也不斷推出整合、功能強大又完善、而且免費的新套件,但是對台北市中小學目前的系管/網管需求而言,ASP還算是滿好用的工具,因為它簡單且能快速上手,非常適合WEB應用程式開發入門。

 

、ASP簡介

  微軟公司的ASP (Active Server Pages) 是一種在伺服器端執行的描述程式稿(Server Side Scripting ) 。ASP 程式碼在 Server 端執行後,Web Server(IIS) 會送出 HTML 標籤與文件給用戶端,用戶端就可以從瀏覽器上看到互動的網頁資料和內容。它不像一般的用戶端描述程式稿(如 Java Script )是在客戶端電腦上的瀏覽器執行,因此 ASP 程式並不會發生因為使用者用了不同的瀏覽器而有因為不完全支援程式設計者所寫的 Script 的情況。也就是說使用 ASP,一般來說不用擔心用戶端的瀏覽器是否版本支援程式創作者的程式稿。

 

ASP的執行環境

    目前支援 ASP 的Web Server MicroSoft WinNT/2000/XP 的IIS 4.0/5.0/5.1 及 Windows 98/SE/ME PWS(Personal Web Server)。

  您可以在自己的 Windows98/ME/NT/2000/XP 電腦上安裝 IIS/PWS 作 ASP 程式寫作練習,然後再用瀏覽器透過 http(內定為Port80)的方式,來連上自己電腦上的 WEB  Server,並可看到自己的 ASP 執行後的結果,開啟的方法有:

開啟本機站台,無需網路連線: http://localhost/   http://127.0.0.1/  http://john/

開啟遠端站台,有網路連線:[虛擬ip]http://192.x.x.1/  [真實ip]http://163.21.224.4/   [區網內]http://john/

開啟遠端站台,有網路連線及dns註冊登記: http://dd.ysps.tp.edu.tw/

 在本機安裝 IIS 的做法,通常是網頁設計者在網頁設計階段使用的,Windwos 2000 Professional 版也和 PWS 一樣小器,有10個連線上限的限制。真的要架設 IIS 網站伺服器,應該在有安裝 Win2000 Server 版的機器上安裝 IIS。

 

ASP的優缺點

ASP的優勢

  1. 使用描述程式稿語言 (Javascript 或 VBScript) 編寫。

  2. 簡單易學,不太需要高深的程式設計基礎。

  3. 用記事本就可拿來編寫,縮短網路程式開發時間。

  4. 完全嵌入 HTML 裡頭,與 HTML、Script 語言結合 。

  5. 不需要經過手動編譯(compile)或透過連結程式(Linker)來聯結函式。

  6. 可以抓來的或是自製的 ActiveX 元件擴充程式功能。

  7. 可存取多種類型資料庫(SQL、mdb、xls、text...)。

  8. 可用多種程式語言(VB、Delphi、VC....)設計自己的 ActiveX Server 元件,不用考慮瀏覽器的相容性問題 。

  9. 程式碼是隱藏的,在用戶端僅可看到由 ASP 輸出的動態 DHTML 文件。

  10. 網路上教學範例站台多,範例程式和學習資源都非常豐富。

ASP的缺憾

  1. 只能使用 Microsoft的NT/2000 Server IIS Web Server,Unix 上執行需另外安裝 mod_perl 和 mod_asp 套件。

  2. Win98/ME/NT/2000/XP WorkStation(Professional) 版的作業系統上,安裝 PWS / IIS 有10個連線的限制。

  3. Windows/IIS 作業系統的漏洞百出,需要管理者經常關心修補(patch),以避免駭客或 Cracker 利用系統漏洞入侵IIS竊取或毀損重要資料。

  4. Windows Server 主機 軟體昂貴,需要另外購買 SQL 存取使用權。

  5. MS-SQL 資料庫 效率高但軟體版權昂貴。

  6. 大量使用者上線時,用 MDB 當後端資料庫站台的效能不是很好。

ASP程式設計/編修工具

  1. 記事本:無行號,免費,最陽春的工具,必須熟悉 HTML 及 VBscript 語法;而且,必須自己找上傳的工具,例如 ftp 程式。

  2. 微軟(MS) script Debugger:有行號,免費,不錯的工具,使用介面友善,認得 HTML 及 VBscript 語法,有專案管理的功能,但是沒有上傳的工具。

  1. 微軟(MS)Frontpage2000/2002:有行號于狀態列顯示,專業的網頁設計工具,使用介面友善,認得 HTML 及 VBscript 語法,有網站管理的功能,提供 Web 發送精靈上傳網頁。但 FrontPage 有時會把 ASP 網頁當作 HTML 而改成亂七八糟,一般都是把使用者介面、表單等先用 FrontPage 設計好,再使用 editpule 等工具編寫 ASP 程式碼。

  1. (Macromedia)Dreamweaver/UltraDev:專業的網頁設計工具,獲得多項所見即所得獎項,使用介面友善,支援 CSS,認得 HTML、Javascript 及 VBscript、ASP 語法,有網站管理的功能,提供 ftp 上傳的介面工具。

        其他編輯軟體,推薦 Editplus2:ShareWare,支援中文、有程式行號、支援正規表示式、巨集取代、函數自動變色、認得HTML、Javascript 及 VBscript、ASP、Perl、PHP、C 等語法,支援 PC/Mac/UNIX 檔案格式,有 html 預覽功能,直接拖曳圖片自動產生 html tag 等等功能,是小而美的軟體。下載 editplus.zip ShareWare版。

 

習題:請把電腦上的Editplus安裝和進階設定完成。


 

ASP與六大物件的運作方式:

  ASP 是一種內嵌在網頁中的 CGI(共通閘道介面)。CGI 是一種由 Web Server 執行的應用程式,執行時間上因為 CGI 要將程式處理的結果丟回給 Web Server,因此有時間上的限制(預設值為 90 秒)。也就是說,我們在設計程式的時後要考量執行效率,不能超過 Time Out,常見的做法是將大型系統分解成許多小支程式來撰寫。

  ASP 與傳統 CGI 應用程式不同之處,在於 CGI 是以獨立程序在獨立記憶體空間執行,ASP 則是以 Web Server 的子程序在 Web Server 規劃的記憶體內執行,前者安全性較高,後者效能較好。由於 CGI 採用的語言比較艱深冷僻,寫作難度較高,而 ASP 是為了大幅簡化開發 Web Computing 所設計的 ,採用 VB Script 這種初階基礎語言,比較友善易於親近。

  我們來看看ASP 是怎樣透過六個內建物件,來完成其 CGI 運作機制的: 

ASP運作概圖(取自IIS Help)

  1. 當Web Server開機跑起來後,首先執行的是 Application物件,它定義了啟動IIS後Web站台運作所需的整體變數,並且會把這些變數一直放在記憶體中,等待ASP程式存取,一直到IIS Shutdown才消失。

  2. 當我們打開瀏覽器並輸入網址,也就是對Web Server送出 Request 要求,Web Server會自動進行 MIME 判別,並採取Windows一貫慣用的方法,也就是從檔案的附加檔名去判斷要交給哪個 DLL 來執行或解譯。

  3. 如果發現要處理的檔案附檔名是 .ASP 類型的檔案,就將此檔案交給 ASP.DLL 這個動態連結函式庫處理,它會將先將 Web Server 所收到的 URI 處理好,並儲存到記憶體裡面, 我們在寫 ASP 程式時可以用 Request 物件將這些資料取出來使用,同時讀取程式碼進行解譯和執行。Request 變數的有效期間較短,只能維持到 ASP 程式執行完畢之前。

  4. 執行ASP程式時如果發生錯誤,就會進行錯誤處理,自動將程序中斷,並且傳送錯誤訊息給Web伺服器傳送給瀏覽器。如果能順利執行完畢,則將結果使用 Response 物件傳送給Web Server,然後再由 Web Server 將網頁傳給使用者的瀏覽器。Response 變數會在 buffer 停留很短的時間,當 buffer 功能未開啟時,則直接送回給參觀者,而不儲存在記憶體內。

  5. ASP 動態函式庫一旦執行,就會常駐在記憶體內,一直到關機為止才結束(稱為 in-process),因此它的執行效能遠高於附加檔名是 exe 或 com 的應用程式(通常這一類應用程式的執行方式就稱為 out-process)。由於使用 in-process 方式處理,所以 ASP 的內建物件 Application 才有辦法運作。也正因為ASP屬於 in-process 的關係,所以如果想要變更 ASP 相關的系統設定,必須將伺服器重新開機才會生效。

  6. Session 物件用來維護每個瀏覽器連線的資訊,當我們要讓ASP程式能夠根據不同身分執行不同功能的時候,就會使用 Session 變數。此變數的有效時間預設是20分鐘,但是有〝連選得連任〞的特性,也就是說當網頁重新整理(Reload)後,Session的有效時間也跟著延長。但最長也只能維持到瀏覽器關閉,或清除 cookie 為止。

  7. 與伺服器有關的相關設定,則是透過 Server 物件來與 Web Server 溝通,例如:呼叫自家的函式庫、修改 Timeout 設定、讀取主目錄的絕對路徑、使用 HTML 或 URL 編碼(Encode) 法來處理 Response 變數等。

  8. ObjectContext 物件則是與 CGI 運作機制不相干的物件,它用來管理 MTS(Microsoft Transaction Server)。MTS 允許在執行程式前先紀錄伺服器狀態,如果有部分程式執行失敗,則可以退回到 先前的狀態,只有當所有相關程式跑完且執行成功後,才會真正登錄改變後的伺服器狀態,就像是我們為 ASP 程式設定了還原點一樣,可以避免程式執行失敗之後,要自行復原伺服器狀態的麻煩。

  9. MTS 通常使用在有需要較高的安全性、和多個程式需要作〝同步〞的場合,一般我們是用不到的。由於 MTS 對於記憶體的需求較高,如果我們網站設計上沒有這個需要,卻故意去使用它,那麼將會白白浪費許多Web Server 的系統資源。

  10. ASP 僅能以 IUSR_WebServer 這個帳號來執行,造成許多伺服器管理的工作必須以 administrator 權限來執行,所以 ASP 無法呼叫 WindowsAPI 來取得系統帳號和應用在伺服器管理工作上,例如:帳號管理、設定檔案目錄權限、修改系統登錄......等等。

  11. ActiveX 物件是將想要達成特定目的的程式封存在一起,形成一個獨立自足的物件。我們只要在ASP程式中對系統提出建立該物件的需要( Server.CreatObject),就可以完成特定工作,不需要再去編寫程式碼。ActiveX 物件讓我們可以像堆積木一樣的方式來設計程式,使得程式設計越來越快,越來越容易。

  12. 微軟公司基於ASP受限較多,因此開發了一些給 ASP 專用的 ActiveX 物件,例如我們常見的 計數器、廣告輪撥器(Ad Rotator)、檔案系統物件(FSO)、資料庫物件(ADO)、SMTP元件...等等。

  13. ASP 所編寫的程式,並無法編譯成 ActiveX 物件,這就讓許多程式設計師,無法將成果作品編譯後打包發行,如果想要分享就必須公開原始程式碼,再不然只能 把程式碼編密;前者會與作者的利益衝突,後者則需保留原始程式碼,每次修改後都還要再進行一次編密,超難維護。

本文編修自李忠憲老師 asp概論一文,原文網址: http://www.spps.tp.edu.tw/documents/memo/asp_web_design.htm

作業:請用自己的方式敘述 IIS與六大物件的運作關係


 

叁、ASP程式設計

經過上面的暖身,您是不是已經手癢想要開始設計ASP程式了呢?

關於程式設計這個議題,先要給各位的建議是:多看、多思考、多寫和不怕錯!

(一)、ASP 基礎練習

  現在假設您已經安裝好了IIS,我們可以用文字編輯器,如 EditPlus,開啟一個 HTML 文件,當作編寫 ASP 程式的視窗,並且把文件存成副檔名為 .asp 存檔到 c:\Inetpub\wwwroot\test.asp;另外再用瀏覽器輸入網址 http://你的電腦名稱/test.asp 來一面寫,一面測試自己寫的ASP程式。

我們先來看看ASP程式碼怎樣放到html文件中使用

 <html>

    <body>

   <% ...這一段是ASP程式碼...... %>

    <body>

</html>

以下幾種使用<% %>符號來把 asp 程式碼放入HTML中的方法,都是合語法規定可被接受的:

左右夾

        例:<% response.write "我來了!" %>

換行夾:
        例:<% response.write "我來了!親愛的asp!"
                %>

三明治夾法:
                <%
                    response.write "我來了!親愛的asp!"
                %>

有時候,我們會在程式碼裡面加註一些說明文字,來幫助我們在編寫程式或偵錯程式時,容易閱讀,寫法像這樣:

    <%  ' 這個是註解的符號,這行asp不會被執行

            '第二行也是一樣

            response.write "Hello World !"

 %>

我們也習慣用鍵盤左邊的定位鍵(Tab鍵)來把程式碼作縮排,以方便閱讀和判斷程式區塊,例如:

<%
    if sex = "boy"  then
        response.write "你是男生"

    else

        response.write "你是女生"

    end if
%>

以上幾種方法我們要常常提醒自己,養成寫作習慣,對未來寫作ASP程式幫助很大。

 

Response 物件裡的 Write 方法

  ASP 中使用 物件.方法 這樣的語法,這跟前面介紹的 JavaScript 是一樣的:

    Response.Write "要印出來的字串"

    response.write "要印出來的字串"

  這樣的語法用來把文字印到瀏覽器上,您一定已經從上面的例子了解了。值得注意的是,ASP 程式碼中使用到的物件,其實是不分大小寫的,這和 JavaScript 會區分大小寫是不同的,但為了容易閱讀,大家還是習慣把字首大寫。

Response.write 除了可以印出字串以外,他也可以用來印出函數或變數的值,例如我想印出現在的日期和時間,可以用:

<%   response.write now( ) %>

  其中 now() 是一個 VB 的內建函式,所謂內建函式,簡單來說,就是古聖先賢已經替您寫好的程式碼片段,而您只要呼叫他來用就好了。利用函 式我們可以節省很多的程式撰寫時間,就像我們要去旅行,開車去加油站加無鉛汽油就好了,不必自己買設備和原油來煉油。

在ASP裡面我們可以把 <% response.write  變數或函式%> 簡化寫成<% = 變數或函式 %> ,下面兩行印出的結果是一樣的︰

<%   response.write now( ) %>

<%   = now( ) %>


(二)、使用變數

ASP 跟大多數的程式語言一樣,指定值給變數的方法是相同的:    變數名稱 = 值

例如:

<% '指定數值 40 給變數 cake
    cake = 40

                '把變數 text 的值印到瀏覽器上
            response.write "奶油蛋糕單價 = "  & text  & "元"

         %>

本段程式碼中的新面孔〝&〞符號的功能是用來連接 Response.write 後面的 "字串"和 "變數"的。回想一下,JavaScript 則是使用〝+〞,不要搞混了!

上面這段程式印出的是:

奶油蛋糕單價 = 40元

(三)、函數裡的函數?

函數可以在括弧中再引用另一個函數,例如:

<% = year(now()) %>

處理的順序是先用括弧裡的 now() 函數取得現在的日期,再把這個值傳回給 year() 函數,year() 函數會篩選出年份部分的資料,最後會印出目前的西元年份

看看下面的程式:

用now( )函數印出日期時間 : <% =now()%>

<hr>

用幾種不同的時間函數分別印出:<br>
今天是中華民國
<% =year(now())-1911 %> 年
<% =month(now()) %> 月
<% =day(now()) %> 日
星期 <% =weekday(now())-1 %>
時間是<% =time() %>

結果是:

(四)、簡單的 For...Next 迴圈

        我們可以把重複性的工作交給迴圈。ASP 延襲 VB 的 For... Next 迴圈語法,例如:

<!-- 以下是簡單的迴圈 -->

    <% '由小到大

     for i = 1 to 7 %>

        第<% =i %>次:<font size="<% =i %>" face="標楷體">印出字形尺寸由小到大[font size=

            <% =i%>

        ]<br>

    <% next %>

<hr>

    <% '由大到小

        for i = 7 to 1 step -1 %>

        第<% =i %>次:<font size="<% =i %>" face="標楷體">印出字形尺寸由大到小[font size=

            <% =i%>

        ]<br>

<% next %>

印出的結果是:


 

For ...Next 迴圈中使用step = -1 來控制變數 i 的值由大到小,網頁程式中我們常常會看到有年、月、日可以挑選的下拉式表單

請挑選:月份的計畫

大部分月份或日期就是用迴圈跑出來的。

請挑選:<select size="1" name="year">
<option><% =year(now())-1911+1 %></option>
<option><% =year(now())-1911 %></option>
<option><% =year(now())-1911-1 %></option>
</select>年

<select size="1" name="month">
    <% for i = 1 to 12

        if i < 10 then

            i="0" & i

        end if

    %>

    <option> <% =i %> </option>
    <% next %>
</select>月份的計畫
 

(五)、If...Then 條件判斷

上題的灰色文字部分就是我們常用的 If.. Then 敘述,通常用在程式的流程控制,除了一般的數值大小判斷外、它也可以判斷真、偽值,或字串內容。要特別記住的是:IF..Then 敘述以 End IF 來結束判斷。可以使用巢狀判斷式。

上例中的:

        if i < 10 then

            i="0" & i

        end if

意思是:當 i 的值小於10的時候前面要自動補"0"

以下是另一個依照現在時間自動判斷要用哪個問候語來問候訪客:

<%

' 把現在時間的[時]的值,指定給 my_Hour 這個變數

    my_Hour = Hour(Now())

    If my_Hour < 12 Then

        '判斷式的前段 [if ....then ]

        Greeting = "現在是" & my_Hour & "點,早起的鳥兒有蟲吃"

        '注意:印出字串要用雙引號來夾住,印出變數則不必.而印出的字串和變數之間要用 &[讀作:and] 符號來連接

    Else

 

        Greeting = "現在是" & my_Hour & "點,午餐吃的飽嗎?"

    End If
'判斷式的結尾

<% = Greeting %>

執行結果:

 

作業:續接上題例,請寫一個包含年、月、日、時的下拉式表單,並且能自動跳到現在的年月日和時間的ASP程式。

(提示:下面的提示幫您做到了年、月請把日、時補上)

請挑選:<select size="1" name="year">
<option> <% =year(now()) - 1911+1 %></option>
<option selected><% =year(now()) - 1911%></option>
<option><% =year(now()) - 1911 -1 %></option>
</select>年<select size="1" name="month">
<% for i = 1 to 12 %>
    <% if i = month(now()) then %>

        <option selected value="<% =i%>"><% =i%></option>
    <% else%>

        <option><% =i%></option>
    <% end if %>
<% next%>
</select>月份的計畫</p>

  ASP 中所使用的變數,不像其他的程式語言,需要事先宣告,也沒有大小寫的問題。

  ASP中的變數在 IIS 上實際執行的生命週期,通常只有一瞬間,當程式執行結束,變數也歸零。雖然如此,我們在替變數命名時,還是要盡量避免變數名稱取得太簡單、太接近,因為容易造成誤解造成日後維護程式的困難。

    變數不能用數字來命名,至少要有一個字母。下面對變數的命名就是一個失敗的例子:

7="7"

5="L2"

21 = 46*3

if = 3-4

day() < "String"

   如果我們養成習慣使用 my_name、start_day、this_table 等方式作為變數名稱,閱讀和維護起來都算清晰容易。

        如果判斷式要判斷的情形太過複雜,我們可以加上〝 Else〞語句,以加廣判斷的範圍,例如:

<%

    my_age=request("age")

     if my_age >= 30 then

        response.write "30而立"

    elseif my_age >= 40

        response.write "40而不惑"

    elseif my_age >= 50

        response.write "50而知天命"

    else

        response.write "年輕人,立志向學!"

    end if

 %>

(六)、Select Case 條件判斷

If.. Then 一樣,用來做分支判斷,但僅適用於判斷同一個值的變化,它會根據 case 的值有所不同, 而執行不同的程式片斷。判斷式的結尾使用 End Select 敘述,例如:

number = int( request("my_number"))

Select  case  number

    case 1

        response.write "number = 1"

    case 2

        response.write "number = 2"

    case 3

        response.write "number = 3"

end Select

 

(七)、While...Wend 迴圈

        這個迴圈最常被用來作逐筆讀取資料錄用的迴圈,當條件成立執行下面的敘述,直到條件不成立。結尾行是〝Wend〞。

        while not rs.eof

            i=i+1

            rs.movenext

        wend

(八)、Do...Loop 迴圈

        Do until 後面跟著條件式,當條件符合的話,執行下面的敘述,直到條件不成立。結尾行是〝loop〞。

    x=100

    do until x < 1
        x = x- 1
        response.write x & "<br>"
    loop

下面的寫法,作用相同:

    x=100

    do
        x = x- 1
        response.write x & "<br>"
    loop while x>1

 

(九)、For Each x  in y  迴圈

        y 必須是一個陣列或物件集合,x 是一個變數。For Each 會逐筆取出 y 陣列裡面的各個元素,再指定給 x 。結尾行是〝next〞。

底下這個範例,將會逐一讀取上個網頁所送出的表單資料(Request.Form),並將所有的值輸出在網頁上:

  for each data in Request.Form

      response.write "表單元件" & data & "的值是" & Request(data) & "<br>"

  next

 

(十)、Response.redirect 網頁轉向

    Response 物件的另外一種常見的用法是 Redirect,它可以讓程式執行到這裡時,對 Server 重新送出新網址的要求,看起來就是從這個網頁轉向到另外一個網頁,寫法為 Response.Redirect。

    我們也可以使用 Server.Trasfer 物件來轉向網頁,不同的是 Server.Trasfer 的處理是由 Server 端直接掌管轉向的工作,Response.redirect 則是由 Client 端發送網頁轉向的要求。

    下一個例子我們要先準備好星期日到星期六的網頁,共計七個檔案。檔名類推是〝星期~.htm〞,網頁內容各編寫成不同的訊息。例如:

html檔名

html裡的內容

星期0.htm <html><body>今天星期日,猴子過生日</body></html>
星期1.htm <html><body>今天星期一,猴子穿新衣</body></html>
星期2.htm <html><body>今天星期二,猴子肚子餓</body></html>
星期3.htm <html><body>今天星期三,猴子去爬山</body></html>
星期4.htm <html><body>今天星期四,猴子要考試</body></html>
星期5.htm <html><body>今天星期五,猴子去跳舞</body></html>
星期6.htm <html><body>今天星期六,猴子去斗六</body></html>

    想法:我們可以使用 weekday() 函數取得今天是星期幾,然後再把網頁轉到這個函數傳回的數值專屬的網頁檔案。

    但是實際上 weekday( ) 函數取得的數值,和我們想法有一點出入:

weekday(now())取得的值

要轉向的檔名

weekday(星期日) = 1

星期0.htm

weekday(星期一) = 2 星期1.htm
weekday(星期二) = 3 星期2.htm
weekday(星期三) = 4 星期3.htm
weekday(星期四) = 5 星期4.htm
weekday(星期五) = 6 星期5.htm
weekday星期六) = 7 星期6.htm

所以我們在 weekday(now()) 函數取出星期的值之後,要記得減去 1:

 <% my_week=weekday(now()-1)%>

<% response.redirect "星期" & my_week & ".htm" %>

今天是星期六,執行後出現的結果是:

上例這種網頁轉向的功能可以用來讓訪客一周裡面的每一天都看到不同的網頁,我們也可以用校內外電腦的IP來做自動判斷,如此,就可以讓校內師生和校外訪客看到的網頁內容不一樣了。

(十一)、Application 物件的應用

Application變數始於IIS啟動,一直要到關機才消失。算是壽命最長的變數了,我們可以利用Application 的這個特性來做網頁訪客計數器:

<%
        ' 先鎖住application變數,避免多位瀏覽者同時存取
    application.lock

        '把application變數的值加一後,重新指定給application變數
    application("count")=application("count")+1

        '記得要解除application變數鎖定
    application.unlock

%>

您是本站第 <% =application("count") %> 位參觀者

結果是:

註:

 Application 變數在 IIS 關掉後就會消失,所以要設計可靠的訪客計數器,比較可行的方法是用 FSO 物件寫入文字檔,或將訪客數寫入資料庫中。

   常見的使用 Application 的例子是聊天室和線上人數這兩類的程式。也因為 Application 變數存活期間很長,相對要耗用主機上較多的系統資源,不斷耗用系統資源造成系統資源不足主機當機,只好重新啟動電腦才能將資源釋出,所以一個好的網站管理員 會有節制的使用 Application 物件。

(十二)、網址列傳值

ASP程式可以透過 Request 物件取得從網址列輸入的資料,請看以下範例:

<% my_answer=request("ans") %>

請在網址列輸入→?ans=1~9 或A~Z

<hr>

<% '如果有輸入了
if my_answer<>"" then %>

    您輸入的 ans = <font color="red" size="7"><% =my_answer%>

<% '否則印出尚未輸入的訊息
else %>

    您尚未在網址列輸入資料

<% end if %>

本範例執行的結果:

 

(十三)、表單傳值

<% my_answer=request("ans") %>

form method="POST"  name="ex7"  action="範例7_利用表單傳值.asp">

<p>請輸入您的暱稱 : <input type="text" name="ans" size="20">
<input type="submit" value="提交" name="B1"><input type="reset" value="重新設定" name="B2"></p>

</form><hr>

您輸入的暱稱是 : <font color="red" size="7">

<% =my_answer%>

請輸入您的暱稱 :

 


您輸入的暱稱是 :

(十四)、表單傳值給自己

<% '把表單傳來的值分別指定給三個變數
' request("值")是較省略的寫法.也可以寫為 request.form ("值"),但是這樣就一需要用表單來傳

my_answer=request("ans")

my_email=request("email")

my_option=request("option")

%>

<html><body>.....略...

<form method="POST" name="ex7" action="範例8_表單傳值給自己.asp">

<p>請輸入您的暱稱 : <input type="text" name="ans" size="20"></p>

<p>您的電子郵件:<input type="text" name="email" size="20"></p>

<p>您對本站的意見 : <textarea rows="2" name="option" cols="49"></textarea></p>

<p> </p>

<p align="center">&nbsp; <input type="submit" value="提交" name="B1"><input type="reset" value="重新設定" name="B2"></p>

</form><hr>

<% '判斷三個欄位都填寫了,而且也有傳來值

if my_answer<>"" and  my_email<>""  and  my_option<>"" then

%>

謝謝您!!

<hr>

您輸入的暱稱是 : <font color="red" size="7"><% =my_answer %> <br>

您輸入的EMAIL是 : <font color="green" size="7"><% =my_email %> <br>

您輸入的意見是 : <font color="blue" size="7"><% =my_option %>

<%'別忘了判斷式結尾

else

response.write "您有欄位沒填寫"

end if%>

</body></html>

執行結果:

 

請輸入您的暱稱 :

您的電子郵件:

您對本站的意見 :

 

 

 


您有欄位沒填寫

(十五)、表單傳值給另一支 ASP 程式

<table border="1" width="100%">

<tr>

<td width="50%">

<form method="POST" name="ex7" action="範例9_的結果.asp">

<h1 align="center"><font color="#FF0000">訪客留言</h1>

<p>請輸入您的暱稱 : <input type="text" name="ans" size="20"></p>

<p>輸入您的電子郵件:<input type="text" name="email" size="20"></p>

<p>寫下您對本站的意見 : <textarea rows="4" name="option" cols="49"></textarea></p>

<hr>

<p align="center">&nbsp; <input type="submit" value="送出我填寫的表單內容" name="B1"><input type="reset" value="擦掉重寫" name="B2"></p>

</form>

<p></td>

<td width="50%"> </td></tr>

</table>

執行後看起來像這樣:

訪客留言

請輸入您的暱稱 :

輸入您的電子郵件:

寫下您對本站的意見 :


 

 

 

(十六)、接受傳值的 ASP 程式表單資料印出

<% '把表單傳來的值分別指定給三個變數

my_answer=request("ans")

my_email=request("email")

my_option=request("option")

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=big5">

<title>範例9的結果</title>

</head>

<body>

<table border="1" width="100%">

<tr>

<td width="50%">

<hr>

<% '判斷有沒有傳來值

if my_answer<>"" and my_email<>"" and my_option<>"" then

%>

謝謝您!!前面的表單已經把值傳來,列出如下

<hr>

您輸入的暱稱是 : <font color="red" size="7"><% =my_answer %> <br>

您輸入的EMAIL是 : <font color="green" size="7"><% =my_email %> <br>

您輸入的意見是 : <font color="blue" size="7"><% =my_option %>

<% else%>

<font size="7" color="red">您尚未填寫完成留言版,

<hr>

請按<a href="範例9_把表單傳值給另一個asp程式處理.asp">這裡回表單頁填寫</a>喔

<%

'別忘了判斷式結尾

end if

%>

(十七)、Session 物件的應用

    Session 的功能其實相當於 Cookies ,是用來紀錄瀏覽器與 Server 端的連線資訊用的。當使用者把所有開啟的瀏覽器視窗關閉時,這個工作階段的 Session 就消失了。

    如果瀏覽器一直沒關,Session 也有預設存活期限20分鐘的限制。

    雖說我們可以手動來調整 IIS 中 Session 的TimeOut 設定,但是 Session 的  TimeOut 預設值算是合理,除非您清楚的知道你在幹什麼,或有特殊應用的場合,這裡不建議自行手動修改。下表是我們學習ASP程式設計必須要知道的幾種TimeOut 的預設值。

ADSI

預設值 (秒)

可否在 IIS 嵌入式管理
單元中設定?

AspScriptTimeout

90

AspSessionTimeout

1200 (20 分鐘)

ConnectionTimeout

900 (15 分鐘)

CGITimeout

300 (5 分鐘)

AspQueueTimeout

-1 (無逾時)

    我們常會用 Session 的這種短時間記憶的特性, 在網頁設計時,拿來做一些像是使用者帳號、職稱、權限等資訊,在不同網頁之間傳遞的媒介。

    我們先用FrontPage 製作一個表單,再加入ASP程式碼:

您還沒有填寫資料喔

請輸入您的暱稱 :

您的電子郵件:

測試session計數器

此頁被您看了 : 1次[關閉所有瀏覽器就會消失]

您對本站的意見 :

 

 

  程式碼如下

  <% '把表單傳來的值分別指定給三個變數

  my_answer=request("ans")
  my_email=request("email")
  my_option=request("option")

  if my_answer = "" or my_email="" or my_option= "" then

    response.write "<font color=red size=5>您還沒有填寫資料喔"

  else

  '如果有填寫,把值指定給三個session

    session("ans")=my_answer
    session("email")=my_email
    session("option")=my_option

  %>

您輸入的暱稱是 : <font color="red"><% =session("ans") %> <br>

您輸入的EMAIL是 : <font color="green"><% =session("email") %> <br>

<p><font color="#FF0000">

測試 Session 計數器 :此頁被您看了

<% session("count")=session("count")+1
response.write session("count")%>次[關閉所有瀏覽器就會消失]</p>

您輸入的意見是 : <font color="blue">

<% =session("option") %> <br>

請您點一下重新整理按鈕,或者連到首頁再回來看看,以上資訊並不會清除,session 依然存在</p>

<p><font color="#0000FF">session物件替每個上網的瀏覽器保留變數值,瀏覽器關閉就結束,不像Application,要等到IIS [Web伺服器]關畢才會結束。</p>

<p>相關範例 :

<a href="範例5_application網頁計數器.asp">範例5_application網頁計數器.asp</a></p>

<hr>

<% end if %>

 

(十八)、怎樣丟棄所有 SESSION

在網頁上要求使用者做重新登入動作時,我們也同時想要清除這個使用者的連線資訊可以用 Session.abandon 這樣的方法來清除。

<%
session.abandon
%>

您輸入的暱稱是 : <font color="red"><% =session("ans") %> <br>

您輸入的EMAIL是 : <font color="green"><% =session("email") %> <br>

您輸入的意見是 : <font color="blue"><% =session("option") %> <br>

執行結果:

您輸入的暱稱是 :
您輸入的EMAIL是 :
您輸入的意見是 :

(十九)、怎樣查看現有 Application Session 的數值?