版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版小區(qū)商業(yè)街物業(yè)社區(qū)文化活動贊助與支持服務(wù)合同2篇
- 2025年陶瓷行業(yè)標(biāo)準(zhǔn)制定與實(shí)施合同3篇
- 2025年私家車租賃車輛檢測與評估服務(wù)合同3篇
- 2025年勞務(wù)派遣合同審查協(xié)議
- 2025年云服務(wù)監(jiān)控協(xié)議
- 2025版?zhèn)€人房屋產(chǎn)權(quán)轉(zhuǎn)移合同模板4篇
- 二零二五年度綠色建筑改造項(xiàng)目合同書4篇
- 2025年垃圾處理和解協(xié)議
- 2025年混合贈與合同與贈與稅
- 2025版協(xié)議離婚法律援助與調(diào)解服務(wù)協(xié)議3篇
- 第1課 隋朝統(tǒng)一與滅亡 課件(26張)2024-2025學(xué)年部編版七年級歷史下冊
- 2025-2030年中國糖醇市場運(yùn)行狀況及投資前景趨勢分析報(bào)告
- 冬日暖陽健康守護(hù)
- 水處理藥劑采購項(xiàng)目技術(shù)方案(技術(shù)方案)
- 2024級高一上期期中測試數(shù)學(xué)試題含答案
- 山東省2024-2025學(xué)年高三上學(xué)期新高考聯(lián)合質(zhì)量測評10月聯(lián)考英語試題
- 不間斷電源UPS知識培訓(xùn)
- 三年級除法豎式300道題及答案
- 2024年江蘇省徐州市中考一模數(shù)學(xué)試題(含答案)
- GB/T 1196-2023重熔用鋁錠
- 幼兒園教師培訓(xùn):計(jì)數(shù)(數(shù)數(shù))的核心經(jīng)驗(yàn)
評論
0/150
提交評論