當前位置:法律諮詢服務網 - 企業資訊 - 什麽是asp?

什麽是asp?

ASP是Active Server Page的縮寫,意思是“活動服務器頁面”。ASP是微軟開發的應用程序,而不是CGI腳本。它可以與數據庫和其他程序進行交互,是壹個簡單方便的編程工具。Asp的網頁文件格式是。ASP,現在常用於各種動態網站。ASP是壹個服務器端腳本環境,可用於創建和運行動態網頁或Web應用程序。ASP網頁可以包含HTML標簽、純文本、腳本命令、com組件等等。使用ASP,您可以將交互式內容(如在線表單)添加到網頁中,還可以創建使用HTML頁面作為用戶界面的web應用程序。與HTML相比,ASP頁面具有以下特點:

(1) ASP可以突破靜態網頁的壹些功能限制,實現動態網頁技術;

(2)ASP文件包含在HTML代碼組成的文件中,易於修改和測試;

(3)服務器端的ASP解釋器會在服務器端制作ASP程序,並將結果以HTML格式發送給客戶端瀏覽器,這樣所有瀏覽器都可以正常瀏覽ASP生成的頁面;

(4)ASP提供了壹些內置對象,可以讓服務器端腳本更加強大。比如可以從web瀏覽器獲取用戶通過HTML表單提交的信息,並在腳本中對信息進行處理,然後將信息發送到web瀏覽器;

(5)ASP可以使用服務器端的ActiveX組件來執行各種任務,例如訪問數據庫、發現電子郵件或訪問文件系統。

(6)由於服務器將ASP程序執行的結果以HTML格式發送回客戶端瀏覽器,用戶將看不到ASP編寫的原程序代碼,存儲的ASP程序代碼將被竊取。

ASP的工作原理

當ASP功能被集成到壹個網站中時,會發生以下情況:

1.用戶在瀏覽器地址欄中輸入URL,默認的頁面擴展名是。asp。

2.瀏覽器向服務器發送請求。

3.服務器引擎開始運行ASP程序。

4.ASP文件自上而下處理,執行腳本命令,執行HTML頁面內容。

5.將頁面信息發送到瀏覽器。

ASP的運行環境

Asp需要在PWS或IIS下運行。PWS或IIS服務附在windows98或windows2000的光盤上,可以通過“添加/刪除程序”中的“添加/刪除windows組件”來安裝。

壹般asp要和access數據庫或者SQL Server數據庫結合起來,才能編譯出功能強大的程序。

能夠運行ASP的Web服務器軟件

Windows2000默認安裝IIS 5.0,windows xp默認安裝IIS5.1,windows 2003默認安裝IIS6.0。

PWS(個人web服務器)是壹個運行在windows98環境下的簡單的個人web服務器。

ASP的含義和特點

ASP(應用服務提供商)是指“通過網絡以租賃方式提供應用軟件服務的運營商”,即運營商以應用軟件為主體,通過網絡壹對多交付服務。這種面向服務的交易模式使得企業可以通過租賃的方式擁有更具成本效益的軟件使用權,也可以因為運營商的集中管理而大大降低企業的維護成本。

基本上,ASP有三個特征:軟件服務化、服務網絡化、信息外包服務與網絡的結合、產品渠道化和渠道產品化,甚至可以看作是ISP(互聯網服務提供商)和ITS(信息技術服務)的結合。

ASP的英文是Application Service Provider,中文的標準翻譯是“應用服務提供商”,是指為商業或個人客戶提供管理應用解決方案的公司或企業。最近ASP被媒體炒得沸沸揚揚。非IT行業的人面對壹堆專業術語很難理解ASP的內容。本文試圖用簡單的語言為讀者揭開ASP的神秘面紗,並對IT行業中熱門的ASP領域有壹些基本的了解。

什麽是1。ASP?

簡單來說,ASP就是為客戶提供服務的服務商。和會計師事務所、婚姻介紹所沒有本質區別。不同的是,ASP主要以互聯網為主要工作和業務工具,以壹對多的方式向企業和公司提供標準化的應用軟件、相關技術咨詢和管理租賃服務。ASP的概念最早是由美國人在1998年提出的。目前,它被全球各大IT廠商視為能夠推動網絡經濟發展、基礎堅實的第三種網絡商業模式。

與傳統的外包服務相比,ASP的主要區別在於ASP是壹對多的商業模式,其提供的服務是兼容協調的,ASP的收費方式壹般是包月。

業內人士認為,ASP壹般有這樣的“成員”:電信運營商、傳統IT服務提供商、互聯網接入服務提供商(ISP)、獨立軟件提供商(ISV)、系統集成商和單純的ASP公司。

根據流行的觀點,ASP有以下五個核心內涵:

A.ASP關註於應用程序,並提供對應用程序的訪問和管理。

B.ASP服務可以為用戶提供在“定制化”的全新應用系統環境下即可訪問的服務,無需服務器、人員、系統和系統授權等資源的前期投入,如ISP,此類服務壹般按月收取ASP服務費。

C.ASP采用集中管理——ASP壹般都有壹個管理中心,所有客戶都可以通過互聯網遠程訪問,獲得技術支持和咨詢服務。

D.壹對多服務,也就是說ASP提供標準化的產品包,產品被客戶定制到最低程度或者沒有被客戶定制過,對於行業用戶來說已經達到實用便捷的標準。

E.根據合同交貨。在ASP客戶眼中,ASP是壹個根據客戶協議的內容提供相關服務的組織,並保證應用服務系統的服務能夠真正履行。

2.ASP為什麽流行?

從大的方面看,困擾國內企業生存發展的核心問題是管理。隨著互聯網的普及和應用,企業用戶可以隨時隨地直接租用ASP服務器和軟件系統來管理自己的業務。這樣做的好處是:第壹,企業可以節省大量的IT建設費用,大大降低企業管理信息化的成本。其次,ASP的用戶可以通過多種方式獲取應用和服務,軟件服務產品可以通過網絡在極短的時間內形成完善、高效、先進的企業管理體系,快速獲得企業的壹體化運營管理方案。

網絡經濟的快速發展和電子商務的快速發展也是主要原因。從門戶到內容,從關註到垂直,網絡和網站逐漸轉向ASP。

據筆者了解,網友“鳥”是國內最早觸電ASP的人。1998年6月,他自發組織了“鳥之家”學習、交流、探討ASP技術,現已發展成為chinaasp.com和國內最早的ASP應用技術服務商網站。上海互惠網絡有限公司結合國內實際情況,推出ASP平臺互惠網服務國內企業,為企業提供以電子商務為核心的內外網設施和應用的遠程架構和托管服務,打造虛擬企業門戶(EP),將ASP直接應用於商業增殖。

此外,ISP也全面轉向ASP的懷抱,成為ISP進壹步發展的產物。軟件廠商對ASP情有獨鐘。業內最新消息是,國內第三大電信網通制定了ASP的發展戰略,國內最大的管理咨詢公司Hamp將旗下八家子公司定位於企業內部資源計劃管理(ERP)領域的ASP,北京聯誠互動將定位於客戶關系管理(CRM)領域的ASP,北京數字方舟將定位於網絡辦公領域的ASP。惠普正在與中國建設銀行討論。

ASP正在IT經濟的浪潮中崛起,其發展前景不可估量。

3.ASP的發展階段及問題

各種IT角色,主要是網絡服務商、軟件商、ISP,都在根據自己的優勢在ASP領域做著各種嘗試。目前ASP提供的服務多種多樣,沒有標準化和量化的概念。硬件廠商正在向ASP的“土壤”和權力方向靠攏,而軟件廠商和ISP則直接介入ASP業務的第壹線。

筆者估計,經過壹段時間的嘗試和發展,ASP將向服務集成發展,產品和服務的初步標準化也將很快建立,之後將進入市場細化和標準制定以及ASP產品成熟的時期,ASP的穩定增長最終將成為it行業商業模式的核心!

目前在ASP發展的道路上,主要的問題是觀念的轉變:以租賃代替購買,以服務集成代替產品分銷商,以服務經濟代替產品經濟等等。實際上,安全和服務質量是ASP和客戶的重中之重。要實現ASP提出的“租賃高科技”的口號,ASP任重道遠!

ASP常用內置函數

1,日期/時間函數

這些功能包括顯示年、月、日、時、分、秒、周等。

(1)Now函數:根據計算機系統設置的日期和時間返回當前日期和時間值。立即使用方法();

(2)日期函數:只返回當前計算機系統設置的日期值。用法:date();

(3)時間函數:只返回當前計算機系統設置的時間值。用法:time();

(4)Year函數:返回代表年份的整數。用法:year(date),其中date參數是可以表示日期的任何參數。例如,“year(date())”表示從“date()”獲得的日期中提取年份的整數。

此外,還可以這樣應用:“year(#5 20,2006#)”表示提取“2006年5月20日”中“year”的整數值。“2006年5月20日”也可以用“2006年5月20日”、“2006年5月20日”等形式表示,即“某月某日”和“某年某月某日”的組合。還要註意“#”用於包含以指示日期值。

(5)Month函數:返回壹個介於1和12之間的整數值,代表壹年中的壹個月。用法:月(日期)。參數date的描述與year函數的描述相同。但是要註意日期的正確性,比如“#13-31-2006#”,根本沒有“13”月份,肯定是錯的。

(6)Day函數:返回1到31之間的整數值,表示壹個月中的某壹天。用法:日(日期)。參數date的描述與year函數的描述相同。還要註意日期的正確性。例如,在“#2-30-2006#”中為“二月”定義的“30”日是錯誤的。

(7)Hour函數:返回0到23之間的整數值,表示壹天中的壹個小時。用法:小時(時間)。其中參數time是可以表示時間的任意表達式。比如“hour(time())”就是從“time()”得到的時間中提取“小時”的整數。同樣,參數time也可以使用“小時(#11:45:50#)”來表示當前小時是從“11”的“45”分和“50”秒中提取的。當然,定義的時間要符合時間的規範。

(8)Minute函數:返回0到59之間的整數值,表示壹小時中的壹分鐘。用法:分鐘(時間)。時間參數的描述與小時函數的描述相同。

(9)Second函數:返回0到59之間的整數值,代表壹分鐘中的壹秒。用法:秒(時間)。時間參數的描述與小時函數的描述相同。

(10)Weekday函數:返回壹周中某壹天的整數。用法:工作日(日期)。參數date的描述與year函數的描述相同。該函數的返回值是“1”到“7”,分別代表“星期日”、“星期壹”...和“星期六”。例如,當返回值為“4”時,表示“星期三”。

(11)WeekDayName函數:返回壹周中某壹天的字符串。與weekday函數相比,它翻譯的是“星期幾”,使用方法:weekdayname(weekday)。參數weekday是壹周中特定壹天的值。例如,“weekdayname(weekday(date())”表示今天是星期幾。因為“date()”表示當前時間,“weekday(date())”表示壹周中特定壹天的整數。

當然,weekdayname函數最終顯示的字符串內容也與當前的操作系統語系有關。比如中文操作系統會顯示“周壹”等漢字,而英文操作系統會顯示“mon”(簡稱Mon)(周壹)。

此外,VBScript中還有壹些關於時間間隔的計算函數:

(1)DateAdd函數:返回指定時間間隔的日期和時間。妳可以計算相隔多少年,或者相隔幾個月,或者相隔幾個小時,等等。用法:dateadd(間隔,數字,日期)。

其中參數interval表示要添加的時間間隔單位。它以字符串的形式表示,如“yyyy”代表年,“q”代表季度,“m”代表月,“d”代表日,“ww”代表周,“h”代表小時,“n”代表分鐘,“s”代表秒。

並且參數號指示增加的時間間隔的數量。它以數字形式表示,可以是負數。參數date應該采用正確的日期和時間格式。

例如,dateadd ("D ",100," 2006年5月20日")表示2006年5月20日後100天的日期值:2006年8月28日。再比如dateadd ("h ",-12," 2005-5-20 10: 00 "),表示2005年5月20日上午10點之前12小時的日期和時間。

(2)DateDiff函數:返回兩個日期和時間之間的間隔。可以算出兩個日期之間的年齡,小時等等。用法:datediff (interval,date1,date2)。

參數interval和dateadd函數中對interval參數的描述是壹樣的,date1和date2參數是相互比較的兩個日期和時間。此外,當date1的日期時間值大於date2時,它將顯示為負值。

例如datediff ("yyyy "," 1982-7-18 ",date)表示某人出生後已經過了多少年。再比如datediff ("d "," 1982-7-18 "," 2062-7-18 "),計算80年過去了多少天:29220。

2、字符串處理功能

在腳本的函數處理中,通常需要修飾壹些字符串。比如過濾掉字符串中的敏感詞,以滿足最終顯示的要求;另壹個例子是當壹個長字符串需要提取前幾個字符時。

(1)Asc函數:返回與字符串中第壹個字母對應的ANSI字符代碼。用法:asc(字符串)。其中string參數表示壹個字符串。

(2)Chr函數:返回指定ANSI字符代碼對應的字符。用法:chr(chrcode)。參數chrcode是相關的標識號。該功能對應於asc功能。

例如:ASC(“a”)代表小寫字母“a”的ANSI字符“97”;同樣,chr(97)代表“小寫字母A”。另外,當chr(chrcode)中參數chrcode的值為0到31之間的數字時,表示不可打印的ASCII碼。比如“chr(10)”代表換行,“chr(13)”代表回車,常用於輸入和顯示格式的轉換。

(3)Len函數:返回字符串中的字符數(字節數)。用法:len(字符串)。例如,len(“love”)的值為4。

(4)LCase函數:返回所有字符串的小寫形式。用法:lcase(字符串)。例如,lcase(“cnbruce”)返回“cn Bruce”。

(5)UCase函數:返回所有字符串的大寫形式。對應lcase函數。同樣,ucase(“CNBRUCE”)作為“cn Bruce”返回。

(6)Trim函數、LTrim函數和RTrim函數:分別返回前後不帶空格、前後不帶空格的字符串內容。例如:

Trim(" cnbruce ")返回為" cnbruce ",前後沒有空格;

ltrim(" cnbruce ")作為不帶前導空格的" cnbruce "返回;

Rtrim(" cnbruce ")作為不帶空格的" cnbruce "返回;

該功能經常用在註冊信息中,比如保證註冊用戶名前後的空格。

(7)Left函數:從字符串左側返回指定數量的字符。用法:left(字符串,長度)。例如,left ("brousce ",5)作為" Brous "返回,即前五個字符。

(8)Right函數:從字符串左側返回指定數量的字符。用法:right(字符串,長度)。例如,right ("Brousce ",4)返回為" usce ",即最後四個字符。

(9)instr函數:返回壹個字符串在另壹個字符串中第壹次出現的位置。例如,要查找字母“a”在字符串“a 1121c 11861”中第壹次出現的位置,可以使用instr (my _ string,“a”

(10)Mid函數:從字符串中返回指定數量的字符。比如當前的“110”應該從字符串“a 112111861”的第二位得到三個單位。

(11)Replace函數:在字符串中查找並替換指定的字符串。Replace (strtobeseached,strychforiswith)其中strtobeseached是字符串,strychfor是要搜索的子字符串,strreplacewith是要替換的子字符串。例如,替換(rscon,"

3.類型轉換函數

Cbool(string)被轉換為布爾值。

Cbyte(string)被轉換為byte類型的值。

Ccur(字符串)轉換為貨幣值。

Cdate(字符串)在天前被轉換為類型的值。

Cdbl(字符串)被轉換為雙精度值。

Cint(字符串)被轉換為整數值。

Clng(字符串)被轉換為長整型值。

Csng(字符串)被轉換為單精度值。

Cstr(var)被轉換成壹個字符串值。

string(var)值被轉換為字符串。

Val(string)字符串被轉換成數值。

4、操作功能

Abs(nmb)返回分子的絕對值。

Atn(nmb)返回壹個數字的反正切值。

Cos(nmb)返回壹個角度的殘差值。

Exp(nmb)返回自然指數的冪值。

Int(nmb)返回壹個數的整數(進位)部分。

Fix(nmb)返回數字的整形(舍入)部分。

Formatpercent(表達式)返回壹個百分比。

Hex(nmb)返回16十六進制數的數據。

Log(nmb)返回自然對數。

Oct(nmb)返回壹個數的八進制數。

Rnd返回壹個大於“0”小於“1”的隨機數,但需要由randomize聲明以生成壹個隨機種子。

Sgn(nmb)判斷數字的符號。

Sin(nmb)返回角度的正值。

Sqr(nmb)返回壹個數的平方根。

Tan(nmb)返回壹個數字的正切值。

5、其他功能

IsArray(var)確定變量是否為數組。

IsDate(var)確定變量是否為日期。

IsNull(var)確定變量是否為空。

IsNumeric(var)確定表達式是否包含數值。

IsObject(var)確定變量是否為對象。

TypeName(var)返回變量的數據類型

Array(list)返回壹個數組。

Split(liststr)從列表字符串中返回壹維數組。

LBound(arrayP)返回數組的最小索引。

Ubound(array)返回數組的最大索引。

創建壹個對象。

獲取文件對象。

ASP中的應用程序和會話對象

壹、應用對象成員概述

應用程序對象成員包括應用程序對象的集合、方法和事件。

1.壹批⒈Application物品。

Contents集合:Applicaiton對象中存儲的所有未由元素定義的變量的集合。

StaticObjects:存儲在由元素定義的應用程序對象中的所有變量的集合。

例如:在default.asp有以下作業。

應用程序(" a")="a "

應用程序(" b")=128

應用(" c ")=假

有壹個內容集合。

申請。Contents (1) = "a " '也可以寫成application.contents("a")="a "

申請。Contents (2) = 128 '也可以寫成application。內容(" b") = 128。

' Application.contents(3)=false '也可以寫成Application。Contents ("c") = false。

在這裏,我推薦妳在調用時使用application.contents("a ")等class的方法,因為這樣更直觀。如果用序號來表示,就要考慮賦值的順序了。

4.⒉Application對象的方法。

內容。Remove ("variable name "):從應用程序中刪除指定的變量。內容集合。

內容。RemoveAll():刪除應用程序中的所有變量。內容集合。

Lock():鎖定應用程序對象,以便只有當前的ASP頁面可以訪問內容。

Unlock():解鎖應用程序對象。

示例:在default.asp中:

應用程序(" a")="a "

應用程序(" b")=128

應用(" c ")=假

response . write application . contents(1)amp;"

"

響應。編寫應用程序。內容(2)& amp;"

"

響應。編寫應用程序。內容(3)& amp;"

"

在刪除b之後

application.contents.remove("b ")

response . write application . contents(1)amp;"

"

響應。編寫應用程序。內容(2)& amp;"

"

實施結果:

a

128

錯誤的

移除b後:

a

錯誤的

如果要刪除集合中的所有變量,可以使用application.contents.removeall,至於Lock和Unlock方法,實踐中經常用到,讀者也比較熟悉,這裏就不贅述了。

[13] ⒊Application反對事件

OnStart:當第壹個訪問服務器的用戶第壹次訪問頁面時發生。

OnEnd:當最後壹個用戶的會話已經結束,並且該會話的OnEnd事件的所有代碼已經執行完畢,或者最後壹個用戶訪問服務器壹段時間(壹般為20分鐘)後,沒有人訪問服務器時發生。

要定義在application對象的OnStart和OnEnd事件中做什麽,需要在文件Global.asa中編寫代碼(下面給出壹個例子),並將文件放在站點的根目錄下(壹般是Inetpub\wwwroot\)。

第二,會話對象成員的概述

Session對象的成員比Application對象多壹個屬性,即集合、屬性、方法和事件。

壹批⒈Session物品。

內容:存儲在特定會話對象中的所有變量的集合,這些變量不是用元素定義的。

StaticObject:由元素定義並存儲在Session對象中的所有變量的集合。

例如:在default.asp有以下作業。

會話(" a")="a "

會話(" b")=128

session("c")=false

有壹個內容集合。

Session.contents(1)="a " '也可以寫成session.contents("a")="a "

Session.contents(2)=128 '也可以寫成Session。內容(" b") = 128。

' Session.contents(3)=false '也可以寫成session.contents("c")=false。

4.⒉Session對象的屬性。

代碼頁:可讀/可寫。Integer定義用於在瀏覽器中顯示頁面內容的代碼頁。代碼頁是字符集的數值,不同的語言使用不同的代碼頁。例如,ANSI代碼頁是1252,日語代碼頁是932,簡體中文代碼頁是936。

LCID:可讀/可寫。Integer定義發送到瀏覽器的頁面區域ID。LCID是唯壹標識壹個地區的國際標準縮寫。例如,在2057年,定義當前地區的貨幣符號是“£”。

SessionID:只讀。長整數。返回此會話的會話標識符。每次創建會話時,服務器都會自動分配壹個標識符。根據它的值可以判斷兩個用戶中誰先訪問服務器。

超時:可讀/可寫。整數定義會話的超時限制(分鐘)。如果用戶在此時間內沒有刷新或請求任何網頁,用戶生成的會話將自動結束。默認值為20。

以上屬性在實際應用中影響不大,基本不需要修改,這些屬性也沒有什麽特別之處。

3.⒊Session對象的方法。

內容。Remove ("variable name "):從Session.contents集合中移除指定的變量。

內容。Removeall():刪除Session.contents集合中的所有變量。

about():結束當前用戶會話並取消當前會話對象。

裏面的東西。刪除(“變量名”)和內容。Session對象的Removeall()方法與Application對象的方法基本相同。為了有助於理解,您可以參考上面的示例將應用程序更改為會話。這裏要說明的是內容的區別。Removeall()和棄用()。這兩種方法都會釋放電流。

用戶會話的所有會話變量在內容上都是不同的。Removeall()只是釋放session變量的值而不終止當前會話,而value()除了釋放Session變量之外,還會終止會話並觸發Session_OnEnd事件。希望大家註意壹下兩者的區別。

4.⒋Session對象的事件。

OnStart:當ASP用戶會話生成時觸發。壹旦任何用戶從該服務器請求任何頁面,就會生成此事件。

OnEnd:當ASP用戶會話結束時觸發,當使用above()方法或超時時也觸發。

這兩個事件和應用程序的OnStart和OnEnd事件壹樣,也必須放在Global.asa文件中。

我將和妳壹起集中討論這四個事件的使用。

三。全球. asa

ASP的應用和會話對象體現了其他ASP內置對象所沒有的特性——事件。每個訪問者在訪問服務器時都會觸發壹個OnStart事件(第壹個訪問者會同時觸發應用程序和會話的OnStart事件,但應用程序先於會話),每個訪問者會話結束時都會觸發壹個OnEnd事件(最後壹個訪問者會同時觸發應用程序和會話的OnEnd事件,但會話先於應用程序)。

OnStart和OnEnd壹般用於統計在線人數,修改虛擬社區中用戶的在線和離線狀態。為了明確定義這兩個事件,您需要在Global.asa文件中編寫代碼,並將該文件放在站點的根目錄中(默認為\Inetpub\wwwroot\)。此外,應用程序和會話對象規定沒有其他ASP內置對象(響應、請求、服務器、會話...)可以在OnEnd事件中使用,但Application對象除外。這裏有壹個計算在線人數的虛擬社區的例子來說明如何使用這兩個事件。

文檔描述:

Global.asa位於d:\Inetpub\wwwroot\目錄中。

Default.asp位於d:\Inetpub\wwwroot\目錄下,虛擬社區登錄頁面。

Login.asp位於目錄d:\Inetpub\wwwroot\中,用於檢測用戶輸入的用戶名和密碼。

Index.asp位於虛擬社區主頁上的目錄d:\Inetpub\wwwroot\。

Bbs.mdb位於目錄d:\Inetpub\wwwroot\中,是存儲用戶信息的數據庫。

數據庫(訪問)結構:

===bbs表= = =

id用戶ID,長整數

名稱用戶名,文本類型

代碼密碼,文本類型

在線在線狀態,是/否

===global.asa===

< script LANGUAGE = " VBScript " RUNAT = " Server " >

子應用_OnStart

應用程序(“在線”)=0

末端接頭

子應用程序_OnEnd

nd接頭

子會話_OnStart

末端接頭

子會話_OnEnd

如果session.contents("pass ")那麽'判斷是否是登錄用戶的Session_OnEnd。

應用程序.鎖

申請("在線")=申請("在線")-1

應用程序.解鎖

如果…就會結束

末端接頭

===login.asp===

.....密碼驗證,連接數據庫,檢查用戶輸入的用戶名和密碼是否正確。

如果密碼驗證通過,則

會話("名稱")=rs("名稱")

會話(" id")=rs("id ")

session("pass")=true

其他

rs關閉

連接關閉

Response .寫“密碼錯誤!”

響應.結束

如果…就會結束

應用程序.鎖

申請("在線")=申請("在線")+1

conn . Execute(" update BBS set online = 1 where id = " & amp;會話(" id "))'

  • 上一篇:科技創新 “青海造”激活第壹生產力
  • 下一篇:龍架上路旅行攻略2017
  • copyright 2024法律諮詢服務網