《ASP動態(tài)網(wǎng)頁設(shè)計(jì)與應(yīng)用(第2版)》第4章 Request對象與Response對象_第1頁
《ASP動態(tài)網(wǎng)頁設(shè)計(jì)與應(yīng)用(第2版)》第4章 Request對象與Response對象_第2頁
《ASP動態(tài)網(wǎng)頁設(shè)計(jì)與應(yīng)用(第2版)》第4章 Request對象與Response對象_第3頁
《ASP動態(tài)網(wǎng)頁設(shè)計(jì)與應(yīng)用(第2版)》第4章 Request對象與Response對象_第4頁
《ASP動態(tài)網(wǎng)頁設(shè)計(jì)與應(yīng)用(第2版)》第4章 Request對象與Response對象_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

4章

Request對象與

Response對象

4.1

使用

Request對象提交網(wǎng)頁信息

4.1.1ASP內(nèi)置對象概述為了便于網(wǎng)絡(luò)程序的設(shè)計(jì),ASP

提供六個(gè)內(nèi)置對象——Request、Response、Application、

Session、Server

ObjectContext

對象,通過這些對象使網(wǎng)站開發(fā)者可以更容易地收集通過瀏覽器請求發(fā)送的信息、響應(yīng)瀏覽器以及存儲用戶信息。由ASP提供的兩個(gè)主要內(nèi)置對象——Request對象和Response對象可以直接映射訪問Web

服務(wù)器時(shí)客戶端的兩個(gè)行為,即發(fā)送信息到客戶端和接收客戶端提交的信息。另外幾個(gè)對象則提供了附加功能,對編寫腳本是非常有用的。每個(gè)對象都提供了一系列的集合、屬性和方法,這在后續(xù)章節(jié)中將加以介紹。下面簡要說明每一個(gè)對象。(1)Request

對象可以使用

Request

對象訪問任何用

HTTP

請求傳遞的信息,包括從

HTML

表格用

POST

方法或

GET

方法傳遞的參數(shù)、cookie

和用戶認(rèn)證。Request

對象使您能夠訪問發(fā)送給服務(wù)器的二進(jìn)制數(shù)據(jù),如上載的文件。(2)Response對象可以使用

Response

對象控制發(fā)送給用戶的信息。包括直接發(fā)送信息給瀏覽器、重定向?yàn)g覽器到另一個(gè)

URL

或設(shè)置

cookie

的值。(3)Server

對象

Server

對象提供對服務(wù)器上的方法和屬性進(jìn)行的訪問。最常用的方法是創(chuàng)建

ActiveX

組Server

對象其它的方法可用于將

URL

HTML

編碼成字符件的實(shí)例

(Server.CreateObject)。

串,將虛擬路徑映射到物理路徑以及設(shè)置腳本的超時(shí)期限。(4)Application對象可以使用

Application

對象使給定應(yīng)用程序的所有用戶共享信息。(5)Session對象可以使用

Session

對象存儲特定的用戶會話所需的信息。當(dāng)用戶在應(yīng)用程序的頁之間跳轉(zhuǎn)時(shí),存儲在

Session

對象中的變量不會清除;而用戶在應(yīng)用程序中訪問頁時(shí),這些變量始終存在。也可以使用

Session

方法顯式地結(jié)束一個(gè)會話和設(shè)置空閑會話的超時(shí)期限。(6)ObjectContext

對象該對象用于控制

Active

Server

Pages

的事務(wù)處理,可以使用

ObjectContext

對象來提交或撤消由

ASP

腳本初始化的事務(wù)。(由于ObjectContext

對象在網(wǎng)站開發(fā)中使用較少,對于初學(xué)者來說更是如此,因此,本書中不作詳細(xì)介紹。)

ASP

六大內(nèi)置對象中,使用得最多的是

Request

對象和

Response

對象,分別用于收集客戶信息和發(fā)送服務(wù)器端數(shù)據(jù)到客戶端。本章中將重點(diǎn)學(xué)習(xí)

Request

對象和

Response對象。146

4.1.2Request對象簡介

Request

對象用于獲取所有從客戶端提交到服務(wù)器的請求信息,

Request

對象提供了

5

種集Form、

Cookies、

ServerVariables

ClientCerificate。

合來獲取客戶端的信息,分別是QueryString、

ASP

中,可以通過

Request

對象集合來從瀏覽器、Cookie、HTTP

頭和用戶會話中取得信息。

Request

對象為腳本提供客戶端在請求一個(gè)頁面或傳送一個(gè)表單時(shí)提供的所有信息,這包括能夠標(biāo)識瀏覽器和用戶的

HTTP

變量,存儲用戶的瀏覽器對應(yīng)的

cookie,以及附在

URL

后面的提交的內(nèi)容(查詢字符串或頁面中<Form>表單中的

HTML控件內(nèi)的值)。

Request

對象使用格式如下:

Request[.集合|.屬性|.方法](參數(shù))

其中,集合、屬性和方法是可選的,當(dāng)選擇不同的集合、屬性或方法時(shí),要設(shè)置相應(yīng)的參數(shù)。通常,在使用

Request

來獲取信息時(shí),需要寫明使用的集合、屬性或方法,如果沒有寫明,即當(dāng)寫成

Request(參數(shù))的格式后,ASP

會自動依次按如下順序來獲取信息:

QueryString→Form→Cookies→ServerVariables→ClientCerificate

下面對

Request

對象的集合、屬性和方法進(jìn)行簡單介紹,然后在本節(jié)的各個(gè)任務(wù)中對相應(yīng)內(nèi)容進(jìn)行詳細(xì)說明。

1.Request對象的集合

Request

對象提供了

5

個(gè)集合,可以用來獲取客戶端對

Web

服務(wù)器發(fā)送的各類請求信息,如提交的查詢、Cookies、HTTP

報(bào)頭值等,表

4-1

給出了這些集合的說明。表4-1

Request對象的集合集合名稱ClientCertificate

說明

當(dāng)客戶端訪問一個(gè)頁面或其他資源時(shí),用來向服務(wù)器表明身份的客戶證書的所有字段或條目的數(shù)值集合,每個(gè)成員均是只讀

Cookies

根據(jù)用戶的請求,用戶系統(tǒng)發(fā)出的所有cookie的值的集合,這些cookie僅對相應(yīng)的域有效,每個(gè)成員均為只讀

Form

METHOD

的屬性值為

POST

時(shí),所有作為請求提交的<FORM>段中的

HTML

控件單元的值的集合,每個(gè)成員均為只讀

QueryString

依附于用戶請求的

URL

后面的名稱/數(shù)值對或者作為請求提交的且

METHOD

屬性為GET(或者省略其屬性)的,或<FORM>中所有HTML控件單元的值,每個(gè)成員均為只讀

ServerVariables

隨同客戶端請求發(fā)出的HTTP報(bào)頭值,以及Web服務(wù)器的幾種環(huán)境變量的值的集合,每個(gè)成員均為只讀

2.Request對象的屬性

TotlBytes

Request

對象唯一的屬性,它用于獲取由客戶端發(fā)出的請求的整個(gè)字節(jié)數(shù),是一個(gè)只讀屬性。TotlBytes

屬性使用得很少,在

ASP

設(shè)計(jì)中,通常關(guān)注指定的值而不是客戶端提交的整個(gè)內(nèi)容。147

3.Request對象的方法

BinaryRead

Request

對象唯一的方法,該方法允許訪問從一個(gè)<Form>表單中傳遞給服務(wù)器的用戶請求部分的完整內(nèi)容,用于接收一個(gè)<Form>表單的未經(jīng)過處理的內(nèi)容。使用格式如下:

BinaryRead(count)

其中,參數(shù)

count

是所要讀取的字節(jié)數(shù),當(dāng)數(shù)據(jù)作為<Form>表單

POST請求的一部分發(fā)往服務(wù)器時(shí),從客戶請求中獲得

count

字節(jié)的數(shù)據(jù),返回一個(gè)

Variant

數(shù)組。如果

ASP

代碼已經(jīng)引用了

Request.Form集合,BinaryRead方法就不能再使用。同樣,如果用了

BinaryRead方法,就不能訪問

Request.Form集合。

4.1.3QueryString

集合與

Form集合

QueryString集合與

Form集合是

Request

中使用得最多的兩個(gè)集合,用于獲取從客戶端發(fā)送的查詢字符串或表單<Form>的內(nèi)容。

1.QueryString

集合

QueryString是獲取查詢字符串的變量值的集合,其使用格式如下:

Request.QueryString(Varible)[(Index).Count]

其中,Varible是在查詢字符串中變量的名稱。當(dāng)某個(gè)變量具有多個(gè)值時(shí),使用

Index。當(dāng)某一變量具有多個(gè)值時(shí),Count

指明值的個(gè)數(shù)。例如:

strname=Request.QueryString("name")

上面的語句將用戶提交的查詢字符串中變量

name的值賦給

strname。

likecount=Request.QueryString("like").Count

上面的語句將統(tǒng)計(jì)用戶提交的查詢字符串中變量

like的值的個(gè)數(shù)。

2.Form集合

Form

集合用于獲取在

HTML

的表單<Form>中所有的表單元素內(nèi)容的集合,使用格式如下:

Request.Form(Parameter)[(Index).Count]

Parameter

是在

HTML表單中某一元素的名稱,其中,當(dāng)某個(gè)參數(shù)具有不止一個(gè)值(比如,當(dāng)在<select>中使用

multiple屬性時(shí))時(shí),使用

Index。當(dāng)某個(gè)參數(shù)具有多值時(shí),Count

指明多值個(gè)數(shù)。

strpwd=Request.Form("pwd")

上面的語句將用戶以

Post

方式所提交的表單中,名為

pwd的對象內(nèi)容賦值給

strpwd。

4.1.4

客戶端信息的提交在網(wǎng)站開發(fā)中,為了實(shí)現(xiàn)用戶與服務(wù)器的動態(tài)交互,通常需要從客戶端瀏覽器向服務(wù)器發(fā)送信息,ASP

中提供了

Request

對象來接受客戶端發(fā)送回來的數(shù)據(jù)。通過該對象,服務(wù)器可148

以獲得客戶端提交的數(shù)據(jù)。一個(gè)用戶請求包含從用戶傳遞給

ASP

的信息,產(chǎn)生請求的部分工作就是聲明或者生成一個(gè)代表對

ASP

的調(diào)用的

URL,一個(gè)

URL一般具有以下語法:

Protocol://host:port/VirtualPath?QueryString

其中,Protocol

表示協(xié)議,用于聲明在遠(yuǎn)程機(jī)器之間傳送信息的底層機(jī)制,可用的協(xié)議包括

http、https、ftp等,本書中使用的都是

http協(xié)議。

host

表示請求要發(fā)送到的遠(yuǎn)程機(jī)器的名字或者

IP

地址。

port

聲明服務(wù)器要監(jiān)聽請求的機(jī)器端口號。對于

http

協(xié)議來說,端口號—般都是

80,這也是當(dāng)這項(xiàng)參數(shù)空缺時(shí)的缺省值。

VirtualPath包含一個(gè)以斜線為分隔符的一組標(biāo)識符,服務(wù)器把它映射到一個(gè)物理的路徑和

ASP

頁面的位置。

QueryString是查詢字符串,它是一個(gè)成對的名字和值的列表,作為

ASP

的參數(shù)被傳遞到處理它的

ASP

頁面。如果有多個(gè)參數(shù)需要傳遞,將會以“&”號分隔開的成對的名字和值,查詢字符串可以想象成傳遞給目標(biāo)

ASP

的參數(shù)列表,就像是函數(shù)調(diào)用一樣。下面是一個(gè)帶有查詢字符串調(diào)用

ASP

URL例子:

http://localhost/asptech/Request.asp?p1=val1&

p2=val2

上面的信息在瀏覽器中提交時(shí)將被傳遞給本地主機(jī)的

80

端口(默認(rèn)端口),處理該信息的腳本文件為

asptech

目錄下的

Request.asp,查詢字符串是在“?”之后的所有內(nèi)容即“p1=val1&p2=val2”,這里有兩個(gè)查詢參數(shù)

p1

p2,其值分別為

val1

val2。瀏覽器在用戶點(diǎn)擊一個(gè)超級鏈接或者提交一個(gè)

HTML

表單時(shí)都將產(chǎn)生一個(gè)請求(HTML

表單會在本節(jié)的后面講到),下面是一個(gè)使用超級鏈接產(chǎn)生查詢字符串的語句:

<a

href="qry.asp?str=ASP

教程">ASP

教程</a>

對于上面的語句,在點(diǎn)擊鏈接文字“ASP

教程”時(shí),將產(chǎn)生一個(gè)

URL請求,該請求將發(fā)送給文件

hyperlinkquery.asp進(jìn)行處理,請求中傳遞的參數(shù)是

str,其值為“ASP

教程”。此外,在

ASP

中提交用戶請求時(shí),通常都是由客戶端的網(wǎng)頁產(chǎn)生請求,服務(wù)器端的

ASP

腳本處理請求,所以,在設(shè)計(jì)時(shí)通常將客戶端網(wǎng)頁與服務(wù)器端腳本分為兩個(gè)文件,即可見的前臺網(wǎng)頁文件與處理請求的后臺腳本文件。下面來看一個(gè)提交查詢字符串的例子,例子由兩個(gè)文件構(gòu)成,分別是前臺網(wǎng)頁文件

qry.htm

和后臺腳本文件

qry.asp。前臺網(wǎng)頁文件

qry.htm內(nèi)容如下:

<!DOCTYPE

html

PUBLIC

"-//W3C//DTD

XHTML

1.0

Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html

xmlns="/1999/xhtml">

<head>

<meta

http-equiv="Content-Type"

content="text/html?

charset=utf-8"

/>

<title>提交查詢字符串</title>

</head>

<body>

<!--下面的超鏈接均含有查詢字符串-->149

<a

href="qry.asp?str1=ASP">ASP</a><br>

<a

href="qry.asp?str2=案例教程">案例教程</a><br>

<a

href="qry.asp?str1=ASP&str2=案例教程">ASP

案例教程</a><br>

</body>

</html>

后臺腳本文件

qry.asp內(nèi)容如下:

<%@LANGUAGE="VBSCRIPT"

CODEPAGE="65001"%>

<!DOCTYPE

html

PUBLIC

"-//W3C//DTD

XHTML

1.0

Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html

xmlns="/1999/xhtml">

<head>

<meta

http-equiv="Content-Type"

content="text/html?

charset=utf-8"

/>

<title>處理查詢字符串</title>

</head>

<%

'下面腳本獲取客戶端請求查詢字符串中變量

str1

str2

的值

str1=request.QueryString("str1")

str2=request.QueryString("str2")

%>

<body>

str1=<%=str1%><br>

str2=<%=str2%><br>

</body>

</html>

上面網(wǎng)頁

qry.htm

在瀏覽器中運(yùn)行效果如圖

4-1

左圖所示。單擊網(wǎng)頁中的鏈接文字“ASP

案例教程”,結(jié)果如圖

4-1右圖所示。圖4-1查詢字符串的處理從圖中

Internet

Explorer

瀏覽器地址欄可以看到,帶有查詢字符串的超鏈接被作為

URL提交到服務(wù)器。服務(wù)器在收到

URL“http://localhost/4/4-1/qry.asp?str1=ASP&str2=案例教程”后,調(diào)用了腳本文件

qry.asp

進(jìn)行處理。在腳本文件中,通過下面的語句獲取查詢字符串中的變量

str1

str2

對應(yīng)的變量值“ASP”和“案例教程”,最后將其顯示到網(wǎng)頁上。150

str1=request.QueryString("str1")

str2=request.QueryString("str2")

除了使用鏈接來提交查詢字符串外,(Form)表單的

get

方法也同樣可以提交查詢字符串。

4.1.5

表單及其在客戶端信息提交中的應(yīng)用在前面網(wǎng)頁信息傳遞的例子中,所有信息的傳遞都是通過超鏈接來提交,這種信息的提交方式是靜態(tài)的,即只能提交設(shè)計(jì)時(shí)指定的信息。在真正的網(wǎng)站設(shè)計(jì)中,更多情況下,需要能夠進(jìn)行動態(tài)提交的信息,即信息是由用戶輸入數(shù)據(jù)后在客戶端產(chǎn)生并提交信息,而不是由服務(wù)器端指定的。例如,網(wǎng)上常見的用戶注冊信息的提交,圖

4-2

就是一個(gè)網(wǎng)站的注冊頁面,圖4-2注冊頁面在這種需要用戶輸入的頁面中,使用由超級鏈接在設(shè)計(jì)時(shí)用標(biāo)簽<a>硬編碼來設(shè)計(jì)查詢字

HTML

符串顯然是行不通的。這種情況下,就需要使用

HTML表單來進(jìn)行信息的輸入和提交。表單允許在用戶提交表單時(shí)動態(tài)生成

URL的查詢中,查詢字符串中的變量名和變量值從表單中取得,然后生成變量名和變量值配對列表,并追加到

URL的后面。表單是一個(gè)能夠包含表單元素的區(qū)域,HTML

為表單提供了多種圖形用戶界面組件元素(比如文本框,密碼框,下拉菜單,單選框,復(fù)選框等等),這些表單元素能夠讓用戶在表單中輸入信息,可以用它們來構(gòu)成表單內(nèi)容,作為用戶可以輸入的域,并可以將其提交給一個(gè)

ASP

進(jìn)行處理。表單是用HTML的

form標(biāo)簽來聲明的,格式如下:

<form

name="

"

action="

"

method="

">

…</form>

<form>標(biāo)簽的屬性

name

用于指定表單的名稱,這在同一頁面有多個(gè)表單時(shí)會很有用;

action

屬性指定當(dāng)表單被提交時(shí)所要執(zhí)行的動作,對

ASP

來說,可以指定為所要調(diào)用的

ASP151

<form>標(biāo)簽的method參數(shù)指定傳遞請求給ASP所用的方法,文件的URL;

它的值可以是GET、

POST或

PUT,比較常用的是

POST和

GET。當(dāng)提交的信息較少,且不太注重安全性時(shí),可以使用使用GET方法進(jìn)行提交,這將在

URL后生成以“?”開頭的查詢字符串,查詢字符串中的變量名和變量值是在表單被提交時(shí),動態(tài)地根據(jù)表單元素的名字和用戶的輸入信息產(chǎn)生的,與前面所學(xué)過的查詢字符串一樣,這樣生成的

URL將可以在瀏覽器地址欄中看到,可以通過

Request

QueryString

集合來獲取

GET

方法提交的內(nèi)容。如果提交的內(nèi)容較多,或需要注重安全性時(shí),則可以使用

POST方式提交,這種提交方式將表單所有內(nèi)容進(jìn)行整體提交,可以通過

Request

Form集合來獲取

POST方法提交的內(nèi)容。在標(biāo)簽<form>和</form>之間的則是表單元素。此外,如果

action

中沒有指定處理提交信息的

ASP

文件,則由當(dāng)前文件進(jìn)行處理。在表單標(biāo)簽里,可以使用

HTML

標(biāo)簽<input>(輸入標(biāo)簽)、<textarea>(文本域標(biāo)簽)和

<select>(選項(xiàng)標(biāo)簽)聲明任意多個(gè)表單元素,下面對這些標(biāo)簽進(jìn)行詳細(xì)的介紹。

1.input

標(biāo)簽

<input>標(biāo)簽是最常用的表單標(biāo)簽,常用于輸入信息或提交信息。input

標(biāo)簽的通用語法格式如下:

<input

type="

"

name="

"

value="

">

<input>標(biāo)簽的

type屬性允許指定輸入類型,可以是后面幾種輸入類型中的一種:text(文本框)、password(密碼框)、checkbox(復(fù)選框)、radio(單選按鈕)、image(圖像域)、reset

(重置按鈕)和

submit(提交按鈕)。name

屬性為表單元素的名稱,value

屬性在設(shè)計(jì)時(shí)為表單元素的初始值,提交時(shí)表單時(shí)就是該元素的內(nèi)容。注意,每個(gè)表單元素都有一個(gè)屬性

name,同時(shí)每個(gè)表單元素都有一個(gè)與之相聯(lián)系的值

(value),這個(gè)值可以由用戶輸入得到,也可以由設(shè)計(jì)者通過

value參數(shù)設(shè)置一個(gè)初始值。和輸入域相關(guān)聯(lián)的名字和值用來構(gòu)造查詢串。同時(shí),所有的表單必須聲明一個(gè)

submit

按鈕,在單擊該按鈕時(shí),將通知瀏覽器表單已經(jīng)準(zhǔn)備好,將組合得到的

URL

傳送到服務(wù)器端,調(diào)用

form

標(biāo)簽的

action

參數(shù)指定的

ASP

文件進(jìn)行下一步的處理。要聲明一個(gè)

submit

按鈕,只需要使用一個(gè)

type

參數(shù)是別

submit

input

標(biāo)簽就可以了。例如:

<form

name="form1"

action="form.asp"

="get">

<input

type="text"

name="txt1"

value="ASP">

<input

type="submit"

name="submit"

value="finish">

</form>

上面的表單在沒有用戶輸入(即沒有修改

value的內(nèi)容)的情況下,由于提交表單的方法(method)是

GET,所以在提交時(shí)將構(gòu)成形式如下的

URL:

…/form.asp?txt1=ASP&

submit=finish

其中,語句“<input

type="text"

name="txt1"

value="ASP">”中的

name屬性“txt1”和

value

屬性指定的值“ASP”構(gòu)成了一對查詢字符串中的變量名和變量值對。下面,對<input>標(biāo)簽的各種輸入類型進(jìn)行舉例說明。

<input>標(biāo)簽的

text

類型用于設(shè)置一個(gè)單行文本框,語法格式如下:152

<input

name="

"

type="text"

value=""

size=""

maxlength=""

>

其中,value

為文本框的值,在設(shè)計(jì)時(shí)為文本框的初始值;size

屬性指定文本框?qū)挾龋?/p>

maxlength指定可以輸入的最大字符數(shù)。這兩個(gè)屬性的屬性值都是整數(shù),單位為字符。例如:

<input

name="user"

type="text"

value="admin"

size="12"

maxlength="16"

>

上面的語句指定了一個(gè)名為

user

的文本框,文本框初始值為“admin”寬度為

12

個(gè)字符,,最大可輸入

16

個(gè)字符。

<input>標(biāo)簽的

password類型用于設(shè)置一個(gè)密碼框,語法格式如下:

<input

name="

"

type="password"

value=""

size=""

maxlength=""

>

密碼框中各個(gè)屬性的用法與文本框相同。例如:

<input

name="pwd"

type="password"

size="8"

maxlength="12">

上面的語句指定了一個(gè)名為

pwd的密碼框,密碼框?qū)挾葹?/p>

8

個(gè)字符,最大可輸入

12個(gè)字符。

<input>標(biāo)簽的

submit

類型用于設(shè)置一個(gè)提交按鈕,提交按鈕用于將表單的內(nèi)容提交到

action所指定的

ASP

文件進(jìn)行處理,語法格式如下:

<input

name="

"

type="

submit"

value=""

>

其中,value為按鈕上的文字。

<input>標(biāo)簽的

reset

類型用于設(shè)置一個(gè)重置按鈕,重置按鈕用于將表單中的所有輸入域清空,重置表單內(nèi)容,語法格式如下:

<input

name="

"

type="reset"

value=""

>

其中,value為按鈕上的文字。下面是一個(gè)

input

標(biāo)簽的示例:

<form

name="form1"

method="post"

action="">

<p>用戶:

<input

name="user"

type="text"

size="8"

maxlength="16">

</p>

<p>密碼:

<p>

<input

type="reset"

name="reset"

value="重置">

<input

type="submit"

name="submit"

value="提交">

</p>

</form>

上面的表單在瀏覽器中顯示效果如圖

4-3

所示。<input

name="pwd"

type="password"

size="8"

maxlength="12">

</p>

圖4-3表單示例153

2.單選按鈕與復(fù)選框

<input>標(biāo)簽的

radio類型用于設(shè)置一個(gè)單選按鈕,單選按鈕用于從一組選項(xiàng)中選擇一個(gè),語法格式如下:

<input

name="

"

type="radio"

value="

"

checked>

其中,name

屬性為按鈕名稱,value

屬性為按鈕的值,checked

是可選屬性,如果有該屬性,則表示該按鈕顯示時(shí)為被選中,否則為未選中。通常單選按鈕都是成組使用的,要使多個(gè)單選按鈕成為一組,只需要將其

name屬性設(shè)為相同名稱即可,此時(shí)需要將

value屬性設(shè)置為不同值,以示區(qū)別。在提交時(shí)只提交被選中的那個(gè)按鈕值。此外,由于單選按鈕僅顯示按鈕而沒有文字內(nèi)容,因此通常會在其旁注上文字。例如:

<input

name="radiobutton"

type="radio"

value="1"

checked>

選項(xiàng)

1

<input

name="radiobutton"

type="radio"

value="2">

選項(xiàng)

2

上面的代碼表示一組中兩個(gè)名為

radiobutton的單選按鈕,按鈕值分別為

1和

2,值為

1

的按鈕為已選中,旁邊分別顯示文字“選項(xiàng)

1”和“選項(xiàng)

2”。在選中按鈕

1

的情況下,提交時(shí)時(shí)的變量值對如下:

radiobutton=1

<input>標(biāo)簽的

checkbox

類型用于設(shè)置一個(gè)復(fù)選框,復(fù)選框可用于從一組選項(xiàng)中選擇多個(gè)選項(xiàng),語法格式如下:

<input

name="

"

type="checkbox"

value="

"

checked>

其中,name

屬性為按鈕名稱,value

屬性為按鈕的值,checked

是可選屬性,如果有該屬性,則表示該按鈕顯示時(shí)為被選中,否則為未選中。與單選按鈕相似,復(fù)選框通常也是成組使用的,與單選按鈕不同的是,被選中的多個(gè)復(fù)選框都會被提交,因此其

name

值可以相同(按集合處理),也可以不同(按不同變量進(jìn)行處理)。例如:

<input

name="checkbox"

type="checkbox"

value="游泳"

>游泳

<input

name="checkbox"

type="checkbox"

value="跑步"

>跑步上面代碼將顯示兩個(gè)復(fù)選框,兩個(gè)復(fù)選框的名稱均為

checkbox。在提交信息時(shí),對于這種一個(gè)變量對應(yīng)多個(gè)值的情況,通常使用

For

each…Next

語句進(jìn)行處理。如下所示:

for

each

ob

in

Request.form("checkbox")

Response.Write(ob&"<br>")

next

上面語句中,將通過

for

each循環(huán)依次將變量

checkbox

對應(yīng)的不同值賦給變量

ob,再對

ob

進(jìn)行操作。下面是一個(gè)使用單選按鈕與復(fù)選框設(shè)計(jì)的簡單的網(wǎng)頁調(diào)查表案例。案例由兩個(gè)文件組成,分別是前臺網(wǎng)頁文件radiocheck.htm和后臺腳本文件

radiocheck.asp。前臺網(wǎng)頁文件

radiocheck.htm內(nèi)容如下:

<!DOCTYPE

html

PUBLIC

"-//W3C//DTD

XHTML

1.0

Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html

xmlns="/1999/xhtml">'輸出選項(xiàng)內(nèi)容

154

<head>

<meta

http-equiv="Content-Type"

content="text/html?

charset=utf-8"

/><title>上網(wǎng)調(diào)查表</title>

</head>

<body

>

<h2

align="center">上網(wǎng)調(diào)查表</h2>

<form

name="form1"

method="post"

action="radiocheck.asp">

<table

width="395"

border="1"

cellspacing="0"

bordercolor="#000000">

<tr>

<td

height="28"

colspan="2">通常使用什么方式上網(wǎng)?</td>

</tr>

<tr>

<td

width="160"><input

name="radiobutton"

type="radio"

value="ADSL"

checked>

ADSL</td>

<td

width="225"><input

name="radiobutton"

type="radio"

value="撥號上網(wǎng)"

>

撥號上網(wǎng)

</td>

</tr>

<tr>

<td><input

name="radiobutton"

type="radio"

value="無線接入">無線接入</td>

<td><input

name="radiobutton"

type="radio"

value="DDN專線">DDN

專線</td>

</tr>

<tr>

<td

height="23"

colspan="2">通常是在什么地方上網(wǎng)?</td>

</tr>

<tr>

<td><input

type="checkbox"

name="check"

value="網(wǎng)吧">網(wǎng)吧</td>

<td><input

type="checkbox"

name="check"

value="學(xué)校">學(xué)校</td>

</tr>

<tr>

<td><input

type="checkbox"

name="check"

value="家里">家里</td>

<td><input

type="checkbox"

name="check"

value="學(xué)校">其它地方</td>

</tr>

</table>

<p>

<input

type="submit"

name="Submit"

value="提交">

</p>

</form>

</body>

</html>

后臺腳本文件

radiocheck.asp內(nèi)容如下:155

<%@LANGUAGE="VBSCRIPT"

CODEPAGE="65001"%>

<!DOCTYPE

html

PUBLIC

"-//W3C//DTD

XHTML

1.0

Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html

xmlns="/1999/xhtml">

<head>

<meta

http-equiv="Content-Type"

content="text/html?

charset=utf-8"

/>

<title>調(diào)查表</title>

</head>

<body

>

<h2

align="center">上網(wǎng)調(diào)查表</h2>

<%

'將單選按鈕選項(xiàng)值賦給

str1

str1

=

Request.form("radiobutton")

%>

通常使用的上網(wǎng)方式是:<%=str1%><br>

經(jīng)常上網(wǎng)的地方是:

<%

'將復(fù)選按鈕多個(gè)選項(xiàng)內(nèi)容依次賦給

str2

for

each

str2

in

Request.form("check")

Response.Write(str2&" ?")

next

%>

</body>

</html>

前臺網(wǎng)頁radiocheck.htm在瀏覽器中顯示效果如圖

4-4

左圖所示。'輸出選項(xiàng)內(nèi)容

圖4-4上網(wǎng)調(diào)查表156

當(dāng)選擇完畢,單擊“提交”按鈕提交調(diào)查表信息時(shí),下面的語句將單選按鈕

radiobutton

所選項(xiàng)的值賦給變量

str1。

str1

=

Request.form("radiobutton")

然后,再通過下面的

for

each循環(huán)來依次獲取所選中的復(fù)選框

check對應(yīng)的內(nèi)容,將其賦值為變量

str2,并通過

Response.Write方法輸出。

for

each

str2

in

Request.form("check")

Response.Write(str2&" ?")

next

3.textarea標(biāo)簽

<textarea>標(biāo)簽聲明一個(gè)用戶可以輸人多行文本的區(qū)域,<textarea>標(biāo)簽的語法如下;

<textarea

name=""

rows=""

cols=""

>text</textarea>

其中,cols

為文本域?qū)挾龋ㄗ址麛?shù))rows

為文本域的高度,

(行數(shù))<textarea

>和</textarea>

之間的是文本域的內(nèi)容,對應(yīng)的就是文本域提交時(shí)的值。例如:

<textarea

name="textfield"

cols="40"

rows="10">這是一個(gè)

textarea

文本域</textarea>

上面語句定義的文本域如圖

4-5

所示。'輸出選項(xiàng)內(nèi)容

圖4-5文本域

4.select標(biāo)簽

<select>標(biāo)簽聲明一個(gè)可選項(xiàng)的列表,用戶可以選擇一個(gè)或者多個(gè)選項(xiàng),標(biāo)簽的值(value)

就是所選擇的選項(xiàng),下面是

select

標(biāo)簽的語法:

<select

name=""

size=""

multiple>

<option

value=""

selected>option</option>

...

<option

value="">option</option>

</select>

其中,<select>標(biāo)簽表示選項(xiàng)列表,其中

name是名稱,size是列表區(qū)域高度(即可顯示的選項(xiàng)數(shù)),multiple是可選屬性,如果有該屬性則表示可選擇多項(xiàng)。在<select>和</select>標(biāo)簽之間的是列表的內(nèi)容,列表內(nèi)容用標(biāo)簽<option>設(shè)置;value

表示該選項(xiàng)的值,selected是一個(gè)可選屬性,如果有該屬性,則表示顯示時(shí)將該項(xiàng)置設(shè)為已選中;在<option

>和</option>標(biāo)簽之間的是顯示在選項(xiàng)列表中的選項(xiàng)內(nèi)容。下面是一個(gè)

select

標(biāo)簽的示例:157

<select

id="select36"

size="1"

name="linkjy">

<optionselected="selected"

>---教育科研---</option>

<option

value="">北京教育考試院</option>

<option

value="">北京教育考試指導(dǎo)中心</option>

<option

value="">北京大學(xué)</option>

<option

value="">清華大學(xué)</option>

</select>

上面的代碼在瀏覽器中效果如圖

4-6左圖所示,鼠標(biāo)單擊后展開列表如圖4-6

右圖所示。圖4-6列表選項(xiàng)

4.2

使用

Request對象獲取環(huán)境信息

4.2.1

ServerVaribles集合

ServerVaribles

ASP

環(huán)境變量的集合,它允許讀取HTTP

頭,可以通過使用“HTTP_前綴”來讀取任何頭信息。ServerVaribles

集合的使用格式如下:

Request.ServerVaribles(ServerEnvironmentVariable)

其中,參數(shù)

ServerEnvironmentVariable環(huán)境變量的集合,可以使用的環(huán)境變量如表

4-2

所示。表4-2

ServerVaribles集合環(huán)境變量環(huán)境變量ALL_HTTP

ALL_RAW

APPL_MD_PATH

APPL_PHYSICAL_PATH

AUTH_PASSWORD

AUTH_TYPE

AUTH_USER

CERT_COOK

CERT_FLAG

CERT_ISSUER

CERT_KEYSIZE

CERT_SECRETKEYSIZE

CERT_SERIALNUMBER

說明

客戶端發(fā)送的所有HTTP標(biāo)頭,他的結(jié)果都有前綴HTTP_。

客戶端發(fā)送的所有HTTP標(biāo)頭,其結(jié)果和客戶端發(fā)送時(shí)一樣,沒有前綴HTTP_

應(yīng)用程序的元數(shù)據(jù)庫路徑。

與應(yīng)用程序元數(shù)據(jù)庫路徑相應(yīng)的物理路徑。

當(dāng)使用基本驗(yàn)證模式時(shí),客戶在密碼對話框中輸入的密碼。

這是用戶訪問受保護(hù)的腳本時(shí),服務(wù)器用于檢驗(yàn)用戶的驗(yàn)證方法。

代驗(yàn)證的用戶名。

唯一的客戶證書ID號。

客戶證書標(biāo)志,如有客戶端證書,則bit0為0。如果客戶端證書驗(yàn)證無效,bit1

被設(shè)置為1。

用戶證書中的發(fā)行者字段。

安全套接字層連接關(guān)鍵字的位數(shù),如128。

服務(wù)器驗(yàn)證私人關(guān)鍵字的位數(shù)。如1024。

客戶證書的序列號字段。158

環(huán)境變量CERT_SERVER_ISSUER

CERT_SERVER_SUBJECT

CERT_SUBJECT

CONTENT_LENGTH

CONTENT_TYPE

GATEWAY_INTERFACE

HTTPS

HTTPS_KEYSIZE

HTTPS_SECRETKEYSIZE

HTTPS_SERVER_ISSUER

服務(wù)器證書的發(fā)行者字段

服務(wù)器證書的主題字段。

客戶端證書的主題字段。

客戶端發(fā)出內(nèi)容的長度。

說明

客戶發(fā)送的form內(nèi)容或HTTP

PUT的數(shù)據(jù)類型。

服務(wù)器使用的網(wǎng)關(guān)界面。

如果請求穿過安全通道(SSL),則返回ON。如果請求來自非安全通道,則返回OFF。

安全套接字層連接關(guān)鍵字的位數(shù),如128。

服務(wù)器驗(yàn)證私人關(guān)鍵字的位數(shù)。如1024。

服務(wù)器證書的發(fā)行者字段。

IIS實(shí)例的

ID號。

響應(yīng)請求的IIS實(shí)例的元數(shù)據(jù)庫路徑。

返回接受請求的服務(wù)器地址。

用戶登錄WindowsNT的帳號

客戶端提供的路徑信息。

通過由虛擬至物理的映射后得到的路徑。

查詢字符串內(nèi)容。

發(fā)出請求的遠(yuǎn)程主機(jī)的IP地址。

發(fā)出請求的遠(yuǎn)程主機(jī)名稱。

提出請求的方法。比如GET、HEAD、POST等等。

執(zhí)行腳本的名稱。

服務(wù)器的主機(jī)名、DNS地址或IP地址。

接受請求的服務(wù)器端口號。

如果接受請求的服務(wù)器端口為安全端口時(shí),則為1,否則為0。

服務(wù)器使用的協(xié)議的名稱和版本。

應(yīng)答請求并運(yùn)行網(wǎng)關(guān)的服務(wù)器軟件的名稱和版本。

提供URL的基本部分。

HTTPS_SERVER_SUBJECT

服務(wù)器證書的主題字段。

INSTANCE_ID

INSTANCE_META_PATH

LOCAL_ADDR

LOGON_USER

PATH_INFO

PATH_TRANSLATED

QUERY_STRING

REMOTE_ADDR

REMOTE_HOST

REQUEST_METHOD

SCRIPT_NAME

SERVER_NAME

SERVER_PORT

SERVER_PORT_SECURE

SERVER_PROTOCOL

SERVER_SOFTWARE

URL

4.2.2ClientCertificate

集合

ClientCertificate集合是所有客戶證書的信息的集合。使用格式如下:

Request.ClientCertificate(key[SubField])

其中,對于參數(shù)

Key,該集合具有如表

4-3

所示的關(guān)鍵字。表4-3

ClientCertificate集合關(guān)鍵字關(guān)鍵字Subject

Issuer

VadidFrom

ValidUntil

159

說明

證書的主題。包含所有關(guān)于證書收據(jù)的信息。能和所有的子域后綴一起使用。

證書的發(fā)行人。包含所有關(guān)于證書驗(yàn)證的信息。除了CN外,能和所有的子域后綴一起使用。

證書發(fā)行的日期。使用VBScript格式。

該證書不在有效的時(shí)間。SerialNumber

Certificate

包含該證書的序列號。

包含整個(gè)證書內(nèi)容的二進(jìn)制流,使用ASN.1格式。Subject

Issuer

關(guān)鍵字還可以具有如表

4-4

所示的子域后綴此外,對于

SubField,

(比如:

SubjectOU或

IssuerL)。表4-4

子域后綴子域后綴C

O

OU

CN

L

S

T

GN

I

起源國家。

公司或組織名稱。

組織單元。

用戶的常規(guī)名稱。

局部。

州(或?。?/p>

個(gè)人或公司的標(biāo)題。

給定名稱。

初始。說明

當(dāng)文件

cervbs.inc(VBScript

使用)或

cerjavas.inc(Jscript

使用)通過使用#include

包含在

ASP

中時(shí),下面兩個(gè)標(biāo)志可以使用:(1)ceCertPresent

指明客戶證書是否存在,其值為

TRUE

FALSE。(2)ceUnrecongnizedIssure

指明在該鏈表中的最后的證書的發(fā)行者是否未知,其值為

TRUE

FALSE。

4.3

Response對象的應(yīng)用

4.3.1Response

對象簡介

Response對象用來訪問所創(chuàng)建的并返回客戶端的響應(yīng)??梢允褂?/p>

Response

對象控制發(fā)送給用戶的信息,包括直接發(fā)送信息給瀏覽器、重定向?yàn)g覽器到另一個(gè)

URL

或設(shè)置

cookie

的值。Response

對象為腳本提供了標(biāo)識服務(wù)器和性能的

HTTP

變量,發(fā)送給瀏覽器的信息內(nèi)容和任何將在

cookie

中存儲的信息。Response

對象還提供了一系列用于創(chuàng)建輸出頁的方法,如前面多次用到的

Response.Write方法。

1.Response

對象的集合

Response對象只有一個(gè)集合——Cookies,該集合設(shè)置希望放置在客戶系統(tǒng)上的

Cookie的值,它對應(yīng)于

Request.Cookies

集合。

Response對象的

Cookies

集合用于在當(dāng)前響應(yīng)中,將Cookies

值發(fā)送到客戶端,該集合訪問方式為只寫。160

2.Response

對象的屬性

Response

對象提供一系列的屬性,通常這些屬性由服務(wù)器設(shè)置,不需要設(shè)置它們。在某些情況下,可以讀取或修改這些屬性,使響應(yīng)能夠適應(yīng)請求。Response

對象的常用屬性如下所示。(1)Buuffer

指明由一個(gè)

ASP

頁所創(chuàng)建的輸出是否一直存放在

IIS

緩沖區(qū),直到當(dāng)前頁面的所有服務(wù)器腳本處理完畢或

Flush、End方法被調(diào)用。使用格式如下:

Response.Buuffer=True

|

False

當(dāng)緩沖頁輸出時(shí),只有當(dāng)前頁的所有服務(wù)器腳本處理完畢或者調(diào)用了

Flush

End

方法后,服務(wù)器才將響應(yīng)發(fā)送給客戶端瀏覽器,服務(wù)器將輸出發(fā)送給客戶端瀏覽器后就不能再設(shè)置

Buffer

屬性。Buuffer

屬性設(shè)置必須在任何輸出(包括

HTTP

報(bào)送信息)送住

IIS

之前。因此,在.asp

文件中,這個(gè)設(shè)置應(yīng)該在<%@LANGUAGE=…%>語句后面的第一行。在

ASP

3.0

中,Buuffer

缺省設(shè)置緩沖為開(True),而在早期版本中缺省為關(guān)(False)。(2)Charset=”value”

在由服務(wù)器為每個(gè)響應(yīng)創(chuàng)建的HTTP

Content-Type報(bào)頭中附上所用的字符集名稱,格式如下:

Response.Charset="value"

例如:

Response.Charset="gb2312"

設(shè)置字符集為

gb2312。(3)

ContentType

指明響應(yīng)的HTTP

內(nèi)容類型,內(nèi)容類型告訴瀏覽器所期望內(nèi)容的類型。使用格式如下:

Response.ContentType="MIME-type"

標(biāo)準(zhǔn)的

MIME

類型有

text/html

、image/GIF、image/JPEG

text/plain等。假如缺省該值,表示使用

MIME

類型

text/html。

Response.ContentType和Response.Charset應(yīng)用比較少,通常是直接在<head>頭中的<meta>

標(biāo)簽中設(shè)置

ContentType和

Charset

的內(nèi)容。例如:

<meta

http-equiv="Content-Type"

content="text/html?

charset=gb2312">

(4)Expires

指明頁面有效的以分鐘計(jì)算的時(shí)間長度,假如用戶請求其有效期滿之前的相同頁面,將直接讀取顯示緩沖中的內(nèi)容,這個(gè)有效期間過后,頁面將不再保留在用戶或代理服務(wù)器

"的緩沖中。使用格式如下:

Response.Expires=value

Expires

屬性指定了在瀏覽器上緩沖存儲的頁,距過期還有多少時(shí)間。如果用戶在某個(gè)頁過期之前又回到此頁,就會顯示緩沖區(qū)中的頁面。例如:

Response.expires=0

Expires屬性是一個(gè)較實(shí)用的屬性,上面的設(shè)置可使緩存的頁面立即過期。

當(dāng)用戶通過

ASP

的登陸頁面進(jìn)入

Web

站點(diǎn)后,應(yīng)該利用該屬性使登陸頁面立即過期,以確保安全。161

(5)ExpiresAbsolute

日期/時(shí)間型,指明一個(gè)頁面過期和不再有效時(shí)的絕對日期和時(shí)間。使用格式如下:

Response.ExpiresAbsolute=

#date

[time]#

例如:

Response.ExpiresAbsolute=

#2006-2-15

12:00:00#

設(shè)置頁面失效時(shí)間為2006

2月

15

日12

點(diǎn)。(6)

IsClientConnected

返回客戶是否仍然連接和下載頁面的狀態(tài)標(biāo)志,返回值為

True或

False。在當(dāng)前的頁面已執(zhí)行完畢之前,假如客戶轉(zhuǎn)移到別一個(gè)頁面,這個(gè)標(biāo)志可用來中止處理(使用

Response.End方法)。例如:

<%

if

not

response.IsClientConnected

then

response.End()

end

if

%>

(7)PICS(“PICS-Label-string”)

創(chuàng)建一個(gè)

PICS

報(bào)頭定義頁面內(nèi)容中的詞匯等級,如暴力、性、不良語言等。(8)Status="Code

message"

設(shè)置頁面狀態(tài)描述,指明發(fā)回客戶的響應(yīng)的

HTTP

報(bào)頭中表明錯(cuò)誤或頁面處理是否成功的狀態(tài)值和信息。例如:

<%

Response.Status

=

"401

Unauthorized"

%>

需要注意的是,當(dāng)設(shè)置某些屬性時(shí),使用的語法可能與通常所使用的有一定的差異。

3.Response

對象的方法

Response

對象提供一系列的方法,方便直接處理為返回給客戶端而創(chuàng)建的頁面內(nèi)容。常用

Response方法如下所示。(1)AddHeader

AddHeader

用于創(chuàng)建一個(gè)定制的

HTTP

報(bào)頭,并增加到響應(yīng)之中,可以利用

request

對象的

ServerVariable集合來讀取報(bào)頭內(nèi)容。使用格式如下:

Response.AddHeader

("name","content")

參數(shù)

name和

Content

表示報(bào)頭名稱和對應(yīng)的值。例如:

Response.AddHeader("cache-control","private")

AddHeader

方法不能替換現(xiàn)有的相同名稱的報(bào)頭。一旦已經(jīng)增加了一個(gè)報(bào)頭就不能被刪除。這個(gè)方法必須在任何頁面內(nèi)容被發(fā)住客戶端前使用。(2)在當(dāng)前的

HTTP

輸出流中寫入

Variant

類型的

SafeArray,而不經(jīng)過任何字符轉(zhuǎn)換。使用格式如下:

Response.BinaryWrite(safeArray)162

'設(shè)置狀態(tài)為401

Unauthorized

BinaryWrite

方法對于寫入非字符串的信息,例如,定制的應(yīng)用程序請求的二進(jìn)制數(shù)據(jù)或組成圖像文件的二進(jìn)制字節(jié),是非常有用的。(3)End

ASP

結(jié)束處理頁面的腳本,并返回當(dāng)前已創(chuàng)建的內(nèi)容,然后放棄頁面的任何進(jìn)一步處理,停止頁面編譯,并將已經(jīng)編譯內(nèi)容輸出到瀏覽器。使用格式如下:

Response.

End

例如:

<%

response.write

time()

response.end

'程序執(zhí)行顯示到此結(jié)束

response.write

time()

%>

(4)

Clear

當(dāng)

Response.Buffer

True時(shí),Clear

方法從

IIS

響應(yīng)緩沖中刪除現(xiàn)存的緩沖頁面內(nèi)容。但不刪除

HTTP

響應(yīng)的報(bào)頭,可用來放棄部分完成的頁面。使用格式如下:

Response.Clear()

該方法主要作用是清除緩沖區(qū)中的所有

HTML

輸出,但該方法只清除響應(yīng)正文而不清除響應(yīng)標(biāo)題。該方法和End方法似相反,End是到此結(jié)束返回上面的結(jié)果,而

Clear

卻是清除上面的執(zhí)行結(jié)果,然后只返回下面的結(jié)果。

<%

response.write

time()

response.clear

response.write

time()

%>

(5)Flush

發(fā)送

IIS

緩沖中所有當(dāng)前緩沖頁給客戶端。當(dāng)

Response.Buffer

True

時(shí),可以用來發(fā)送較大頁面的部分內(nèi)容給個(gè)別的用戶。使用格式如下:

Response.Flush()

(6)Redirect

通過在響應(yīng)中發(fā)送一個(gè)“302

Object

Moved”HTTP

報(bào)頭,指示瀏覽器根據(jù)字符串

url

下載相應(yīng)地址的頁面。停止當(dāng)前頁面的編譯或輸出,轉(zhuǎn)到指定的頁面。使用格式如下:

Response.Redirect("url")

例如:

Response.Redirect("")

上面語句執(zhí)行時(shí)將停止當(dāng)前網(wǎng)頁的編譯或輸出,跳轉(zhuǎn)到新浪網(wǎng)()首頁。(7)Write

在當(dāng)前的HTTP

響應(yīng)信息流和

IIS

緩沖區(qū)寫入指定的字符,使之成為返回頁面的一部分。

Write方法是

Response中使用得最多的方法,它將信息直接從服務(wù)器端發(fā)送到客戶端,達(dá)到在客戶端動態(tài)顯示內(nèi)容的目的。163

'以上程序到此全部被清除

Write方法使用格式如下:

Response.Write(“string”)

Response.Write后面是要發(fā)送到客戶端所顯示的信息,可以用括號包含,也可以直接書寫(注意和

Response.Write之間有空格)。如果

string為字符串信息或者

HTML代碼相關(guān),用引號包含;而

ASP

本身的函數(shù)或變量則不需要,直接用即可。并且無論字符串信息、HTML

代碼、函數(shù)還是變量之間進(jìn)行連接都是采用&號(針對vbscript)。例如:

<%

for

i=1

to

6

Response.Write("<h"&i&">"&"ASP

教程"&"</h"&i&">")

next

%>

上面代碼將在頁面中依次使用標(biāo)題格式

h1~h6

輸出文字“ASP

教程”如圖

4-9

左圖所示,,通過

Response.Write方法生成的源代碼如圖

4-9

右圖所示。圖4-9動態(tài)標(biāo)題文字同樣,其它的

ASP

內(nèi)容也可以通過

Response.Write

方法輸送到客戶端,例如,動態(tài)輸出的表格、數(shù)據(jù)庫記錄等等。

Response.Write有一種省略用法,就是之前常用的<%=…%>方式,這種方式實(shí)際上相當(dāng)于如下的腳本段。

<%

Response.Write(…)

%>

4.3.2

客戶端腳本對事件的響應(yīng)在

ASP

的動態(tài)交互中,經(jīng)常有一些工作會要求在客戶端進(jìn)行,例如,對數(shù)據(jù)的校驗(yàn),檢164

查用戶名和密碼是否符合要求等。這些工作如果提交到服務(wù)器端來進(jìn)行,則會耗費(fèi)大量網(wǎng)絡(luò)資源,給服務(wù)器造成很大的負(fù)擔(dān)。此外,還有些工作只能在客戶端完成,因此,這就需要編寫能夠在客戶端進(jìn)行工作的腳本。

1.處理表單內(nèi)對象的事件客戶端腳本通常寫在<script>中,以過程或函數(shù)的方式存在。當(dāng)發(fā)生某一事件時(shí),瀏覽器會自動調(diào)用相應(yīng)的過程或函數(shù)進(jìn)行處理。客戶端的事件通常來源于<form>表單中的控件元素,例如,按鈕被單擊(onClick)、文本框或列表項(xiàng)內(nèi)容改變(onChange)等。常用的表單控件事件有如下幾種。

onChange:控件內(nèi)容改變發(fā)生。

onClick:控件被單擊時(shí)發(fā)生。

onDblClick:控件被雙擊時(shí)發(fā)生。

onMouseDown:鼠標(biāo)按鍵按下時(shí)發(fā)生。

onMouseMove:鼠標(biāo)在控件上移動時(shí)發(fā)生。

onMouseOut:鼠標(biāo)移出對象范圍時(shí)發(fā)生。

onKeyPress:鍵盤按鍵按下時(shí)發(fā)生。下面是一個(gè)簡單的對輸入的數(shù)據(jù)進(jìn)行客戶端驗(yàn)證的案例。

<%@LANGUAGE="VBSCRIPT"

CODEPAGE="65001"%>

<!DOCTYPE

html

PUBLIC

"-//W3C//DTD

XHTML

1.0

Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html

xmlns="/1999/xhtml">

<head>

<meta

http-equiv="Content-Type"

content="text/html?

charset=utf-8"

/>

<title>輸入驗(yàn)證</title>

<script

language="vbscript">

'過程

button1_onclick用于響應(yīng)按鈕

button1

onclick(單擊)事件

sub

button1_onclick

dim

theform

set

theform

=

document.validform

if

isnumeric(theform.text1.value)

then

'獲取當(dāng)前文檔中的表單

validform

'檢查表單中的對象

text1

的值

value是否是數(shù)字

'檢查表單中的對象

text1

的值

value是否在范圍

1~10之間

if

theform.text1.value

<

1

or

theform.text1.value

>

10

then

msgbox

"請輸入一個(gè)

1

10

之間的數(shù)字。"

else

msgbox

"正確。"

end

if

else

msgbox

"請輸入一個(gè)數(shù)字。"

end

if165

'調(diào)用

msgbox

函數(shù)彈出消息

end

sub

</script>

</head>

<body>

<h3>輸入驗(yàn)證</h3><hr>

<form

name="validform">

請輸入一個(gè)

1

10

之間的數(shù)字:

<input

name="text1"

type="text"

>

<input

name="button1"

type="button"

onClick="button1_onclick"

value="提交">

</form>

</body>

</html>

上面的案例運(yùn)行效果如圖

4-10

所示。圖4-10輸入驗(yàn)證在瀏覽網(wǎng)頁時(shí),當(dāng)按鈕被單擊后,將通過下面的代碼來響應(yīng)鼠標(biāo)單擊(onClick)事件。

<input

name="button1"

type="button"

onClick="button1_onclick"

value="提交">

由于設(shè)置了

onClick="button1_onclick",因此,按鈕單擊事件發(fā)生時(shí),將調(diào)用客戶端腳本過程

button1_onclick進(jìn)行處理。在

button1_onclick

過程中,文本框

Text1

Value

屬性被用于檢查輸入值。要使用文本框的

Value

屬性,在代碼中必須引用文本框的名稱。每次引用文本框時(shí)都應(yīng)寫出全稱,即

Document.ValidForm.Text1。但是,當(dāng)多次引用窗體控件時(shí),這樣比較繁瑣。因此,過程中首先聲明一個(gè)變量theform,然后使用

Set

語句將表單

Document.ValidForm

賦給變量

TheForm,這樣就能使用

TheForm.Text1

引用文本框。常規(guī)的賦值語句(例如

Dim)對表單對象無效,必須使用

Set

來保持對對象的引用。在程序中,還用到了

msgbox

函數(shù)來顯示消息,該函數(shù)用于在客戶端彈出一個(gè)消息對話框,將

msgbox

函數(shù)中的信息顯示出來。下面這一句即對應(yīng)于圖

4-10

中的消息對話框。

msgbox

"請輸入一個(gè)

1

10

之間的數(shù)字。"

此外,還可以在窗體中提供內(nèi)部代碼以響應(yīng)窗體中對象的事件。例如,以下示例在窗體166

中嵌入腳本代碼以響應(yīng)窗體中按鈕的單擊事件:

<!DOCTYPE

html

PUBLIC

"-//W3C//DTD

XHTML

1.0

Transitional//EN"

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html

xmlns="/1999/xhtml">

<head>

<meta

http-equiv="Content-Type"

content="text/html?

charset=utf-8"

/>

<title>測試按鈕事件</title>

</head>

<body>

<form

name="form1">

<input

type="button"

name="button1"

value="單擊">

<!--用嵌入表單內(nèi)的腳本來檢查按鈕單擊事件-->

<script

for="button1"

event="onclick"

language="vbscript">

msgbox

"按鈕被單擊!"

</script>

</form>

</body>

</html>

大多數(shù)腳本代碼通常都是在

sub

function

過程中,僅在其他代碼要調(diào)用它時(shí)執(zhí)行。然而,也可以將

vbscript

代碼放在過程之外、script

塊之中。這類代碼僅在

html

頁面加載時(shí)執(zhí)行一次,這樣就可以在加載

web

頁面時(shí)初始化數(shù)據(jù)或動態(tài)地改變頁面的外觀。

2.驗(yàn)證后將數(shù)據(jù)傳遞到服務(wù)器前面的“輸入驗(yàn)證”案例使用的是普通按鈕控件,不能將表單內(nèi)容提交到服務(wù)器。如果使用

Submit

按鈕,所有數(shù)據(jù)都會被立即傳送到服務(wù)器,示例將不會看到數(shù)據(jù)來進(jìn)行檢查。避免使用

Submit

按鈕則可以檢查數(shù)據(jù),但不能向服務(wù)器提交數(shù)據(jù)。如果需要提交數(shù)據(jù)則需要再添加一段代碼,如下所示:

<SCRIPT

LANGUAGE="VBScript">

Sub

Button1_OnClick

Dim

TheForm

Set

TheForm

=

Document.ValidForm

If

IsNumeric(TheForm.Text1.Value)

Then

If

TheForm.Text1.Value

<

1

Or

TheForm.Text1.Value

>

10

Then

MsgBox

"請輸入一個(gè)

1

10

之間的數(shù)字。"

Else

MsgBox

"謝謝。"

TheForm.Submit

End

If

Else

MsgBox

"請輸入一個(gè)數(shù)字。"167

'

數(shù)據(jù)輸入正確,傳遞到服務(wù)器。

End

If

End

Sub

</SCRIPT>

在數(shù)據(jù)輸入正確時(shí),程序通過語句“TheForm.Submit”來調(diào)用表單對象的

Submit

方法,將數(shù)據(jù)傳遞到服務(wù)器。除非在數(shù)據(jù)被傳遞到服務(wù)器之前判斷其正誤,否則服務(wù)器將處理數(shù)據(jù),而不論其正確與否。注意,代碼中的

ValidForm

需要用實(shí)際的表單名稱替換,Text1

是表單中輸入文本框的名稱。

4.4

Cookie

在網(wǎng)站中的應(yīng)用

4.4.1Cookie

簡介

Cookie是

Web

服務(wù)器保存在客戶端的一段數(shù)據(jù)文本。

Cookie允許一個(gè)

Web

站點(diǎn)在客戶端的計(jì)算機(jī)上保存信息并在以后再取回它??梢杂?/p>

Cookie臨時(shí)保存用戶的賬號和口令,ASP

可以隨時(shí)讀取,驗(yàn)證用戶的合法性;也可以將用戶的瀏覽狀態(tài)保存在

Cookie

中,下次用戶再訪問網(wǎng)頁時(shí),由

ASP

向?yàn)g覽器顯示個(gè)性化頁面。從本質(zhì)上來說,Cookie

其實(shí)是一個(gè)標(biāo)簽,經(jīng)??赡苈牭降闹形姆g:小舔餅。當(dāng)用戶訪問一個(gè)需要存儲

Cookie

Web

站點(diǎn)時(shí),網(wǎng)站會在用戶的硬盤上留下一個(gè)標(biāo)記,下一次用戶訪問同一個(gè)站點(diǎn)時(shí),站點(diǎn)的頁面會查找這個(gè)標(biāo)記,并執(zhí)行相應(yīng)內(nèi)容。每個(gè)

Web

站點(diǎn)都有自己不同的標(biāo)記,標(biāo)記的內(nèi)容可以隨時(shí)讀取,但只能由該站點(diǎn)的頁面完成。通常,服務(wù)器端會為每一個(gè)訪問者產(chǎn)生一個(gè)唯一的

ID,然后以

Cookie文件的形式保存在每個(gè)用戶的機(jī)器上。如果使用

IE

瀏覽器訪問

Web,將會看到所有保存在用戶硬盤上的

Cookie。每個(gè)站點(diǎn)的

Cookie與其他所有站點(diǎn)的

Cookie存在同一文件夾中的不同文件內(nèi)。通常存放的地方是C:\wind

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論