版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第11章B/S結(jié)構(gòu)程序設(shè)計基礎(chǔ)11.1 ASP技術(shù)11.2 ASP程序的運行環(huán)境配置11.3 ASP的內(nèi)置對象11.4 ADO技術(shù) 習(xí)題1111.1 ASP技術(shù)ASP(Active Server Pages)是微軟公司推出的一種服務(wù)器端腳本環(huán)境,它內(nèi)嵌于IIS中,可以讓用戶更輕松地結(jié)合HTML Web頁面、腳本和ActiveX組件建立或執(zhí)行動態(tài)的、交互的Web服務(wù)器應(yīng)用程序。ASP并不單指某一種編程語言,而是一項把HTML代碼與VBScript 、JavaScript等腳本語言融合在一起的技術(shù)。11.1.1腳本語言腳本語言是介于HTML和Java、C+、Visual Basic等編程語言之間的
2、一種語言。HTML用于格式化文本和鏈接網(wǎng)頁,而編程語言則通常向計算機發(fā)送一系列復(fù)雜的機器指令,從而完成一系列操作。腳本語言介于兩者之間,常用于格式化文本和使用編程語言編寫的已編譯好的組件。腳本語言也可用來向計算機發(fā)送指令,但它們的語法規(guī)則沒有可編譯的編程語言那么嚴格和復(fù)雜。ASP默認的腳本編寫語言為VBScript語言,用戶可以根據(jù)自己的需要選擇其他腳本語言。只要安裝了相應(yīng)的腳本引擎,就可以使用幾乎目前所有流行的腳本語言編寫ASP應(yīng)用程序。11.1.2 對象和ActiveX組件在面向?qū)ο缶幊讨?,對象就是指由?dāng)作完整實體的操作和數(shù)據(jù)組成的變量。對象是基于特定模型的,用戶可通過由對象提供的一組方法
3、或相關(guān)函數(shù)組成的接口來訪問對象的數(shù)據(jù)或執(zhí)行相應(yīng)的操作。當(dāng)用戶用ASP編寫服務(wù)器端的應(yīng)用程序時,必須依靠ActiveX組件擴充Web應(yīng)用程序的功能,如鏈接數(shù)據(jù)庫,以及對數(shù)據(jù)庫進行在線操作。ActiveX組件是一類特殊的對象,ASP通過這些對象以實現(xiàn)具有某種特殊功能的網(wǎng)頁。11.1.3 ASP的特點ASP具有以下幾方面的特點:(1) 在ASP頁面中可以包含文本、HTML標記、服務(wù)器端腳本和客戶端腳本及ActiveX組件。Web服務(wù)器只執(zhí)行ASP頁面中的服務(wù)器端腳本,頁面中的其他內(nèi)容被服務(wù)器原封不動地發(fā)送給客戶瀏覽器。(2) ASP技術(shù)支持多種腳本語言,包括VBScript和Java Script。
4、在安裝了相應(yīng)的腳本引擎后,還可以使用其他腳本語言。(3) ASP提供了一些內(nèi)置對象,使用這些內(nèi)置對象可以增強ASP的功能。例如,實現(xiàn)客戶機瀏覽器與Web服務(wù)器的交互,在網(wǎng)頁間傳遞參數(shù),等等。(4) ASP可以使用內(nèi)置ActiveX組件完成許多重要功能。例如借助ADO對象可以輕松地完成對數(shù)據(jù)庫的操作。當(dāng)然,也可以使用第三方組件來完成特定的功能。(5) ASP具有一定的安全性,由于ASP頁面是在服務(wù)器端運行的,送到客戶機瀏覽器的是ASP執(zhí)行結(jié)果所生成的HTML頁面,用戶只能得到HTML代碼,無法獲取ASP源代碼。(6) ASP是一種解釋性語言,服務(wù)器只要在使用時對其進行解釋執(zhí)行即可。11.1.4
5、ASP文件的基本結(jié)構(gòu)ASP程序是以“.asp”為擴展名的文本文件,可以使用任何一種文本編輯器(如Windows中的記事本、寫字板)來創(chuàng)建,也可以使用那些帶有ASP增強功能的編輯器(如Frontpage、Dreamweaver等)來提高工作效率。在ASP文件中通常包含文本、HTML標記和腳本命令。HTML是一種超文本標記語言,HTML中的標記可以被客戶機瀏覽器讀取、解釋并顯示在瀏覽器中。腳本(Script)由一組可以在Web服務(wù)器端或客戶瀏覽器端運行的命令組成。此外,ASP腳本還可以調(diào)用ActiveX組件來執(zhí)行特定的任務(wù)。文本、HTML標記和腳本命令三部分的內(nèi)容可以以各種組合混雜在ASP文件中,
6、需要使用不同的符號進行區(qū)分:HTML使用標準HTML標記界定;ASP服務(wù)器端腳本命令使用“”表示腳本的開始和結(jié)束,既可以每一行ASP語句界定一次,也可以多行語句界定一次。例11-1 一個簡單的ASP程序(文件名為myfirst.asp):FONT size=很高興見到大家!程序的運行結(jié)果如圖11-1所示。這是一個向客戶機瀏覽器重復(fù)顯示文本“很高興見到大家!”且字體越來越大的一段代碼。在例11-1中,用“”括起來的是HTML標記;用“”括起來的是服務(wù)器腳本,由Web服務(wù)器負責(zé)執(zhí)行;其他字符為普通文本。圖11-1 包含腳本命令的HTML頁11.1.5 主腳本語言 ASP使Web開發(fā)者可以用各種腳本
7、語言編寫程序而不用擔(dān)心瀏覽器是否支持。實際上,在一個.asp文件中可以使用多種腳本語言,只要在每段腳本程序開始處用HTML標簽標明所用的腳本語言。VBScript是默認的主腳本語言,無需安裝VBScript的腳本引擎。在ASP文件中,還可以將任一種腳本語言設(shè)為主腳本語言。其設(shè)置格式為例如,可以通過以下語句,將JScript設(shè)為主腳本語言:11.2 ASP程序的運行環(huán)境配置在Windows Server 2003操作系統(tǒng)中默認安裝IIS 6.0。而在Windows 2000和Windows XP中一般安裝的為IIS 5.0。對開發(fā)者而言,IIS的各個版本之間的區(qū)別并不大。下面介紹在Windows
8、 2000 Server操作系統(tǒng)中安裝配置IIS 5.0。11.2.1 IIS服務(wù)器的安裝與測試步驟IIS服務(wù)器安裝與測試的步驟如下:(1) 進入控制面板,雙擊“添加/刪除程序”按鈕,進入“添加/刪除程序”對話框,單擊“添加/刪除Windows組件”按鈕,彈出“Windows組件向?qū)А睂υ捒?,如圖11-2所示。(2) 選中“Internet信息服務(wù) (IIS)”對話框,然后單擊“詳細信息”按鈕,彈出“Internet信息服務(wù) (IIS)”對話框,如圖11-3所示,該對話框的列表框中詳細列出安裝的組件信息。 (3) 選中所有選項,然后單擊“確定”按鈕,再次進入圖11-2所示的界面。然后單擊“下一
9、步”銨鈕,進行安裝(注:中途需要插入安裝光盤),直到安裝完畢。(4) 在安裝完成后,需要測試服務(wù)器是否安裝成功,打開瀏覽器,在地址欄中輸入:“http:/localhost”,如果成功安裝了IIS,并且沒有修改默認Web站點的設(shè)置,瀏覽器中的正確顯示效果如圖11-4所示。圖11-2 “Windows組件向?qū)А睂υ捒驁D11-3 “Internet信息服務(wù)(IIS)”對話框圖11-4 測試服務(wù)器出現(xiàn)的兩個頁面11.2.2 IIS服務(wù)器的配置 首先進入管理界面,打開控制面板,雙擊“管理工具”圖標,然后雙擊“Internet信息服務(wù)”圖標,進入管理界面,如圖11-5所示。在圖中可以看到在“默認Web站
10、點”下有很多子節(jié)點,每一個子節(jié)點就是一個應(yīng)用程序或者是一個虛擬路徑。圖11-5 “Internet信息服務(wù)”對話框(1)在Web服務(wù)器提供服務(wù)之前,先要啟動服務(wù),這可以通過工具欄上面的按鈕來實現(xiàn),也可以通過菜單實現(xiàn)。用鼠標右鍵單擊“默認Web站點”,彈出圖11-6所示的快捷菜單。通過彈出的菜單可以管理網(wǎng)站,如可以單擊“啟動”菜單命令啟動服務(wù)器、可以單擊“停止”菜單命令停止服務(wù)器、可以單擊“暫?!辈藛蚊顣和7?wù)器。如果要對服務(wù)器進行各種設(shè)置,則可以通過“屬性”菜單命令來設(shè)置。圖11-6 “Internet信息服務(wù)”對話框(2)虛擬目錄是物理上未包含在主目錄中的目錄,但可使客戶端瀏覽器認為是包含
11、在主目錄中的目錄。設(shè)定虛擬目錄的步驟如下:(1) 用鼠標右鍵單擊“默認Web站點”,在彈出的快捷菜單中選擇“新建”“虛擬目錄”菜單命令,彈出“虛擬目錄創(chuàng)建向?qū)А睂υ捒?,如圖11-7所示。(2) 單擊“下一步”按鈕,彈出如圖11-8所示對話框,在“別名”文本框中輸入虛擬目錄別名,本例的輸入為“website”,這個名稱是訪問網(wǎng)頁時需要輸入的名稱。圖11-7 歡迎界面圖11-8 虛擬目錄別名界面(3) 單擊“下一步”按鈕,彈出如圖11-9所示的對話框。單擊“瀏覽”按鈕,選擇虛擬目錄的路徑。(4) 單擊“下一步”按鈕,彈出如圖11-10所示的對話框。在這個界面上,可以進行權(quán)限的設(shè)置,為了保證網(wǎng)站的安
12、全,讀者只需選擇前3個選項就可以了。圖11-9 選擇Web站點目錄界面圖11-10 設(shè)置訪問權(quán)限界面 (5) 單擊“下一步”按鈕,彈出如圖11-11所示的對話框,單擊“完成”按鈕,便完成了虛擬目錄的設(shè)定。圖11-11 完成虛擬目錄設(shè)定界面虛擬目錄設(shè)置只是網(wǎng)站管理的開始,要對網(wǎng)站進行更加詳細的設(shè)置,還需要通過“屬性”對話框來設(shè)置。在“默認Web站點”上單擊鼠標右鍵,在彈出的快捷菜單中單擊“屬性”菜單命令,彈出“默認Web站點屬性”對話框,如圖11-12所示。在“Web站點”選項卡中各選項值可選默認值,其中較重要的一個選項是“TCP端口”,默認的端口為“80”,因此用戶輸入URL:“http:/l
13、ocalhost”和輸入URL:“http:/localhost:80”的結(jié)果是一樣的。但是如果把端口號改為8080,則訪問時就需要輸入端口號了,如“http:/localhost:8080”。通過設(shè)置不同的端口號,可以在同一臺計算機上安裝多個服務(wù)器。圖11-12 “默認Web站點屬性”對話框單擊“主目錄”選項卡,進入“主目錄”屬性頁,如圖11-13所示,在該屬性頁中通常采用默認的設(shè)定,最主要的是“本地路徑”的設(shè)定。圖11-13 “主目錄”屬性頁用戶可以對應(yīng)用程序進一步配置,單擊“配置”按鈕,彈出“應(yīng)用程序配置”對話框,如圖11-14所示。圖11-14 “應(yīng)用程序配置”對話框在該對話框的“應(yīng)用
14、程序選項”屬性頁中有幾個重要的設(shè)定,其中要選中“啟動父路徑”(通常在HTML文件里,要訪問“父路徑”,可以用“./”來表示,但是如果不選中該選項,可能訪問不了父路徑)。同時“默認ASP語言”設(shè)置為“VBScript”(讀者也可以設(shè)置為“JScript”),設(shè)置默認語言后,在ASP編程中,就不需要額外聲明了。設(shè)定“ASP腳本超時”一項的默認值是90秒,也就是當(dāng)一個ASP網(wǎng)頁的執(zhí)行時間超過90秒時,就會停止。在如圖11-12所示的對話框中單擊“文檔”選項卡,則進入“文檔”屬性頁,如圖11-15所示。圖11-15 “文檔”屬性頁在圖11-15中,可以看到“啟動默認文檔”選項,列表中有“Default
15、.htm”、“Default.asp”等文件名,這是為了訪問網(wǎng)頁方便而設(shè)置的,當(dāng)用戶訪問一個虛擬路徑的時候,如果該目錄下面包含“默認文檔”中所列的文件,則會自動顯示該頁內(nèi)容(顯示的優(yōu)先權(quán)自上而下排列),如用戶輸入“http:/localhost/website”和輸入“http:/localhost/website/default.htm”的結(jié)果是一樣的。11.2.3 ASP程序的運行在計算機上成功地安裝了Web服務(wù)器并將編制好的ASP文件存放在Web站點所對應(yīng)的主目錄上之后,就可以在瀏覽器中運行該ASP程序了。在瀏覽器的地址欄中輸入正確的URL地址,其格式如下:http:/localhost
16、/虛擬目錄名/文件名稱(包括擴展名)其中,“l(fā)ocalhost”是指本機,可用具體的域名代替。如果程序存放在主目錄中則不用虛擬目錄名。例如,在瀏覽器中運行前面的myfirst.asp文件(該文件已存在于“d:教材實例”目錄下),就可以在IE地址欄中輸入http:/localhost/website/myfirst.asp,就會出現(xiàn)圖11-1所示的結(jié)果。11.3 ASP的內(nèi)置對象ASP提供了可在腳本中使用的內(nèi)置對象,這些對象使用戶非常容易收集通過瀏覽器請示發(fā)送的信息,響應(yīng)瀏覽器以及存儲用戶信息,從而使開發(fā)者擺脫了很多繁瑣的工作。11.3.1 Response對象Response對象是ASP中一個
17、重要的內(nèi)置對象,對應(yīng)于Web服務(wù)器端的HTTP響應(yīng),用于向客戶端瀏覽器輸出指定信息。使用Response對象可以實現(xiàn)動態(tài)創(chuàng)建Web頁面,對客戶端請求重定向以及向客戶端寫入Cookie等功能。Response對象的語法為:Response.collectionpropertymethod其中,collection、property、method分別表示Response對象的集合、屬性和方法。對于這三個參數(shù),只能選擇其中之一。1. Response對象的屬性表11-1列出了Response對象的屬性。表11-1 Response對象的屬性屬 性功 能BufferCacheControlCharse
18、tContentTypeExpiresExpiresAbsoluteIsClientConnectedPicsStatus指定頁面的輸出是否被緩沖控制是否允許代理服務(wù)器緩存頁面將字符集名稱添加到Response對象的ContentType標題后面指定所響應(yīng)的HTTP內(nèi)容類型瀏覽器中所緩存頁面的超時時間間隔指定瀏覽器緩存頁面的具體超時日期和時間表明客戶端是否與服務(wù)器端保持連接用于設(shè)置頁面的Pics標簽,Pics標簽可以指明頁面的內(nèi)容級別用于傳遞Web服務(wù)器HTTP響應(yīng)的狀態(tài)2. Response對象的方法Response對象的方法如表11-2所示。表11-2 Response對象的方法方 法功
19、能AddHeaderAppendToLogBinaryWriteClearEndFlushRedirectWrite向所輸出的HTML頁面添加自定義HTTP頭(Header)在Web服務(wù)器的日志文件中追加記錄按字節(jié)格式向客戶端瀏覽器輸出數(shù)據(jù),不進行任何字符集的轉(zhuǎn)換清除服務(wù)器中緩存的Web頁面數(shù)據(jù)停止處理.asp文件并返回當(dāng)前的結(jié)果立即發(fā)送緩沖中的數(shù)據(jù)對當(dāng)前頁面進行重定向,嘗試連接另外一個URL直接向客戶端瀏覽器輸出數(shù)據(jù)3. Response對象的數(shù)據(jù)集合Response對象只有一個數(shù)據(jù)集合Cookies。Cookies是Web服務(wù)器通過瀏覽器在客戶機硬盤上所存儲的一些小文件(稱為Cookie文
20、件),這些文件可以包含用戶的一些個人信息,如用戶名、密碼、在網(wǎng)站上所執(zhí)行的操作等。當(dāng)同一客戶端瀏覽器再次訪問該Web服務(wù)器時,會將本地硬盤中的這些Cookie傳給服務(wù)器。例11-2 使用Response對象的Redirect方法,使同一個ASP程序可以根據(jù)客戶的具體情況產(chǎn)生不同的響應(yīng),為不同的客戶或不同的情況指定不同的頁面,該實例包括三個文件:Redirect.asp、work.htm和rest.htm。 (1) Redirect.asp的代碼如下:=8 and dtmhour(2) work.htm文件的代碼如下:您好(3) rest.htm文件的代碼如下:對不起,現(xiàn)在休息,請上班時間訪問!
21、上例在不同的時間的訪問結(jié)果如圖11-16所示。圖11-16 Response.redirect的示例11.3.2 Request對象Request對象用于在Web服務(wù)器端收集用戶通過HTTP傳送的所有信息,如HTML表單用POST或GET方式所提交的數(shù)據(jù)、存儲在客戶端的Cookies數(shù)據(jù)等,是ASP中最常用的對象之一。從功能上看,Request與Response正好相反。在ASP中,Request對象負責(zé)收集用戶信息,而Response對象負責(zé)向用戶端發(fā)送信息,通過這兩個對象的靈活運用,可以實現(xiàn)用戶和服務(wù)器端的交互,實現(xiàn)動態(tài)網(wǎng)頁。Request對象的語法如下:Request. collecti
22、onpropertymethod(variable)其中,collection、property、method分別表示Request對象的集合、屬性和方法,這三個參數(shù)只能選擇其中之一,也可以什么都不選。Variable是一些字符串,這些字符串指定要從集合中檢索的項目或作為方法與屬性的輸入。1. Request對象的屬性Request對象只有一個屬性TotalBytes,這是一個只讀屬性,表示從客戶端所接收數(shù)據(jù)的字節(jié)大小。在動態(tài)網(wǎng)頁中,人們所關(guān)注的是客戶端傳遞的具體信息而非整個字符串的長度,因此本屬性很少使用。語法格式如下:字節(jié)長度=Request.TotalBytes2. Request對象的
23、方法Request對象只提供一種方法BinaryRead,該方法以二進制方式讀取客戶端用POST方式所傳遞的數(shù)據(jù)。其語法格式如下:Variant 數(shù)組=Request.BinaryRead(Count)其中,參數(shù)Count是一個整型數(shù)據(jù),表示每次讀取數(shù)據(jù)的字節(jié)大小,范圍介于0到Request對象的TotalBytes屬性所取得的字節(jié)大小之間。如果程序中已經(jīng)引用Request.Form集合,就不能使用本方法了。反之,如果已經(jīng)使用了BinaryRead方法,就不能訪問Request.Form集合了。3. Request對象的數(shù)據(jù)集合Request對象將用戶通過HTTP傳送信息保存在幾個集合中,其語
24、法格式如下:Request. Collection(variable)其中,collection指定Request對象的數(shù)據(jù)集合,variable指定變量名。Request對象的數(shù)據(jù)集合如表11-3所示。表11-3 Request對象的數(shù)據(jù)集合集 合功 能ClientCertificateCookiesFormQueryStringServerVariables取得客戶端的身份權(quán)限數(shù)據(jù)取得存儲于客戶端的Cookies數(shù)據(jù)取得客戶端利用POST方式所傳遞的數(shù)據(jù)取得客戶端利用HTTP查詢字符串所傳遞的數(shù)據(jù)和GET方式所傳遞的數(shù)據(jù)取得Web服務(wù)器端的環(huán)境變量信息例11-3 應(yīng)用Reponse和Req
25、uest兩個對象設(shè)計用戶登錄程序。通常用戶登錄需要對數(shù)據(jù)庫進行操作,這些內(nèi)容在本書后面章節(jié)中會詳細加以介紹。本實例包括3個ASP程序。(1) 登錄頁面(userlogin.asp)的代碼如下: 用戶登錄 請輸入用戶名和密碼 用戶名:INPUT type=INPUT name=Username size=10 value= 密碼 在程序中,利用服務(wù)器腳本獲取其他網(wǎng)頁所傳遞的兩個QueyrString參數(shù):username和msg,這兩個參數(shù)的值會反映用戶登錄的不同情況。其中,username表示用戶名,msg表示登錄后的提示信息。(2) 用戶驗證。當(dāng)用戶填寫了登錄信息后,將提交給userdeal
26、.asp文件進行處理。在該文件中,將對文件名和密碼進行驗證,并根據(jù)驗證結(jié)果進行相應(yīng)的處理。程序代碼如下: (3) main.asp頁面。當(dāng)用戶輸入不同的信息時,處理方式會有所不同。當(dāng)輸入信息不正確時,將返回userlogin.asp 頁面,并給出具體提示信息。如果用戶通過了登錄驗證,將轉(zhuǎn)向main.asp頁面,代碼如下:%user=Request.QueryString(user)Response.Write 歡迎 &user & 訪問本網(wǎng)站!%不同登錄情況的顯示效果如圖11-17所示。圖11-17 不同登錄情況的顯示效果11.3.3 Session對象Session對象是ASP技術(shù)中非常重要
27、的對象,是實現(xiàn)用戶會話管理的重要手段,是編寫有關(guān)Web應(yīng)用程序的常用工具。Session指的是用戶從到達某個站點直到離開為止的一段時間內(nèi),服務(wù)器分配給用戶的一個存儲信息的全局變量的集合,這些變量可以是自動生成的,也可以是編程者在服務(wù)端腳本程序中定義的。與Application對象不同,即使有很多用戶同時訪問一個Web服務(wù)器的同一個ASP程序,他們的Session對象的內(nèi)容亦是不同的。1. Session對象的集合Session對象的集合包括Contents和StaticObjects。1) Contents集合Contents集合是ASP程序利用Session對象所定義的所有變量的集合。與St
28、aticObjects集合相比,Contents集合中的Session不使用標記進行定義,其語法格式如下:Session.Content(Key)其中,Key指明了Session變量的名稱,由于Contents集合是Session所默認的集合,也可使用下面的代碼訪問Contents集合:Session(key)2) StaticObjects集合StaticObjects集合包含在Global.asa文件中使用標記創(chuàng)建的所有Session級對象和變量。Global.asa文件對于網(wǎng)站應(yīng)用程序來說是一個非常重要的文件,可以在該文件中指定事件腳本,并聲明具有會話和應(yīng)用程序作用域的對象,有關(guān)該文件的
29、詳細內(nèi)容,可參考相關(guān)資料。標記是一個HTML標記,不能將其放在標記內(nèi)。利用標記創(chuàng)建對象的一般語法為其中,SCOPE說明該對象的使用范圍,在Global.asa文件中有兩個取值:Application或Session,當(dāng)指定為Session時,就創(chuàng)建了一個Session對象,ID用于指定創(chuàng)建對象實例時的名字;PROGID是與類標識相關(guān)的標識;CLASSID用于指定COM類對象的唯一標識。2. Session對象的屬性Session對象所具有的屬性如表11-4所示。表11-4 Session對象的屬性屬性功能CodePageLCIDSessionIDTimeOut用于指定在瀏覽器頁面中顯示內(nèi)容時所
30、使用的代碼頁,代碼頁與字符集相對應(yīng)設(shè)置現(xiàn)場標識?,F(xiàn)場是與用戶語言相關(guān)的一組用戶首選項信息,決定如何格式化日期和時間、項目以及如何按字母排序和如何比較字符串等返回用戶的Session標識指定Session的超時時間3. Session對象的方法Session對象的方法見表11-5。表11-5 Session對象的方法方法名功能AbandonContents.Remove(item)Contents.RemoveAll完成目前的網(wǎng)頁之后便結(jié)束Session對象從Contents集合內(nèi)刪除item所指定的變量,item可以是字符串或整數(shù),若item為整數(shù),那么這個整數(shù)所代表的是索引值刪除Conten
31、ts集合內(nèi)的所有變量4. Session對象的事件Session對象有兩個對象:Session_OnEnd和Session_OnStart。這兩個事件的代碼必須放在Global.asa文件中,其語法如下:sub Session_Onstart事件的處理程序代碼End Subsub Session_OnEnd事件的處理程序代碼End Sub例11-4 使用Session對象編寫計數(shù)器,程序代碼如下:session應(yīng)用舉例session變量您是第次來訪!打開瀏覽器,執(zhí)行程序,顯示“您是第1次來訪!”,如圖11-18所示。單擊“刷新”按鈕,可以看到來訪次數(shù)增加。重新打開瀏覽器,再次執(zhí)行該程序,仍然顯
32、示“您是第1次來訪!”。這是因為每個瀏覽器都有自己的Session對象。圖11-18 使用Session對象編寫的計數(shù)器程序11.3.4 Application對象Application對象是Web應(yīng)用程序級的一個對象,Web應(yīng)用程序是指Web站點某個虛擬目錄及其下的子目錄所包含的網(wǎng)頁和腳本程序的集合,通常由相互關(guān)聯(lián)的.html文件、.asp文件和Global.asa文件組成。每個Web站點可以設(shè)置多個虛擬目錄,也就是說,每個Web站點上可以有多個Web應(yīng)用程序。Application所包含的數(shù)據(jù)可被應(yīng)用程序級的所有用戶使用,并且可以在網(wǎng)站運行期間持久保存,因此Application對象特別適
33、合在應(yīng)用程序的不同用戶之間傳遞信息。例如,利用Application對象可以統(tǒng)計網(wǎng)站的在線人數(shù)、創(chuàng)建多用戶游戲及多用戶聊天室等,其功能類似于一般程序設(shè)計語言中的“全局變量”。Application對象和Session對象有很多相似之處,它們的功能都是在不同的ASP頁面之間共享信息。兩者的區(qū)別主要有以下幾點:(1) 應(yīng)用范圍不同。Application對象針對應(yīng)用程序的所有用戶,可以被多個用戶共享。從一個用戶那里接收到的Application變量可以傳遞給其他用戶。而Session對象則是針對單一用戶的,用戶無法訪問其他用戶的Session變量。(2) 存活時間不同。由于Application變
34、量可由多個用戶共享,因此不會因為某個用戶甚至全部用戶的離開而消失,一旦建立了Application變量,它就會一直存在,直到網(wǎng)站關(guān)閉。而Session變量會隨著用戶離開網(wǎng)站而被自動刪除。Application對象的語法格式為Application.collection | method其中,collection、method分別表示Application對象的集合和方法,這兩個參數(shù)只能選擇其中之一。Application對象包含許多的集合、方法和事件,但是它沒有屬性,這點與其他的ASP內(nèi)置對象有很大的區(qū)別。1. Application對象的集合Application對象有兩個集合:Conten
35、ts集合和StaticObjects集合。Contents集合允許Web應(yīng)用程序訪問所有未使用標記所創(chuàng)建的Application變量和對象。語法格式如下:Application.Contents(Key)其中,Key指明了Application變量的名稱。由于Contents集合是Application所默認的集合,也可以使用下面的代碼訪問Contents集合。Application(Key)StaticObjects集合可以獲取在Global.asa文件中以標記建立的對象和變量,使用時其語法格式如下:Application. StaticObjects(Key)其中,(Key)指定對象變量的
36、名稱。2. Application對象的方法由于Application對象中的變量可以被多個用戶訪問,當(dāng)多個用戶同時修改一個Application變量時可能出現(xiàn)數(shù)據(jù)不一致的錯誤。Application對象提供了Lock和Unlock兩種方法來保證多個用戶無法同時改變某一個Application變量。Lock方法鎖定Application對象,這時只允許當(dāng)前用戶存取Application變量而禁止其他用戶操作。也就是說,在同一時刻只有一個用戶可以對Application變量進行操作,保證了數(shù)據(jù)的一致性和完整性。Unlock方法用于解除用戶對Application對象的鎖定,允許其他用戶對Appl
37、ication變量進行修改。如果用戶沒有明確地調(diào)用Unlock方法,則服務(wù)器將在ASP文件結(jié)束或超時后解鎖,其語法格式如下:Application.LockApplication.UnLock3. Application對象的事件Application對象有兩個事件:Application_OnEnd和Application_OnStar。這兩個事件的處理過程在Global.asa文件中創(chuàng)建。OnStar事件對應(yīng)于Application對象的開始事件,只在第一個用戶第一次請求應(yīng)用程序時發(fā)生一次,在隨后的其他請求過程中不再激活,主要用于變量初始化、創(chuàng)建對象和執(zhí)行指定代碼。OnEnd事件對應(yīng)于Ap
38、plication對象的結(jié)束事件,在Web服務(wù)器被關(guān)閉時才發(fā)生,同樣也只發(fā)生一次。當(dāng)它被觸發(fā)時,應(yīng)用程序的所有變量也被相應(yīng)地取消。例11-5 使用Application對象編寫計數(shù)器程序,如圖11-19所示。圖11-19 使用Application對象編寫的計數(shù)器程序程序代碼如下:applicaiton應(yīng)用舉例Application變量您是第位來客說明:(1) 多次打開瀏覽器,運行程序,可以看到Application變量值的改變。(2) Application對象的生命周期是在服務(wù)器運行期間,因此當(dāng)虛擬服務(wù)器關(guān)機后Application變量將會丟失。想保留變量的值,需要用到文件系統(tǒng)的概念,此內(nèi)
39、容可參考有關(guān)資料。11.3.5 Server對象在ASP中,當(dāng)處理Web服務(wù)器上的特定任務(wù),特別是一些與服務(wù)器的環(huán)境和處理活動有關(guān)的任務(wù)時,需要用到Server對象。Server對象通過屬性和方法來訪問Web服務(wù)器,從而實現(xiàn)對數(shù)據(jù)、網(wǎng)頁、外部對象、組件的管理。其語法格式為Sperty | method其中,property和method分別表示Server對象的屬性和方法,這兩個參數(shù)只能選擇其中之一。1. Server對象的屬性Server對象只有ScriptTimeout一個屬性,用于設(shè)置ASP腳本所允許的最長執(zhí)行時間。如果在指定的時間內(nèi)腳本沒有執(zhí)行完畢,系統(tǒng)將停止其執(zhí)行,并且顯示超時錯誤。
40、其相應(yīng)的語法如下:Server.ScriptTimeou=NumSeconds其中,NumSeconds是以秒為單位,缺省時間是90秒。該設(shè)置時間的語句必須出現(xiàn)在ASP腳本之前,否則將不起作用。2. Server對象的方法Server對象常用的方法有以下兩種:(1) CreateObject方法。CreateObject方法是Server對象中最重要、最常用的方法,用于創(chuàng)建一個已經(jīng)在服務(wù)器上注冊的服務(wù)器組件(ActiveX控件)實例,包括所有的ASP內(nèi)置的組件和第三方提供的ActiveX組件。組件只有在創(chuàng)建了實例以后才可以使用,這些組件擴展了ASP的功能。其語法格式如下:Server.Crea
41、teObject(progID)其中,progID是指定的組件的標識,其格式為出版商名.組件名.版本號例如,創(chuàng)建一個ADODB組件的實例,可以使用下述代碼:(2) MapPath方法。MapPath方法可以將所指定的相對路徑或虛擬路徑轉(zhuǎn)換為服務(wù)器上相應(yīng)的物理路徑,當(dāng)需要物理路徑來操作服務(wù)器上的目錄或文件時,常用本方法。其語法格式如下:Server.MapPath(path)其中,path用于指定相對路徑或虛擬路徑。如果Path以字符“”或“/”開始,說明Path是一個完整路徑(由網(wǎng)站的根目錄開始);如果Path不以字符“”或“/”開始,說明Path所指定的路徑是相對于當(dāng)前ASP文件所在的路徑。
42、例11-6 應(yīng)用Server對象的MapPath方法轉(zhuǎn)換路徑,代碼格式如下:Server對象的MapPath方法轉(zhuǎn)換路徑 Server對象的MapPath方法轉(zhuǎn)換路徑 % Response.write 服務(wù)器的根目錄是: Response.write &Server.MapPath(/)& Response.write 當(dāng)前目錄的上層目錄是: Response.write &Server.MapPath(./)& Response.write 當(dāng)前目錄是: Response.write &Server.MapPath(./)& Response.write 當(dāng)前的文件是: Response.w
43、rite &Server.MapPath(mappath.asp)&% 其運行結(jié)果如圖11-20所示。圖11-20 使用MapPath方法轉(zhuǎn)換路徑(3) HTMLEncode方法。HTMLEncode方法用于對指定的字符串進行HTML編碼,從而使該字符串以所需的形式顯示出來。其語法格式如下:Server.HTMLEncode(HtmlString)其中,HtmlString是需要進行編碼的字符串。當(dāng)ASP程序向客戶端瀏覽器輸出HTML標記時,瀏覽器就將其自動解釋為HMTL標記,并按照標記所指定的格式顯示在瀏覽器上。如果想在瀏覽器中原樣輸出HMTL標記符,即瀏覽器不對這些標記進行解釋,可以使用本
44、方法。例11-7 使用HTMLEncode方法在網(wǎng)頁中顯示HTML語言的標簽。程序執(zhí)行結(jié)果如圖11-21所示。圖11-21 使用HTMLEncode方法程序代碼如下:%Response.Write 表單的基本格式:Response.Write Server.HTMLEncode()&Response.Write .Response.Write Server.HTMLEncode()&%(4) URLEncode方法URLEncode方法將所指定的字符串進行URL編碼,其語法格式如下:Server.URLEncode(string)其中,string指定要編碼的字符串。當(dāng)字符串?dāng)?shù)據(jù)以URL的形式
45、傳遞到服務(wù)器時,在字符串中不允許出現(xiàn)空格或其他特殊字符(如“&”、“#”等)。如果確實需要傳送這些特殊字符,可以用Server.URLEncode方法對這些字符串進行URL編碼。例如,QueryString的參數(shù)值包含空格:aspfile可將上面的代碼改為A HREF aspfile.asp?par=aspfile 11.4 ADO技術(shù)11.4.1 ASP與數(shù)據(jù)庫ASP程序?qū)?shù)據(jù)庫的訪問過程是:客戶端瀏覽器向Web服務(wù)器提出ASP頁面文件請求(包括數(shù)據(jù)庫操作),服務(wù)器對該頁面進行解釋,并在服務(wù)器端運行,完成數(shù)據(jù)庫操作,再把數(shù)據(jù)庫操作結(jié)果所生成的網(wǎng)頁返回瀏覽器,瀏覽器將該網(wǎng)頁內(nèi)容顯示在客戶端。A
46、SP通過一組ADO(ActiveX Data Object,ActiveX數(shù)據(jù)對象)對象模塊來訪問數(shù)據(jù)庫。ADO對象是ASP中最重要的內(nèi)置組件,是構(gòu)建ASP數(shù)據(jù)庫應(yīng)用程序的核心,它集中體現(xiàn)了ASP技術(shù)豐富而靈活的數(shù)據(jù)庫訪問功能。ADO是在OLE DB技術(shù)的基礎(chǔ)上實現(xiàn)的。OLE DB(Object Linking and Embedding DataBase,對象鏈接與嵌入數(shù)據(jù)庫)是微軟公司為適應(yīng)數(shù)據(jù)庫技術(shù)迅速發(fā)展而開發(fā)的新一代數(shù)據(jù)訪問編程接口,它提供一套標準COM接口。只要安裝相應(yīng)的OLE DB驅(qū)動程序,就可以訪問各種數(shù)據(jù)源,包括傳統(tǒng)的關(guān)系型數(shù)據(jù)庫、非關(guān)系型數(shù)據(jù)庫和其他一些數(shù)據(jù),如Excel電
47、子表格中的數(shù)據(jù)、電子郵件等。在OLE DB中,數(shù)據(jù)的交換是在數(shù)據(jù)使用者(Data Consumer)和數(shù)據(jù)提供者(Data Provider)之間進行的。數(shù)據(jù)使用者是指從OLE DB接口中取得數(shù)據(jù)的應(yīng)用程序,而數(shù)據(jù)提供者則負責(zé)提供OLE DB的接口,使得被訪問的數(shù)據(jù)可以被存取。OLE DB技術(shù)是相當(dāng)復(fù)雜的,連接應(yīng)用程序和OLE DB的橋梁就是ADO對象。ADO是一個OLE DB的使用者,它提供了對OLE DB數(shù)據(jù)源的應(yīng)用程序級訪問。在ASP中,可以利用ADO通過OLE DB的數(shù)據(jù)庫驅(qū)動程序而直接訪問數(shù)據(jù)庫,也可以編寫緊湊簡明的腳本以便連接到與ODBC兼容的數(shù)據(jù)庫。ASP、ADO、OLE DB與
48、各種數(shù)據(jù)庫之間的關(guān)系如圖11-22所示。圖11-22 ASP、ADO、OLE DB與各種數(shù)據(jù)庫之間的關(guān)系從圖11-22中可以看出,ASP是通過ADO對象來執(zhí)行對數(shù)據(jù)庫的操作的,而ADO又可以通過ODBC或直接使用OLE DB兩種方式與數(shù)據(jù)庫建立通信。從執(zhí)行效率來看,ODBC與數(shù)據(jù)庫通信所需的環(huán)節(jié)明顯多于直接使用OLE DB,因此,在ASP程序中應(yīng)更多地使用后者來操作數(shù)據(jù)庫。ADO是一種既易于使用又可擴充的技術(shù),用戶可以非常容易地在ASP頁面中通過ADO來操作數(shù)據(jù)庫。無論哪種數(shù)據(jù)庫,通過ADO對象對其進行訪問的方法基本相同,只是在與數(shù)據(jù)庫的最初連接上稍有差別。11.4.2 ODBC的設(shè)置假設(shè)欲創(chuàng)
49、建一個與已有數(shù)據(jù)庫相連的DSN,該數(shù)據(jù)庫用SQL Server 2000創(chuàng)建,服務(wù)器名為pdf,sa密碼為123,數(shù)據(jù)庫名為student。其操作步驟如下:(1) 在“控制面板”中打開“管理工具”項,選擇打開“數(shù)據(jù)源(ODBC)”,并選擇“系統(tǒng)DSN”選項。(2) 單擊“添加”按鈕,在彈出的“創(chuàng)建新數(shù)據(jù)源”窗口中選擇“SQL Server”。單擊“完成”按鈕,出現(xiàn)“創(chuàng)建到SQL Server的新數(shù)據(jù)源”窗口,如圖11-23所示。圖11-23 “創(chuàng)建到SQL Server的新數(shù)據(jù)源”窗口(3) 在該窗口中“名稱”文本框中,輸入ODBC數(shù)據(jù)源的名稱(DSN),如stusql。根據(jù)實際需要在“描述”
50、文本框中指定數(shù)據(jù)源的描述信息。在“服務(wù)器”文本框中指定該SQL Server服務(wù)器的名稱,服務(wù)器的名稱可以使用計算機名,也可以用IP地址,這里輸入pdf。單擊“下一步”按鈕,彈出“創(chuàng)建到SQL Server的新數(shù)據(jù)源”SQL Server身份驗證窗口,如圖11-24所示。圖11-24 SQL Server身份驗證窗口(4) 選擇單選項“使用用戶輸入登錄ID和密碼的SQL Server驗證”(要求SQL Server服務(wù)器設(shè)置為混合驗證),并輸入用戶名sa和相應(yīng)的密碼,單擊“下一步”按鈕,彈出如圖11-25所示的窗口。圖11-25 指定默認的數(shù)據(jù)庫等選項(5) 指定默認的數(shù)據(jù)庫等選項后,單擊“下
51、一步”按鈕,彈出如圖11-26所示的窗口。圖11-26 指定日志文件等選項(6) 指定了日志文件等選項之后,單擊“完成”按鈕,彈出“ODBC Microsoft SQL Server安裝”窗口,如圖11-27所示。圖11-27 “ODBC Microsoft SQL Server安裝”的窗口(7) 單擊“測試數(shù)據(jù)源”按鈕,出現(xiàn)“SQL Server ODBC數(shù)據(jù)源測試”窗口。如果窗口中顯示“測試成功”,表示該數(shù)據(jù)源可以使用。最后單擊“確定”按鈕完成對該數(shù)據(jù)源的創(chuàng)建。11.4.3 ADO對象ADO包括7個對象和4個集合,其對象和集合的說明見表11-6和表11-7。表11-6 ADO對象描述表11
52、-7 ADO集合描述1. Connection對象Connection對象用來在應(yīng)用程序和數(shù)據(jù)庫中建立一條數(shù)據(jù)傳輸線路,在此基礎(chǔ)上,可以使用Command對象及RecordSet對象來對Connection對象所連接的數(shù)據(jù)庫進行插入、刪除、更新和查詢等操作。(1) Connection對象的屬性。Connection對象的常用屬性見表11-8。表11-8 Connection對象的常用屬性續(xù)表 (2) Connection對象的方法。Connection對象的常用方法見表11-9。表11-9 Connection對象的常用方法及描述(3) Open方法的詳細介紹。Open方法用于創(chuàng)建與數(shù)據(jù)源之
53、間的物理連接,在該方法成功完成后,連接才真正建立起來,才能對數(shù)據(jù)源發(fā)出命令并且處理結(jié)果。其相應(yīng)的語法如下:Connection.Open connectionString, UserID, Password 其中,connectionString用于指定連接字符串,該參數(shù)是由分號分隔的一系列argument=value語句,用來定義諸如數(shù)據(jù)源提供者和數(shù)據(jù)源位置等參數(shù);UserID指定建立連接時所用的用戶名;Password指定連接時所用的密碼。在Connection對象的Open方法中,如何確定connectionString的內(nèi)容是實現(xiàn)正確連接數(shù)據(jù)庫的關(guān)鍵,現(xiàn)分為兩種情況加以討論。 通過OD
54、BC連接。在利用ODBC創(chuàng)建連接時,對于不同情況,connectionString參數(shù)的設(shè)置也有所不同。 對于在“ODBC數(shù)據(jù)源管理器”中設(shè)置過的數(shù)據(jù)源,該參數(shù)設(shè)置比較簡單,可以使用“DSN=數(shù)據(jù)源名稱”的格式。利用該格式創(chuàng)建與數(shù)據(jù)源的連接,使用起來比較簡單,由于不能在程序代碼中直接得到數(shù)據(jù)庫的具體位置和文件名,具有一定的安全性。其主要缺點是:當(dāng)數(shù)據(jù)庫移植到其他服務(wù)器時,需要重新設(shè)置數(shù)據(jù)源。 對于沒有在“ODBC數(shù)據(jù)源管理器”中設(shè)置過的數(shù)據(jù)源,可以利用ODBC連接字符串來創(chuàng)建連接。為了提供向后兼容的功能,ODBC的OLE DB提供者支持ODBC連接字符串語法。常用的ODBC連接字符串如表11-
55、10所示。表11-10 常用的ODBC連接字符串 通過OLE DB建立連接。OLE DB作為新的數(shù)據(jù)訪問編程接口,和ODBC不同之處在于,除提供了對關(guān)系型數(shù)據(jù)庫的訪問以外,還擴展了ODBC提供的功能,可以訪問非關(guān)系型數(shù)據(jù)庫和其他一些資源。并且微軟官方宣稱在性能方面OLE DB也要優(yōu)于ODBC。常用的OLE DB連接字符串如表11-11所示。表11-11 OLE DB連接字符串通過OLE DB連接SQL Server數(shù)據(jù)庫,假設(shè)服務(wù)器的名稱為pdf,連接的數(shù)據(jù)庫為student,服務(wù)器的帳號為sa,密碼為123,可以將連接字符串設(shè)為strProvider=“Provider=SQLOLEDB.1
56、; Data Source=pdf; Initial Catalog=student; &User ID=sa; Password=123; 其中,各參數(shù)的含義如下:(a) Provider指定用于連接的是提供者的名稱,SQL Server使用SQLOLEDB.1。 (b) Data Source指定數(shù)據(jù)庫服務(wù)器的名稱。(c) Initial Catalog指定要連接的數(shù)據(jù)庫名稱。(d) User ID表示登錄SQL Server服務(wù)器的用戶帳號。(e) Password表示登錄SQL Server服務(wù)器的用戶密碼。(4) Execute方法的詳細介紹。Execute方法能夠執(zhí)行指定的查詢、S
57、QL語句等操作,該方法的語法有如下兩種格式。 對于沒有返回結(jié)果的命令格式: connection.Execute CommandText,RecordsAffected,Options 對于有返回結(jié)果的(返回一個RecordSet對象)命令格式: Set RecordSet=connection.Execute(CommandText, RecordsAffected,Options)在Eexcute方法中,CommandText是一個字符串,包含要執(zhí)行的SQL語句、表名、存儲過程或特定提供者的文本,該參數(shù)的內(nèi)容可以是標準SQL語句或提供者所支持的任何特殊命令格式;RecordsAffecte
58、d是可選參數(shù),長整型變量,其值是執(zhí)行指定操作所影響的記錄數(shù)目;Options參數(shù)指定了CommandText的性質(zhì),常用取值及含義如表11-12所示。表11-12 Execute方法的Options參數(shù)表中的AdCmdText、AdCmdTable等常量的取值在一個名為adovbs.inc的特殊文件中定義。adovbs.inc文件中包含ADO所使用的所有VBScript常量。一般來說,該文件位于Program FilesCommon FilesSystemADO目錄下。在使用時,可以將該文件復(fù)制到網(wǎng)站所在的目錄下,并且在ASP頁面中使用INCLUDE命令將該文件包含進來,此后,就可以使用該文件
59、中定義的那些VBScript常量了。例11-8 以用戶注冊為例,演示如何利用connection對象open方法連接數(shù)據(jù)庫,以及connection的execute方法增加、刪除、修改數(shù)據(jù)庫的數(shù)據(jù)。注冊頁面(main.htm)的代碼如下:注冊頁面歡迎注冊,請輸入用戶名和密碼姓名:密碼: 注冊頁面提交的register.asp文件代碼如下:%取得用戶名和密碼,并刪除用戶名和密碼中的首尾空格username=Trim(Request.Form(name)userpass=Trim(Request.Form(password)如果用戶名和密碼為空,重定向到注冊頁面If username= or userpass= Then response.Redirect main.htmEnd if打開數(shù)據(jù)庫,建立連接Set conn=Server.CreateObject(ADODB.Connection)strProvider = “Provider=SQLOLEDB.1;Data Source=pdf;Initial Catalog=user; User ID=sa; Password=123;conn.open strProvider檢查用戶是否已經(jīng)存在commandtext=SELECT * FROM t_user WHERE d_user= & username &
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024商場美食節(jié)臨時攤位租賃合同
- 2024年度健身器材購銷合同
- 2024年度國際貿(mào)易仲裁與訴訟合同
- 2024年定制LED高炮廣告牌建設(shè)合同
- 2024乙公司向甲方提供跨境電商服務(wù)的詳細合同條款
- 2024年度grc材料研發(fā)與技術(shù)轉(zhuǎn)讓合同
- 航天英雄課件教學(xué)課件
- 2024年住宅租賃協(xié)議:個人與房東間的權(quán)利義務(wù)規(guī)定
- 04版0千伏電力施工合同樣本
- 2024年工程招投標合同管理實操手冊
- 交通運輸行業(yè)火災(zāi)安全預(yù)案
- 電氣工程施工應(yīng)急預(yù)案
- 廠中廠承租方對出租方日常安全檢查記錄表
- 江蘇省南通市如東高級中學(xué)2024-2025學(xué)年高二上學(xué)期期中考試數(shù)學(xué)試卷(含答案)
- 預(yù)防傾倒綜合征
- 第六章 數(shù)列綜合測試卷(新高考專用)(學(xué)生版) 2025年高考數(shù)學(xué)一輪復(fù)習(xí)專練(新高考專用)
- 貿(mào)易安全內(nèi)部培訓(xùn)教材
- 手術(shù)室急危重患者的搶救與配合
- 新能源汽車充電技術(shù) 課件 2-3 認知新能源汽車直流充電系統(tǒng)
- 小米公司介紹課件
- DB34∕T 4010-2021 水利工程外觀質(zhì)量評定規(guī)程
評論
0/150
提交評論