• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Asp(Active Server Page)的語言特性 (轉)

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    Web源于靜態文本,現在很多站點幾乎還是采用這種方式。靜態文本的缺點就是維 護難(文件數目多)、查詢難、修改難。雖然可以采用FrontPage對站點進行管理,但這 只是其中的一個辦法?,F在,很多的站點都會在后臺采用 數據庫 ,動態生成超文本。這樣, 要改變式
    Web源于靜態文本,現在很多站點幾乎還是采用這種方式。靜態文本的缺點就是維

      護難(文件數目多)、查詢難、修改難。雖然可以采用FrontPage對站點進行管理,但這

      只是其中的一個辦法?,F在,很多的站點都會在后臺采用數據庫,動態生成超文本。這樣,

      要改變式樣,只需修改幾個文件;要變更內容,只需對數據庫進行操作即可,而且易于保持

      一致性;而對于全文檢索等查詢應用,這種方式的優越性更為突出。(經常說的“動態”

      也包括圖片的動態顯示,如動態GIF、Java Applet等,本文所指為資料的動態性)

       通用網關界面CGI(Common Gateway Interface)和網絡服務器應用程序界面

      ISAPI(Internet Server Application Programming Interface)與其他相關技術的

      出現,使我們能夠方便地與Web Server進行溝通,從而象一些計數器、留言版等CGI程

      式相繼出現并蔚然成風。但這些CGI程序都有一個很大的缺點,就是CGI(可用VB、Java、

      Perl、C或Dephi等編寫)與html只能分開編寫、分開運行,要將兩者融合在一起并不

      容易,從而導致維護與編寫都相當困難。因此,一些廠商后來都推出了自己的Script語言,來增強網頁開發的功能。其中Netscape推出了JavaScript(for client端和for Server端兩種);微軟則推出了VBScript和Asp(Asp的語法與VB的語法類似)兩種,也用于服務器端和客戶端程序的編寫。對于專業開發人員而言,客戶端程序的最重要的一點是通用性,而服務器端的則強調功能和效率。對于Client端程序的開發,JavaScript無疑是最佳的,因為當今兩大主流瀏覽器IE和Netscape都宣稱支持該標準;而VBScript則只有IE才能支持。但令我們苦惱的是對某些JavaScript的標記,IE或IE的某些版本并不一定會支持,這必導致我們不得不把一部分程序移到服務器端去執行,因為服務器端的程序會先解釋生成html(或含ActiveX)文本,再送到客戶端,故不存在兼容問題。

       livewire(JavaScript for Server端的編譯器)和Asp一樣,都是一些手稿語言(手稿是指類似client端的JavaScript一樣的、可嵌套在html文本里面、只需用標記標明是由服務器執行的程序段),也就是類似C/C++一樣的面向對象的語言。livewire的文件后綴名還是html,asp的文件后綴名則是asp,因為asp的文件在客戶讀取它的時候,服務器才進行解釋,而livewire的文件則必須預先進行編譯(每次修改后,都要重新編譯)。asp有相應的輔助開發工具(InterDev),可代為生成一些控件。當然,這些并不重要,關鍵是你采用的是Netscape Web Server還是微軟的IIS。但就一般而言,因為IIS是捆綁在NT上的,故采用IIS的用戶會偏多一些。

       自從Netscape公司推出了livewire和微軟推出了Active Server Page以后,程序員編寫網上程序就方便和容易了很多。但這種Script類的語言有一個共同的缺點,那就是由于是解釋執行的,故速度不會太快。最近,微軟建議采用三層模型,中間層可以不用asp,而直接采用VB6.0生成的ActiveX控件,因為是編譯執行的,故速度較快,不過這是后話。

      

      1.Asp的基本對象

      

       Asp(Active Server Page)是一種類似于VB的面向對象的程序語言。在這里并不想詳述對象等一些基本概念,而是直接介紹其語言特性,以便開發人員能夠熟練地對asp程序進行修改和編制(因為很多人都只是直接利用開發工具如InterDev來生成asp程序)。

       首先,Asp程序的存檔名稱肯定是“asp”;其次,在asp程序里面,服務器端的Script要放在<%和%>字符串中間,例如<% user=request("user") %>。如果你想在一個Asp文件中調用另一個Asp文件,則可在Asp中加上下面的聲明:

      < ! -- #INCLUDE VIRTUAL|FILE="***.asp" -- >,這有些象C語言中的#include。其中,Virtual表示虛擬文件路徑,File表示真實文件路徑。

       Asp有五個主要的內建對象:Request、Response、Server、Session、Application,下面將分別舉例對其進行說明。

      

      1.1 Request

      Asp依然遵從流行的、利用客戶端的Form進行數據交換的方法。Asp內建的request對象擁有五個獲取客戶端資料的方法(QueryString/Form/Cookies/ServerVariables/ClientCertificate)。

      語法:request.方法名稱("參數")|request("參數")

      如果采用后者,系統會自動選擇相應的方法。

       1.1.1 Form

       在這里再重新強調Form的一些屬性:

       <Form Action=被調用的程序的url

       Enctype=資料傳送的MIME形態

       Method=傳送資料的方式Get/Post

       Onrest=按下rest鍵調用的程序

       Onsubmit=按下sumit鍵調用程序

       Target=輸出內容的frame窗口></Form>

       使用Form傳送信息一般有三種方式:由html網頁內的Form傳信息給其他Asp;由Asp內的Form傳信息給另外一個Asp;Asp內的信息傳送給自身。

       語法:Request.Form(參數)[(索引)]

       其中參數表示Form中元素的名稱,索引表示相同名稱元素的順序號。

       例:

       <%

       For I=1 To Request.Form("user").Count

       Response.Write Request.Form("user")(I)

       Next

       %>

      可循環讀取名稱為user的元素,其中Count是Form的系統屬性,用于計算同名元素的個數,如果該元素不存在,則其值為零。如果沒有指明要讀取第幾個同名元素,則系統會把全部同名元素的值都讀取出來,并用“,”作間隔。

      例:Request.form("user")=abc,bcd,cde

      

       1.1.2 QueryString

       語法:Request.QueryString(參數)[(索引)]

      除了用Form傳輸資料外,還可通過在超鏈接后接“?”的方式傳輸信息,如:<A href="***.asp?user=abc">,這時可通過Request.QueryString("user")讀取傳輸的信息;如果出現多個重名的參數,如:<A href="***.asp?user=abc&user=bcd&user=cde">,則第一次Resquest.QueryString("user")=abc,第二次Resquest.QueryString("user")=bcd,第三次Resquest.QueryString("user")=cde。

      

       1.1.3 ServerVariables

       語法:ServerVariables(參數名稱)

       我們知道Web/Browse的傳輸協議是http,http的報頭會有一些客戶端的信息,如

      客戶IP地址、瀏覽器的語言系統等。這時可通過Request.ServerVariables("***")獲

      取相關信息,如Request.ServerVariables("Aclearcase/" target="_blank" >ccept_Language")可獲取客戶端瀏覽器

      的語系。其他系統參數見下表:

       SERVER_NAME server的機器名稱或IP地址。

       SERVER_PORT server正在運行的端口號。

       REQUEST_METHOD 發出request的方法(GET/POST/HEAD)。

       SCRIPT_NAME 程序被調用的路徑,如:cgi-bin/a.pl。

       REMOTE_HOST 發出request請求的遠端機器(client)的名稱。

       REMOTE_ADDR 發出request請求的遠端機器(client)的IP地址。

       REMOTE_IDENT 發出request的使用者名稱(如是撥號上網,則為用戶ID),

       當NCSA IdentityCheck為enabled,而且client機器支持

       RFC 931時,該變量有效。

       CONTENT_TYPE 數據的MIME類型,如:“text/html”。

       HTTP_ACCEPT client可以接受的MIME類型列表。

       HTTP_USER_AGENT client發出request的瀏覽器類型。

       HTTP_REFERER 在讀取CGI程序之前,client所指的文本URL。

      

       1.1.4 Cookies

      在客戶端,Cookies記錄了客戶端瀏覽器很多的信息,我們可通過Request.Cookies("名稱")命令獲取它的值,也可通過Response.Cookies("名稱")="值"在客戶端記錄一些信息,以便控制訪問者。設置多重Cookies的方法為Response.Cookies("名稱")("名稱")="值"。

      

       1.1.5 Cache

       我們可以在瀏覽器上設置從Cache中抽取已經訪問過的頁面的信息,同樣,在Asp程序中也可進行類似的設置。其中Response.Clear為清空客戶端的內存。Response.Buffer=True設置可從Cache中讀取資料(缺省時為False)。

      

       1.1.6 ClientCertificate

       ClientCertificate用于獲取客戶端瀏覽器的身份確認信息(符合X.509標準),但

      客戶端瀏覽器必須支持SSL3.0或PCT1協議。這里需做兩步工作,第一步:web server必須啟動用戶端認證選項;第二步:對客戶端瀏覽器進行相應設置,這樣,該方法才會生效,否則,傳回empty值。

      

      1.2 Response

       當要從服務器傳送資料到客戶端時,可通過下面的方法:

       1)Response.Write直接輸出信息,如Response.write "<html>"。

       2)Response.Redirect引導客戶端到另一個url位置,如Response.Redirect "http://zyr.yeah.net",但這里有一個問題需要注意,就是該語句一定要放在<html>標記前執行,也就是說在服務器未向客戶端送出html文本報頭前就要被執行,否則會出現傳輸錯誤信息。

      3)Response.ContentType控制輸出的文件類型,服務器送給客戶端的數據包類型可以是text/html文本,也可以是gif/jpeg圖形文件,所以每次傳輸前,我們都必須告知客戶端將要傳輸的文件類型,一般默認情況下為“Text/Html”類型。例如<% Response.ContentType="IMAGE/JPEG" %>。

      4)Response.Cookies 用于設置Cookies的值,語法為:Response.cookies(變量名稱)[(key)|屬性]=寫入的信息。(key的用法前面已作說明,這里不在敘述)cookies系統默認有五個屬性,包括Expires(時間)、Domain(域名)、Path(路徑)、Secure(安全性)、Haskeys(判斷cookies下是否還有其它cookies文本)。如:<% Response.Cookies("type").Expires="Sep 9,1998" %>。

       5)Response.Buffer用于確定是否把信息傳輸到緩沖區。因為有時候我們希望把部分中間信息送到緩沖區,然后繼續工作。當所有處理工作都完成后,才把信息輸出到客戶端。但當在處理過程中Flush或End方法被調用,則緩沖區內容將被輸出。

       Response的其它屬性:

      Expires:設定網頁保留在客戶端瀏覽器的時間長度。

      ExpiresAbsolute:設定網頁保留在客戶端瀏覽器的日期與時間。

       Response的其它方法:

      AddHeader:設定HTML文件的HTTP報頭。

      AppendToLog:在Web Server記錄檔案末尾,添加字串。

      Clear:清除在緩沖區中的HTML輸出資料。

      End:停止處理asp檔案,并回傳當時狀態。

      Flush:立刻送出緩沖區的HTML資料。

      

       1.3 Server

      Server對象會為你提供一些固定的server端的方法和屬性,包括ScriptTimeout、MapPath和URLEncode等。其中ScriptTimeout是server的屬性,可規定一個asp程序執行的最長時間,如:server.scripttimeout=200(計數單位為秒,缺省時為90秒)。

      MapPath是server的一個方法,用于把web server的虛擬路徑轉換為實際路徑。如server.mappath("/")=c:\inetpub\wwwroot,對于路徑參數“/”和“\”,Asp都會視為一樣。在這里有一點要注意的是,系統只是對應web server的真實根目錄輸出結果,而不會去檢查文件系統中是否真的存在這樣一個目錄。

       URLEncode是server的另外一個方法,該方法會根據URL編碼原則,把源字符串編

      碼為目標字符串,其中空白的字符用“+”代替。

      

       1.4 Session

       Session是asp中一個非常重要的對象,在用一些傳統的語言編程時,都會涉及到變量是定義為全局變量還是局部變量這個問題。但在Internet上的開發卻很少提及這個問題(Java除外),因為每一個html頁面都是非相關的,傳輸完畢后,全部鏈接都會斷開。在asp中則不一樣,我們可以定義一些全局變量,這里的全局是指在當前瀏覽器沒有被關閉前都可以被使用。這些變量可以在Global.asa中進行定義。如果你的Web應用程序是用InterDev自動創建的,則會在根目錄找到該文件;如果不是則可自行創建。

       語法:session.屬性|方法

       一般建立新的session對象都是采用set關鍵字,如<%set session("變量名稱")=要賦的值。如果賦給session變量的是一個數組,則讀取時需存放到數組中,因為系統是將其視為一個對象(object)。

      

       1.5 Application

       Global.asa是用于定義session、application和object對象的一個文件,客戶端是不能看到該文件的。但該文件一定要放在程序的根目錄上,而且文本中不能有html標記并且文件名不能改動。下面是一個Global.asa文本的范例。

      <SCRIPT LANGUAGE=VBScript RUNAT=Server>

      Sub Session_OnStart

       ‘’==Visual InterDev Generated - DataConnection startspan==

       ‘’--Project Data Connection

      Session("nnb_ConnectionString") = "DSN=***;UID=zyr;APP=Microsoft (R) Developer

       Studio;WSID=ZYR;DATABASE=***"

      Session("nnb_ConnectionTimeout") = 15

      Session("nnb_CommandTimeout") = 30

      Session("nnb_RuntimeUserName") = "zyr"

      Session("nnb_RuntimePassword") = "******"

      ‘’==Visual InterDev Generated - DataConnection endspan==

      End Sub

      </SCRIPT>

       Application與session的區別在于,網上的用戶都可以使用Application的對象,因而是需要加鎖的;而session只是針對一個客戶而已。如定義一個Application變量為Application("name")="1234"。

       Asp的功能僅此而已?當然不是,Asp更高級的應用還包括它內建有一些ActiveX控件和可調用其它的控件等功能,暫不在本文討論。如果希望獲取更多的信息,可以訪問下面的站點:

       http://www.microsoft.com/asp

       http://zyr.yeah.net

       http://www.kj.com.tw

      

      2.Asp的編程實例

      為了使大家對上面提到的功能有一個感性的認識,下面我們將以一個非常簡單的用asp編寫的chatroom(交談室)作為例子。為了盡量簡化,我們這里只采用四個文件,一個是主文件main.asp和enter.asp(讓用戶輸入用戶名),一個是資料輸入文件input.asp,一個是顯示文件show.asp。原理是定義一個application變量show,然后每次有人說話,我們都把它加到前面;另外顯示文件show.asp每三秒鐘刷新一次,用于顯示show變量.全部工作僅此而已,用其它語言或方法可能需要更復雜的工作,在這里則變得非常簡單和明了。(這里沒有使用Global.asa文件。)

      

      2.1 main.asp文件

      <%

      if session("sname")="" then

       response.redirect "enter.asp"

      end if

      ;如果用戶沒有輸入名字,則將重新回到名字輸入界面

      %>

      

      <html>

      <frameset rows="80%,20%">

       <frame name="show" src="show.asp">

       <frame name="input" src="input.asp">

       <noframes>

       <body>

       <p>This page uses frames, but your browser doesn‘’t support them.</p>

       </body>

       </noframes>

      </frameset>

      </html>

      

      2.2 enter.asp文件

      <%

      nickname=request.form("nickname")

      ;讀取用戶輸入的名字

      if nickname="" then

       msg=msg+"<font color=‘’ff0000‘’>請輸入您的名稱</font><br>"

      else

       response.cookies("whoami")=nickname

      ;把用戶名字寫到cookies中

       application.lock

       application("show")="<table border=0 bgcolor=‘’ccffcc‘’ width=‘’500‘’>" _

      &"<td><font color=‘’5555ff‘’><b>來至" & request.servervariables("remote_addr") _

      & "的" & request.cookies("whoami") & "大駕光臨...</b></font></td></table>" _

      & application("show")

      ; _是分隔符,與VB一樣

       application.unlock

       session("sname")=nickname

       response.redirect "main.asp"

      end if

      %>

      <html>

      <body>

      <form method="POST" action="enter.asp">

       你的姓名:

       <input type="text" name="nickname" size="20" maxlength="10">

       <input type="submit" value="進入聊天室" name="B1">

      </form>

      </body>

      </html>

      

      2.3 show.asp文件

      <html>

      <head>

      <meta http-equiv="refresh" content="3">

      ;設置每三秒鐘刷新一次

      <meta name="Microsoft Border" content="none">

      <title>聊天的內容</title>

      </head>

      <body bgcolor="#FFFFFF">

      <%=application("show")%>

      </body>

      </html>

      

       2.4 input.asp文件

      <%

      mytalk=trim(request.form("txtbox"))

      ;讀取用戶寫的信息,trim用于去掉后面的空格

      application.lock

      application("show")="<font color=ff0000 ><b>" & request.cookies("whoami") & _

       "</b></font>:" & mytalk & "<br>" & application("show")

      ;把新的信息添加到application變量show的前面,其中request.cookies("whoami")是從

      ;cookies中讀出該用戶的名字。

      application.unlock

      %>

      <html>

      <head>

      <meta name="Microsoft Border" content="none">

      <base target="input">

      <title>輸入界面</title>

      </head>

      

      <body bgcolor="#FFFFFF">

      <form method="POST" action="input.asp" target="input">

       <p><font color="red"><%=request.cookies("whoami")%></font>

       輸入:<input type="text" name="txtbox" size="30">

      <input type="submit" value="發送" name="go">

      </form>

      </body>

      </html>

     

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>