国产女与黑人在线播放,热久久国产最新地址获取,国内精品久久久久AV福利秒拍,又大又黄又硬又免费的费的视频,一区二区三区四区高清无码,日韩AV无码免费大片BD,五月丁香啪啪激情综合色九色,少妇无码AV无码专区在线看,无码不卡电影,一区二区三区四区五区在线无码

        asp全面教程
        摘錄時間:2011/10/18 14:52:27

        ASP編程入門進階(一):安裝配置服務(wù)器 

        鑒于ASP腳本語言是在服務(wù)器端IIS或PWS中解釋和運行,并可動態(tài)生成普通的HTML網(wǎng)頁,然后再傳送到客戶端供瀏覽的這一特點。我們要在本機上進行調(diào)試,那就要求我們的個人電腦具有服務(wù)器的功能。 
          IIS為何物?IIS是Internet Information Server的縮寫,它是微軟公司主推的Web服務(wù)器。那PWS呢?它就顯得有些古老了:)早期在WIN98,當(dāng)然現(xiàn)在仍有人采用的操作系統(tǒng),PWS(Personal Web Server)是一般用戶最容易得到的web服務(wù)器: 在win98的安裝盤的Add_on\pws目錄下就可以找到pws的安裝程序。而對于IIS是我們所推薦的,也是大部分朋友在使用的,有必要。1,打開控制面板 IIS服務(wù)器算是安裝OK了,那具體有什么用處?又該如何使用呢? 
        首先IIS的作用之一就是可以解釋執(zhí)行ASP網(wǎng)頁代碼,并將結(jié)果顯示出來。當(dāng)然就現(xiàn)在而言,你的機器充當(dāng)?shù)募仁欠⻊?wù)器端,又是客戶端,該技術(shù)對你來說是透明的,你不需要也沒必要去研究它的原理,就這樣去理解去應(yīng)用。 
        那打開你的瀏覽器,隨便IE,NS,TE還是MYIE,只要是能瀏覽網(wǎng)頁的瀏覽器,在其地址欄輸入:localhost/ 查看即可。出現(xiàn)當(dāng)前該窗口就表示已經(jīng)成功了:WEB服務(wù)正在運行這,就行了?你知道下面怎么辦呢?很是沒頭緒,對吧。費盡心思學(xué)到現(xiàn)在,就是看了人家的一個ASP頁面。那我自己做,調(diào)試自己的ASP網(wǎng)頁又該如何呢?首先,你得想好你的ASP文件總要放在一個地方吧。打開“我的電腦”,在E盤下面建立一個“myasp”文件夾,以后所有的ASP文件先暫時放到這里吧。 
        然后,從“開始”菜單,“程序”—“附件”—打開“記事本”。在里面敲入 <%=now()%> 接著將文件保存到E:\myasp\文件夾里面,并且命名為time.asp一個很簡單的ASP文件就OK了,下面我們怎么辦?一句話:調(diào)試。怎么調(diào)試?還是輸入我們剛才的http://localhost/ ?很顯然是不行的。那這時候是不是難點來了:我該如何調(diào)試我自己定義的一個文件夾里的ASP文件呢?同樣,一句話:用虛擬目錄。那什么是虛擬目錄?又該如何建立一個虛擬目錄呢? 
        (引一段話:要從主目錄以外的其他目錄中進行發(fā)布,就必須創(chuàng)建虛擬目錄。“虛擬目錄”不包含在主目錄中,但在顯示給客戶瀏覽器時就象位于主目錄中一樣。虛擬目錄有一個“別名”,供 Web 瀏覽器用于訪問此目錄。別名通常要比目錄的路徑名短,便于用戶輸入。使用別名更安全,因為用戶不知道文件是否真的存在于服務(wù)器上,所以便無法使用這些信息來修改文件。) 
        對初學(xué)者而言不必理會,重在實踐,用多了自然會理解這段話的意思。 
            大體上就是讓我剛才的myasp文件夾用一個代號來標(biāo)記,比如就標(biāo)記為myasp,那我調(diào)試的時候只要輸入:http://localhost/myasp/time.asp 就可以調(diào)試了。那如何標(biāo)記呢?也就是如何建立一個虛擬目錄呢?從“控制面板”里面打開“管理工具”,彈出的窗口中右鍵“新建”—“虛擬目錄”,彈出“虛擬目錄創(chuàng)建向?qū)А,再下一步,目錄:瀏覽到E:\myasp即可。緊跟一步,訪問的權(quán)限一定要把“讀取”和“運行腳本”打勾。最終點擊“完成”。 那么剩下的就是調(diào)試該time.asp了。在“Internet信息服務(wù)”里面右鍵time.asp,選擇“瀏覽”就可以看到了。就這么簡單,你已經(jīng)ASP入門了。 

        ASP編程入門進階(二):認(rèn)識表單  

        說實話,無論是asp,php還是jsp進行網(wǎng)絡(luò)編程的時候,都離不開和用戶的交互。而人機對話的平臺,基本上是靠相應(yīng)的文本、列表框進行輸入,然后通過按鈕提交送至數(shù)據(jù)庫的。所以學(xué)習(xí)網(wǎng)絡(luò)編程就一定要了解這些輸入平臺相關(guān)的東西:表單(form)其基本格式如下: 

        可以總結(jié)出:表單即包括<form>...</form>之內(nèi)的相關(guān)內(nèi)容。其中內(nèi)部可以分三大類:input,select,textarea 
        一,首先看<form>內(nèi)部參數(shù)參數(shù)name:用來表示該表單的唯一名稱,方便一個頁面建立多個表單而不混淆,當(dāng)然更是為了接受頁面的確認(rèn)關(guān)系!(shù)action:顯而易見,是表示當(dāng)前表單中所有內(nèi)容將送交某個頁面去處理。處理包括接受信息,數(shù)據(jù)庫比較添加,修改等。參數(shù)method:即表單的提交方法,含兩種方法:post和get。post是傳輸信息內(nèi)容,get是傳輸url值,具體用法將會在下一節(jié)“內(nèi)置對象request”中介紹到。 
        二,再來看Input相關(guān)Input表示Form表單中的一種輸入對象,其又隨Type類型的不同而分文本輸入框,密碼輸入框,單選/復(fù)選框,提交/重置按鈕等,下面一一介紹。 
        1,type=text輸入類型是text,這是我們見的最多也是使用最多的,比如登陸輸入用戶名,注冊輸入電話號碼,電子郵件,家庭住址等等。當(dāng)然這也是Input的默認(rèn)類型。 
        參數(shù)name:同樣是表示的該文本輸入框名稱。參數(shù)size:輸入框的長度大小。參數(shù)maxlength:輸入框中允許輸入字符的最大數(shù)。參數(shù)value:輸入框中的默認(rèn)值特殊參數(shù)readonly:表示該框中只能顯示,不能添加修改。 

        2,type=password不用我說,一看就明白的密碼輸入框,最大的區(qū)別就是當(dāng)在此輸入框輸入信息時顯示為保密字符。 
        參數(shù)和“type=text”相類似。 

        3,type=file當(dāng)你在BBS上傳圖片,在EMAIL中上傳附件時一定少不了的東西:) 
        提供了一個文件目錄輸入的平臺,參數(shù)有name,size。 

        4,type=hidden非常值得注意的一個,通常稱為隱藏域:如果一個非常重要的信息需要被提交到下一頁,但又不能或者無法明示的時候。一句話,你在頁面中是看不到hidden在哪里。最有用的是hidden的值。 

        5,type=button標(biāo)準(zhǔn)的一windows風(fēng)格的按鈕,當(dāng)然要讓按鈕跳轉(zhuǎn)到某個頁面上還需要加入寫JavaScript代碼 

        6,type=checkbox多選框,常見于注冊時選擇愛好、性格、等信息。參數(shù)有name,value及特別參數(shù)checked(表示默認(rèn)選擇)其實最重要的還是value值,提交到處理頁的也就是value。(附:name值可以不一樣,但不推薦。) 
        <form name="form1"> 
        a:<input type="checkbox" name="checkit" value="a" checked><br> 
        b:<input type="checkbox" name="checkit" value="b"><br> 
        c:<input type="checkbox" name="checkit" value="c"><br></form> 
        name值可以不一樣,但不推薦<br> 
        <form name="form1"> 
        a:<input type="checkbox" name="checkit1" value="a" checked><br> 
        b:<input type="checkbox" name="checkit2" value="b"><br> 
        c:<input type="checkbox" name="checkit3" value="c"><br>  </form> 
        7,type=radio即單選框,出現(xiàn)在多選一的頁面設(shè)定中。參數(shù)同樣有name,value及特別參數(shù)checked. 
        不同于checkbox的是,name值一定要相同,否則就不能多選一。當(dāng)然提交到處理頁的也還是value值。 

        8,type=image比較另類的一個,自己看看效果吧,可以作為提交式圖片 

        9,type=submit and type=reset分別是“提交”和“重置”兩按鈕 
        submit主要功能是將Form中所有內(nèi)容進行提交action頁處理,reset則起個快速清空所有填寫內(nèi)容的功能。 

        Input的Type總結(jié)下來有10個,還是不少的,呵呵 
        三,接著再來看Select相關(guān)Select主要要來做下拉菜單,跳轉(zhuǎn)菜單,(下拉)列表。 
        其本身有內(nèi)嵌代碼<option>...</option>,option參數(shù)value值為傳遞被處理的值,option還有參數(shù)selected,表示默認(rèn)被選中。 
        1,下拉菜單只是菜單式顯示。 

        2,跳轉(zhuǎn)菜單在下拉菜單基礎(chǔ)上添加JavaScript成為跳轉(zhuǎn)菜單。 

        [3,下拉列表和下拉菜單最大的區(qū)別就是select多了一個size值,該值并非長度大小,而是列表的上下高度。 
        當(dāng)然還有更主要的是:菜單只能選一個,而列表可以選多個,該特殊參數(shù)為multiple 

        四,最后關(guān)注的Textarea可以將Textarea文本區(qū)域理解為擴大化了的文本輸入框。其參數(shù)沒有value,默認(rèn)值設(shè)定在<textarea>...</textarea>之間。其它參數(shù)還有rows,表示文本區(qū)域的行數(shù);參數(shù)cols,表示文本區(qū)域的列數(shù)。 
        還有參數(shù)warp,當(dāng)warp=off表示該文本區(qū)域中的不自動換行,當(dāng)然不寫默認(rèn)是自動換行的。 

        最后總結(jié):input根據(jù)type分10類,select從option處又分菜單和列表,textarea有行有列的文本輸入?yún)^(qū)域 

        ASP編程入門進階(三):接觸腳本程序 
          
        有了前面的html中關(guān)于form的強化知識,是不是在想,下面就可以開始ASP之旅呢?未必。 
        一般系統(tǒng)學(xué)過ASP的編程人員都會切身體會到:在系統(tǒng)學(xué)習(xí)ASP的內(nèi)置對象和內(nèi)置組件之前,學(xué)會腳本語言是至關(guān)重要的。 
        為什么這么說呢?為什么要學(xué)腳本語言呢?ASP和腳本語言又有什么關(guān)系呢? 
        首先說說ASP是貴為何物吧。ASP是Microsoft Active Server Pages的簡稱,它是一種服務(wù)器端腳本環(huán)境,可用來創(chuàng)建交互式 Web 頁并建立強大的 Web 應(yīng)用程序。可以表明ASP是一種基于服務(wù)器端的腳本環(huán)境,那就明白ASP為什么需要IIS支持了,因為IIS即為常用的一類web服務(wù)器;那也就明白為什么要學(xué)腳本語言了,因為ASP提供的是一種腳本環(huán)境。 
         再次需要說明的是,ASP只是一種環(huán)境,而非一種語言。如果真要形象化地說是ASP是網(wǎng)絡(luò)編程語言的話,那也是屬于一個html+腳本+asp提供的內(nèi)置對象及組件的功能強大的混合語言。 
        所以,學(xué)點腳本非常重要!其實無論是學(xué)腳本語言,還是其它語言,我認(rèn)為首先需要了解的是該語言涵蓋的各類特性,包括:數(shù)據(jù)類型、事件、方法、 對象、屬性、語法等當(dāng)然這都是些空談,正如在大學(xué)課堂上的某計算機語言課一樣,搞純研究性的就是覺得有些索而無味。還是實用些的好,能解決問題的程序才是好程序。當(dāng)然,語言這東西還是要你去好好鉆研的,比如你寫求絕對值的程序,其實一個abs()函數(shù)就搞定了。你以后需要注意的是語言的函數(shù)、語法 
        目前有兩種主要的腳本語言:VbScript和JavaScript。因為VbScript作為IIS默認(rèn)的服務(wù)器腳本,所以我們所談所學(xué)的基本是圍繞VbScript為腳本的ASP的,當(dāng)然也不排除有的時候使用javascript. 
        舉一個很簡單的例子: 
        <script language="vbscript"> <!--  sub button1_onclick 
              msgbox (" 歡迎使用vbscript! " )   end sub  --> </script> 
        <script language="javascript"> <!--    function b213() 
            {      alert("歡迎使用javascript!")     }     --></script>  <form> 
        <input type="button" name="button1" value="vbs"><br> 
        <input type="button" name="button2" value="js" onclick="b213()"> </form> 
        vbscript中的Sub 就是一個事件過程。過程名包含兩部分:一部分為按鈕名,即 Button1(從 < INPUT > 標(biāo)記中的 NAME 屬性獲。涣硪徊糠譃槭录,即 OnClick。兩部分由下劃線 (_) 連接。單擊按鈕時,Internet Explorer 查找并運行相應(yīng)的事件過程,即 Button1_OnClick,而MsgBox 就是一個函數(shù),對于它更具體的參數(shù),你就好好看下了。 
        一時來勁,可能大家都看到網(wǎng)上有種狂惡心的對話框組,原理是什么呢?請看: 
        在來個下面來看開頁和退頁彈出對話框的原理吧 
        script language="vbscript"> <!-- sub window_onload() 
        msgbox"welcome you!" 
        end sub sub window_onunload() 
        msgbox"see you late!"  end sub --> </script> 
        開頁顯示“welcome you!”,關(guān)頁顯示“see you late!” 
        以上只是一個顯示對話框msgbox,當(dāng)然還有書寫對話框inputbox也順便看下吧。 

        再來看看幾個實用的函數(shù):len():返回字符串長度或者變量的字節(jié)長度  
        lef():截取一個字符串的前部分內(nèi)容   right():截取一個字符串的后部分內(nèi)容 
        <script language=vbs> 
        text="1234567890abcdefgh" i=10 
        lentext=len(text) lefttext=left(text,i) righttext=right(text,i) 
        alert ("文本長度是:"&lentext) alert ("文本左取"&i&" 得的是:"&lefttext) alert ("文本右取"&i&" 得的是:"&righttext)  </script> 
        根據(jù)這幾個,經(jīng)?吹降拈L文章后面加“......”的情況就是如下: 

        還有個比較重要的函數(shù)replace() 在字符串中查找,替代指定的字符串replace(strtobesearched,strsearchfor,strreplacewith) 
        strtobesearched是字符串; strsearchfor是被查找的子字符串;strreplacewith 是用來替代的子字符串。 
        下面的一個就是很有用的文字轉(zhuǎn)換程序 

        這些都是比較現(xiàn)實較好玩的些,玩中學(xué)習(xí)也不錯:)但畢竟我們是要編程的,說到編寫程序,我知道程序結(jié)構(gòu)可以分: 
        1,順序結(jié)構(gòu):就是最普通的,從上往下,從左往右執(zhí)行的程序 
        2,選擇結(jié)構(gòu):給你兩個條件,要不這樣(if ... then),要不那樣(else),任君選擇:) 
        3,循環(huán)結(jié)構(gòu):給你一個最大發(fā)揮的空間,在不超出這個范圍內(nèi)進行活動(循環(huán)),否則自動退出(跳出循環(huán))。 
        再復(fù)雜的程序也無非是由這三種結(jié)構(gòu)綜合嵌套運用過來的,你說是吧。 
        順序結(jié)構(gòu)沒多少要說,因為程序執(zhí)行基本都是這方向。 
        來看看選擇結(jié)構(gòu),當(dāng)然選擇結(jié)構(gòu)也可以嵌套。 
        <body>  hello <script language="vbscript"> <!--dim thishour 
        thishour=hour(time) 
        if thishour<=12 then 
          document.bgcolor="red" 
          document.fgcolor="black" 
          document.write("上午好!") 
        else  if thishour<=18 then 
            document.bgcolor="blue" 
            document.fgcolor="white" 
            document.write("下午好!")  
          else    document.bgcolor="green" 
            document.fgcolor="yellow" 
            document.write("晚上好!")    end if  end if   --> </script> 
        本頁的作用是根據(jù)不同時間顯示不同顏色和歡迎信息。 
        以上程序很簡單吧,只要能認(rèn)識英文就會懂程序(我是這么理解的:)先把現(xiàn)在的小時提交出來:hour(time); 
        然后和12比較判斷,如果<=12,肯定是上午了,否則就是下午和晚上;否則里面繼續(xù)條件判斷,如果時間再<=18的話,那肯定就是下午了;最后,不用說,瞎子猜猜也知道是晚上了。有關(guān)上一程序中的document.bgcolor就是文檔的背景色,document.fgcolor就是文檔的前景色(文字色),下一程序是動態(tài)改變背景顏色的。<script language="vbscript"><!-- 
        sub setbgcolor(bcolor)      document.bgcolor=bcolor 
        end sub --> </script> <form> 
        <input type="radio" name="color" onclick=setbgcolor("red")>red<br> 
        <input type="radio" name="color" onclick=setbgcolor("gray")>gray<br> </form> 
        有關(guān)條件選擇結(jié)構(gòu)的嵌套再show出一個表單檢測的程序 
        <html><head><title>abc</title> 
        <script language="vbscript"> 
        <!-- sub btnsubmit_onclick 
           if form1.name.value<>"" then 
            if form1.addr.value<>"" then 
             if form1.email.value<>"" then      
               if instr(form1.email.value,"@")<>0 and instr(form1.email.value,".")<>0 then 
                 form1.submit       else 
                 alert"email error!" 
               end if      else        alert "enter your email!" 
                form1.elements("email").focus     
              end if    else      alert "enter your address!" 
              form1.elements("addr").focus       
            end if   else    msgbox "enter your name please!" 
            form1.elements("name").focus 
           end ifend sub --></script>  </head>  <body> 
        <form name="form1" method=post action="bug.html"> 
        your name:<input type="text" name="name"><br> 
        your addr:<input type="text" name="addr"><br> 
        your email:<input type="text" name="email"><br> 
        <input type="button" name="btnsubmit" value="submit"></form> </body> </html> 
        程序是給出來了,但看起來比較難懂,有時程序執(zhí)行時間也比較重要,所以得精簡程序代碼。正所謂:寫程序容易,寫經(jīng)典程序難啊,那上面的程序還可以換種思維方式。改用javascript(注:學(xué)的是編程思想,不要太過計較腳本類型) 
        <html><head><title>abc</title><script language="javascript"><!-- function form1_onsubmit() 
        { if (document.form1.name.value=="") 
               {         alert("請設(shè)定您的登陸名。") 
                 document.form1.name.focus() 
                 return false        }  else if(document.form1.addr.value=="") 
               {          alert("請?zhí)顚懩牡刂贰?quot;) 
                 document.form1.addr.focus()          return false        } } --> </script> </head> <body> 
        <form name="form1" onsubmit="return form1_onsubmit()"> 
        your name:<input type="text" name="name"> <br> your addr:<input type="text" name="addr"><br> 
        <input type="submit" name="submit" value="submit"> </form> </body> html> 
        最后來看下循環(huán)結(jié)構(gòu)吧:1到500可不是一個一個寫出來的。 

        當(dāng)然循環(huán)不只可以用for,還可以用do while...loop等。反正程序這東西是代替我們少做了許多重復(fù)單一無聊的事——只要你合理利用程序。應(yīng)該有些成就吧,學(xué)語言,學(xué)編程就是學(xué)語法語義,學(xué)編程架構(gòu)思想。當(dāng)然這要你有扎實的本語言的基礎(chǔ),基礎(chǔ)是什么?你知道哪些函數(shù)嗎?你知道怎么用程序怎么判斷偶數(shù)嗎(包含了運算)?你知道如何進行表單檢測嗎?你知道哪三種程序架構(gòu)嗎?呵呵,把以上的程序吃透,最好再多看看腳本參考手冊,跟我就可以開始ASP的上路了。 
        ASP基本語法  
        建立ASP程序   ASP程序是擴展名為.asp的文本文件,其中包括文字,HTML語句,ASP命令及其他腳本語言。  ASP命令必須放在"<%"與"%>"之間。 
        程序注釋 為了養(yǎng)成良好的編程風(fēng)格外,適度的注釋不可少,ASP提供了兩中注釋方式1、單引號(),在單引號之后的這行文字都視為注釋 2、rem 關(guān)鍵詞,在REM后的文字,視為注釋 
        賦值語句  ASP中一般變量的賦值語句是 "=",  而對象是用 set 語句來賦值。 
        條件語句和循環(huán)語句 
        了解編程語言的朋友一定知道在程序中控制程序流程的語句主要可以分為條件語句和循環(huán)語句,在 VBScript 中可使用以下條件語句:    If...Then...Else 語句 和 Select Case 語句 
           If...Then...Else 語句用于計算條件是否為 True 或 False,并且根據(jù)計算結(jié)果指定要運行的語句。通常,條件是使用比較運算符對值或變量進行比較的表達式,If...Then...Else 語句可以按照需要進行嵌套。  
           讓我們來創(chuàng)建兩個范例文件:if1.asp 和 if2.asp  
           將以下語句剪貼到記事簿中,并保存為 if1.asp( 注意:請將程序中“<”后的空格去掉 )   
         < html>  < head>  < TITLE>if1.asp< /TITLE>  < /head>< body bgcolor="#FFFFFF"> 
          < form action="if2.asp" method=get> 
          Your First Name< INPUT NAME="FirstName" MaxLength=20>< p> 
          Your Last Name< INPUT NAME="LastName" MaxLength=20>< p> 
          < INPUT TYPE=submit>< INPUT TYPE=reset>  < /form>  < /body>  < /html> 
          將以下語句剪貼到記事簿中,并保存為 if2.asp   < html>  < head>  < TITLE>ifrespond.asp< /TITLE>  < /head>  < % fname=request.querystring("Firstname") 
          lname=request.querystring("Lastname") 
          If fname="George" and lname="Washington" then %> 
          Hi.You must be the first president! 
          < % else %>  Hi!Nice to Meet You  < %end if %>  < /body>  < /html> 
           asp1.asp 產(chǎn)生一個文本輸入框,要求用戶輸入姓、名  
           asp2.asp 則是用 IF 語句判斷用戶輸入的姓名是否為“George Washington”, 并做出相應(yīng)的反饋。在此我們遇到了一個 ASP 的內(nèi)建對象 request,通過使用 request 對象可以訪問任何用 HTTP 請求傳遞的信息,包括從 HTML 表格中用 POST 方法或 GET 方法傳遞的參數(shù)、cookie 和用戶認(rèn)證。而 QueryString 集合檢索 HTTP 查詢字符串中變量的值,HTTP 查詢字符串由問號 (?) 后的值指定。如:    http://localhost/if2.asp?Firstname=George&Lastname=Washington  
           生成值為 "Firstname=George&Lastname=Washington" 的變量名字符串。 
           If...Then...Else 語句的一種變形允許您從多個條件中選擇,即添加 ElseIf 子句以擴充 If...Then...Else 語句的功能,使您可以控制基于多種可能的程序流程。    我們將 asp2.asp 的程序部分?jǐn)U充如下:  
        < %  fname=lcase(request.querystring("Firstname")) 
          lname=lcase(request.querystring("Lastname")) 
          If fname="george" and lname="washington" then %> 
          Hi.You must be the first president!< p> 
          < % elseIf fname="ronald" and lname="reagan" then %> 
          Hi.You must be the actor president!< p> 
          < % elseIf fname="jimmy" and lname="carter" then %> 
          Hi.You must be the peanut farmer president!< p> 
          < % elseIf fname="naoko" or fname="charles" then %> 
          Hi.Your name reminds me of someone,but I am not sure who!< p> 
          < % else %>  Hi!Nice to Meet You  < % end if %> 
           可以添加任意多個 ElseIf 子句以提供多種選擇。但使用多個 ElseIf 子句經(jīng)常會使程序變得很累贅。在多個條件中進行選擇的更好方法是使用 Select Case 語句。  
           Select Case 結(jié)構(gòu)提供了 If...Then...ElseIf 結(jié)構(gòu)的一個變通形式,可以從多個語句塊中選擇執(zhí)行其中的一個。Select Case 語句提供的功能與 If...Then...Else 語句類似,但是可以使代碼更加簡練易讀。Select Case 結(jié)構(gòu)在其開始處使用一個只計算一次的簡單測試表達式。表達式的結(jié)果將與結(jié)構(gòu)中每個 Case 的值比較。如果匹配,則執(zhí)行與該 Case 關(guān)聯(lián)的語句塊,我們同樣可以用 Select Case 語句來寫 asp2.asp 文件: 
          < %  fname=lcase(request.querystring("Firstname")) 
          lname=lcase(request.querystring("Lastname")) 
          name=fname+lname 
          Select case name 
          case "georgewashington" 
          response.write "Hi.You must be the first president!< p>" 
          case "ronaldreagan" 
          response.write "Hi.You must be the actor president!< p>" 
          case "jimmycarter" 
          response.write "Hi.You must be the peanut farmer president!< p>" 
          case "naokocharles" 
          response.write "Hi.Your name reminds me of someone,but I am not sure who!< p>" 
          case else  response.write "Hi!Nice to Meet You"   End Select %> 
        請注意 Select Case 結(jié)構(gòu)只計算開始處的一個表達式,且只計算一次,而 If...Then...ElseIf 結(jié)構(gòu)計算每個ElseIf 語句的表達式,這些表達式可各不相同。因此僅當(dāng)每個ElseIf 語句計算的表達式都相同時,才以使用 Select Case代替 If...Then...ElseIf 結(jié)構(gòu)。Select Case 語句也是可以是嵌套的,每一層嵌套的Select Case語句必須有與之匹配的End Select 語句。 
        (四)內(nèi)置對象Request  系統(tǒng)學(xué)習(xí)ASP,就是先從ASP的幾大內(nèi)置對象開始的.asp一般稱有五大對象:Request、Response、Server、Session、Application 
        當(dāng)然一直還沒有提到的就是,ASP到底是什么樣?我看代碼怎么知道是ASP代碼?很簡單,當(dāng)看到“<%”和“%>”就表明是ASP,并且兩者之間的就是ASP源碼。那為什么要學(xué)對象,對象的作用又是如何的?其實ASP所提供的這些可在腳本中使用的內(nèi)建對象,使用戶更容易收集通過瀏覽器請求發(fā)送的信息、響應(yīng)瀏覽器以及存儲用戶信息,從而使對象開發(fā)者擺脫了很多煩瑣的工作。而Request對象的主要作用就是:在服務(wù)器端接受并得到從客戶端瀏覽器提交或上傳的信息。Request 對象可以訪問任何基于 HTTP 請求傳遞的所有信息,包括從Form表單用 POST方法或 GET 方法傳遞的參數(shù)、cookie 等。 
        一、Request.form("name") 這是接受上一頁的信息時,常會用到的一種接受方式。Request是ASP對象,form則是Request對象所包含的對象集合(這與HTML頁中的form表單不一樣的),name也就是上一頁表單中的某個文本框、密碼框,或者隱藏域等的名稱。并且還有一點非常重要:上一頁Form表單的遞交方法一定要為Post方法。看下面兩個程序。 
        1,test1.html(本頁是HTML的,主要提供輸入信息的平臺,將信息提交到ASP頁進行受處理) 
        <form action="submit1.asp" method="post"> 
        your name:<input tpye="text"  name="yourname"><br> 
        your pwd: <input type="password" name="yourpwd"><br> 
        <input type="submit" value="submit"></form> 
        注意method就是post,且提交的頁面action為submit1.asp。 
        2,submit1.asp(ASP頁面,進行從test1.html接受name="yourname"和name="yourpwd"的兩個值) 
        your name is:<%=request.form("yourname")%><br> 
        your pwd is:<%=request.form("yourpwd")%> 
        通過IIS進行HTTP協(xié)議的頁面調(diào)試,你會發(fā)現(xiàn)兩個頁面進行了關(guān)聯(lián):test1.html中動態(tài)輸入的name和pwd,在submit1.asp頁進行相應(yīng)動態(tài)顯示。這就是接收提取并顯示信息的過程。 
        3,改進的submit1.asp 
        <% for each i in request.form%> <%=i%>: <%=request.form(i)%> <br> <%next%> 
        采用了for循環(huán)語句,將上頁所有的form標(biāo)簽信息進行接受、并顯示。這在上表單頁有很多項目時,非常快捷地出來結(jié)果。 
          request.form后面的("yourname")或("yourpwd")變成了變量 i,通過for循環(huán)對該form集合進行遍歷提取,這是一種不同于機械地“有幾個就提取幾個”的編程思想,注意掌握。 
        二,Request.querystring("name") 
        此時由Request.form變?yōu)镽equest.querystring,最主要的還是上頁表單遞交時,采用的什么方法。當(dāng)采用post就用Request.form,否則當(dāng)采用get時就采用Request.querystring了。 
        那Request.querystring最大特色在哪里呢?Request.querystring能檢索并接受 HTTP 查詢字符串中變量的值,而HTTP 查詢字符串則是由問號 (?) 后的值指定的。繼續(xù)看一個程序。 
        1、test2.html(本頁同是HTML的,主要提供輸入信息的,將信息提交到ASP頁進行處理,提交方法是get) 

        與test1.html最大區(qū)別也就是method="get"。 
        2、submit2.asp(ASP頁面,從test1.html接受name="yourname"和name="yourpwd"兩個值) 
        your name is:<%=request.querystring("yourname")%><br> 
        your pwd is:<%=request.querystring("yourpwd")%> 
        注意此時的瀏覽器地址欄,文件后面多出了?號,?號后面附有變量名及所被賦的值,當(dāng)然多個變量名之間是用&號進行連接的。而Request.querystring最大的功能就是能將?號后面的這些變量名分開,并且所對應(yīng)的值也一一取出。 
        剛才說到不同的變量名之間是用&號進行連接,但如果是相同的變量名時,request.querystring到底是提取前一個?后一個?還是兩個一起?用例子說話。 
        3、query.asp(名稱是query.asp,因為在該頁程序中是反饋給自己。) 
        <a href="query.asp?bookname=《asp教程》">《asp教程》</a><br> 
        <a href="query.asp?bookname=《jsp教程》">《jsp教程》</a><br> 
        <a href="query.asp?bookname=《xsp教程》&bookname=《xml》">《xsp教程》</a><br> 
        you chosed <%=request.querystring("bookname")%> 
        很明顯當(dāng)點《xsp教程》時,顯示的是“《xsp教程》,《xml》”,中間自動加了“,”號。 
        最后仍需要說明的是:request.querystring在分頁程序里面是經(jīng)常用到的。 
        三、Request.ServerVariables("xxx")即服務(wù)器的環(huán)境變量,該變量包含的內(nèi)容比較多,我們同樣先采用for循環(huán)進行遍歷查看。1、server1.asp <%for each i in request.servervariables%>  
        <%=i%>: <%=request.servervariables(i)%> <hr>  <%Next%> 
        可以看到一大堆環(huán)境變量,其中還有沒有值的,下面摘取幾個比較常用的。 
        http_user_agent(客戶端機器的相關(guān)環(huán)境):<%=request.servervariables("http_user_agent")%><br> 
        http_accept_language(瀏覽語言):<%=request.servervariables("http_accept_language")%><br> 
        CONTENT_LENGTH(客戶端發(fā)出內(nèi)容的長度):<%=request.servervariables("CONTENT_LENGTH")%><br> 
        CONTENT_TYPE(內(nèi)容的數(shù)據(jù)類型。如“text/html”。同附加信息 的查詢一起使用,如 HTTP 查詢 GET、POST 和 PUT):<%=request.servervariables("CONTENT_TYPE")%><br> 
        LOCAL_ADDR(返回接受請求的服務(wù)器地址。如果在綁定多個IP地址的多宿主機器上查找請求所使用的地址時,這條變量非常重要):<%=request.servervariables("LOCAL_ADDR")%><br> 
        REMOTE_ADDR(發(fā)出請求的遠程主機client的 IP 地址):<%=request.servervariables("REMOTE_ADDR")%><br> 
        SERVER_NAME(出現(xiàn)在自引用 URL 中的服務(wù)器主機名、DNS 化名 或 IP 地址):<%=request.servervariables("SERVER_NAME")%><br> 
        SCRIPT_NAME(主機名后面的虛擬地址):<%=request.servervariables("SCRIPT_NAME")%><br> 
        LOGON_USER(用戶登錄 Windows NT 的帳號):<%=request.servervariables("LOGON_USER")%><br> 
        SERVER_PORT(發(fā)送請求的端口號):<%=request.servervariables("SERVER_PORT")%> 
        根據(jù)以上的SERVER_NAME是提取的服務(wù)器主機名,SCRIPT_NAME是提取的虛擬地址,則兩者的結(jié)合再加上http:// 是不是就是個完整的網(wǎng)址呢。 
        2、server2.asp <%a=request.servervariables("server_name")%> 
        <%b=request.servervariables("script_name")%> <%="http://"&a&b%> 
        其中http:// 用引號引起,表示是字符串,a和b分別是對應(yīng)了具體值的變量,在ASP中進行這樣的連接就是采用&號。 
        根據(jù)這個結(jié)果,我們是不是就可以隨時提取動態(tài)的URL地址了。再來看看query.asp,要求一定要保存為query.asp的,因為如果不是該文件名,程序指向就會出錯。但現(xiàn)在的這個文件就隨便你保存為什么文件,都一樣執(zhí)行。 
        3、xxx.asp(隨便你保存成什么文件) 
        <%filepath=request.servervariables("script_name")%> 
        <a href="<%=filepath%>?bookname=《asp教程》">《asp教程》</a><br> 
        <a href="<%=filepath%>?bookname=《jsp教程》">《jsp教程》</a><br> 
        <a href="<%=filepath%>?bookname=《xsp教程》&bookname=《xml》">《xsp教程》</a><br> 
        you chosed <%=request.querystring("bookname")%> 
        先將當(dāng)前文件的地址取出并賦值給變量filepath,然后所有的鏈接地址開頭都只要直接引用該變量就OK了。是不是很有用,有點萬能的感覺。 
        四、Request.Cookies("name")不用我說,Cookie是個很重要的東西,究竟如何,等我們學(xué)完了下面的對象Response后,會有個特別Cookie的專題講座。 
          以上四則運用,屬于Request對象的所包含的四個對象集合:form、querystring、servervarivables、cookies。當(dāng)然還有個ClientCertificate就不說啦一個ASP內(nèi)置對象除了對象集合外還有對象屬性、對象方法 
        Request對象的對象屬性只有一個就是TotalBytes(接受的字節(jié)數(shù)),你可將<%=request.totalbytes%>該語句加入到任何一個接受數(shù)據(jù)的ASP頁面中進行顯示了。 
        Request對象的對象方法也還是一個:BinaryRead 。 
           說實話,這東東不常用,我也沒用過,呵呵。OK~!有關(guān)Request對象的學(xué)習(xí)就差不多了,最主要是先好好理解三個對象集合,cookies不著急,下節(jié)繼續(xù)學(xué)習(xí)對象Response。 

        ASP編程入門進階(五):內(nèi)置對象Response 
          
        通過對Request對象的學(xué)習(xí),可以了解到,Request對象是服務(wù)器端用來獲取客戶端的信息的。但作為服務(wù)器和客戶端進行交互,是不是還缺少服務(wù)器端向客戶端發(fā)送信息呢?對象Response正是擔(dān)任此責(zé)任。負(fù)責(zé)將信息傳遞給用戶的對象就是Response了,它可動態(tài)地響應(yīng)客戶端的請求,并將動態(tài)生成的響應(yīng)結(jié)果返回給客戶端瀏覽器。 
        一、Response.write  write方法是使用最頻繁的一個了,write就是寫:將指定的字符串寫到當(dāng)前 HTTP 輸出。 
        1、write.asp <% response.write ("hello,world"&"<br>") 
        Randomize  response.write "任意數(shù)是"&rnd()&"<br>" %> 
        response.write后面為所顯示的信息,可以用括號包含,也可以直接書寫(注意和response.write之間有空格)。 
            書寫的字符串信息或者HTML代碼相關(guān),用引號包含;而ASP本身的函數(shù)或變量則不需要,直接用即可。并且無論字符串信息、HTML代碼、函數(shù)還是變量之間進行連接都是采用&號(針對vbscript) 
            以上遇到一個隨機函數(shù)rnd(),該函數(shù)返回一個小于 1 但大于或等于 0 的值。 
        需要注意的是在調(diào)用 Rnd 之前,先使用無參數(shù)的 Randomize 語句初始化隨機數(shù)生成器,該生成器具有基于系統(tǒng)計時器的種子。若缺少Randomize,則無法繼續(xù)生成隨機種子。下面一個利用隨機函數(shù)的例子,產(chǎn)生隨機背景顏色效果: 

        當(dāng)然要產(chǎn)生指定范圍的隨機整數(shù),請使用以下公式:  
        Int((upperbound - lowerbound + 1) * Rnd + lowerbound) 
        這里, upperbound 是此范圍的上界,而 lowerbound 是此范圍內(nèi)的下界。 

        隨機函數(shù)在做考試系統(tǒng)的時候非常有用,當(dāng)然你也可以用來自己搖獎,拿個頭彩也分點我就行了 
        二、Response.end這是Response常用的一種方法,使 Web 服務(wù)器停止處理腳本并返回當(dāng)前結(jié)果,文件中剩余的內(nèi)容將不被處理。主要放在一頁多功能的ASP頁中,為讓程序運行到此,抑或往下的程序沒必要再執(zhí)行顯示…… 
        2、end.asp <%response.write now() 
        response.end            ’程序執(zhí)行顯示到此結(jié)束 response.write rnd() %> 
        三、Response.clear 
        該方法主要作用是清除緩沖區(qū)中的所有 HTML 輸出,但該方法只清除響應(yīng)正文而不清除響應(yīng)標(biāo)題。該方法和end方法似相反,end是到此結(jié)束返回上面的結(jié)果,而clear卻是清除上面的執(zhí)行,然后只返回下面的結(jié)果。 
        3、clear.asp <%response.write now() 
        response.clear           ’以上程序到此全被清除 response.write rnd()%> 
        下面通過一個例子來仔細(xì)看看end and clear 
        4、end2clear.asp <% filepath=request.servervariables("script_name") 
        user=Request.Form("username") 
        pwd=Request.Form("password") %> 
        <form method="POST" action="<%=filepath%>"> 
        name:<input type="text" name="username"><br> 
        pwd:<input type="password" name="password"><br> 
        <input type="submit" value="submit"> 
        </form> <% If user="cnbruce" and pwd="cnbruce" Then     
           response.write "采用clear方法,上面的程序結(jié)果將清除。" 
           response.clear     ’ 清空存儲在緩存中的頁面 
        Else    response.write "采用end方法,下面的程序?qū)⑼_\。" 
           Response.End ’ 立即停止腳本處理,并將緩存中的頁面輸出  End If %> 
        如果你只看到“刷新”鏈接就表明clear方法已經(jīng)生效<br> 
        <a href="<%=filepath%>">刷新</a>  
        以上程序中,當(dāng)輸入用戶名和密碼同為cnbruce的時候會發(fā)現(xiàn)clear方法的處理結(jié)果,反之是另外一個效果。 
        四、Response.redirect方法是讓瀏覽器立即重定向到程序指定的URL地址。這在根據(jù)客戶的不同響應(yīng),為不同的客戶指定不同的頁面,或根據(jù)不同的情況指定不同的頁面時,顯得非常重要。該方法是立即生效的,在其后的腳本都不執(zhí)行。 
        5、redirect.asp <%response.redirect("http://www.cnbruce.com/")%> 
        以上四則運用屬于Response對象的幾個比較重要的方法:write、end、clear、redirect當(dāng)然方法還有:AddHeader、AppendToLog、BinaryWrite、Flush…… 
        早說過,一個ASP對象除了對象方法外,還有對象屬性,那response對象的屬性有哪些呢? 
        五、Response.ContentType ContentType 屬性指定服務(wù)器響應(yīng)的 HTTP 內(nèi)容類型。如果未指定 ContentType,默認(rèn)為 text/html。 
        6、contenttype.asp(非text/html的) 
        <% Response.ContentType = "text/HTML" %> 
        <% Response.ContentType = "image/GIF" %> 
        <% Response.ContentType = "image/JPEG" %> 
        <% Response.ContentType = "text/plain" %> 
        <% Response.ContentType = "image/JPEG" %> 
        六、Response.charsetCharset 屬性將字符集名稱附加到 Response 對象中 content-type 標(biāo)題的后面,用來設(shè)置服務(wù)器響應(yīng)給客戶端的文件字符編碼。 
        7、charset.asp <% Response.charset = "big5" %> 
        中文顯示,但采用的big5繁體的編碼,所以看到的是亂碼。當(dāng)然Response.ContentType和Response.charset應(yīng)用得比較少了。直接在head頭部屬性里面添加就OK了。 
        七、Response.expires 該屬性指定了在瀏覽器上緩沖存儲的頁,距過期還有多少時間。如果用戶在某個頁過期之前又回到此頁,就會顯示緩沖區(qū)中的頁面。但若設(shè)置 response.expires=0,則可使緩存的頁面立即過期。這是一個較實用的屬性,當(dāng)客戶通過 ASP 的登陸頁面進入WEB 站點后,應(yīng)該利用該屬性使登陸頁面立即過期,以確保安全。引用一個經(jīng)典的例子 
        例8、expires.asp <% 
        Response.Expires = 0  
        Response.Expiresabsolute = Now() - 1  
        Response.AddHeader "pragma","no-cache"  
        Response.AddHeader "cache-control","private"  
        Response.CacheControl = "no-cache"  %>  
        八,Response.status設(shè)置服務(wù)器要響應(yīng)的狀態(tài)行的值。Response.status="狀態(tài)描述字符串",字符串可以為一個三位整數(shù)或一串說明文字組成,但必須放在<html>之前。 
        例9 、status.asp <% Response.Status = "401 Unauthorized" %> 
        九,Response.buffer 比較重要的一個,值為true or false。該屬性指示是否緩沖頁輸出。 
        引用:當(dāng)緩沖頁輸出時,只有當(dāng)前頁的所有服務(wù)器腳本處理完畢或者調(diào)用了 Flush 或 End 方法后,服務(wù)器才將響應(yīng)發(fā)送給客戶端瀏覽器,服務(wù)器將輸出發(fā)送給客戶端瀏覽器后就不能再設(shè)置 Buffer 屬性。因此應(yīng)該在 .asp 文件的第一行調(diào)用 Response.Buffer。 Response.buffer=true。 
        對于Response對象的屬性和方法先到這里,剩下一個數(shù)據(jù)集合,即cookie。繼續(xù)看cookies講座吧。 

        ASP編程入門進階(六):Cookies講座  

        什么是 Cookie?Cookie其實是一個標(biāo)簽,經(jīng)?赡苈牭降闹形姆g:小舔餅。當(dāng)你訪問一個需要唯一標(biāo)識你的站址的 WEB 站點時,它會在你的硬盤上留下一個標(biāo)記,下一次你訪問同一個站點時,站點的頁面會查找這個標(biāo)記。 
           每個 WEB 站點都有自己的標(biāo)記,標(biāo)記的內(nèi)容可以隨時讀取,但只能由該站點的頁面完成。每個站點的Cookie與其他所有站點的Cookie存在同一文件夾中的不同文件內(nèi)(你可以在 win2k  Documents and Settings 文件夾下特定用戶的 cookies 文件夾中)。 
          一個 Cookie 就是一個唯一標(biāo)識客戶的標(biāo)記,Cookie 可以包含在一個對話期或幾個對話期之間某個 WEB 站點的所有頁面共享的信息,使用 Cookie 還可以在頁面之間交換信息。這項功能經(jīng)常被使用在要求認(rèn)證客戶密碼以及電子公告板、WEB 聊天室等 ASP 程序中。 
          盡管現(xiàn)在聽起來cookie沒有什么激動人心的,但實際上利用它,你能實現(xiàn)許多有意義的功能!比如說:你可以在站點上放置一個調(diào)查問答表,詢問訪問者最喜歡的顏色和字體,然后根據(jù)這些定制用戶的web界面。并且,你還可以保存訪問者的登錄密碼,這樣,當(dāng)訪問者再次訪問這個站點時,不用再輸入密碼進行登錄。  
          當(dāng)然,cookie也有一些不足。首先,由于利用cookie的功能可以編程實現(xiàn)一些不良企圖,所以大多數(shù)的瀏覽器中都有安全設(shè)定,其中可以設(shè)置是否允許或者接受cookie(IE瀏覽器中“工具”--“Internet選項...”--“安全”--“自定義級別”--“Cookie的使用”;Netscape瀏覽器中“工具”--“Cookie管理器”--“管理貯存的Cookie”即可),因此這就不能保證隨時能使用cookie。再者,訪問者可能有意或者無意地刪除cookie。當(dāng)訪問者的機器遇到“藍屏”死機時,或者重新格式化硬盤、安裝系統(tǒng)后,原來保存的cookie將全部丟失。最后一點,有一些最初始的瀏覽器并不能支持cookie。  
        ◆ 怎樣利用cooklie? 有2種使用cookie的基本方式: 
        1、將cookie寫入訪問者的計算機(使用 Response 命令) 
        2、從訪問者的計算機中取回cookie(使用 Request 命令) 
        ◆ 創(chuàng)建cookie的基本語法: Response.Cookies(cookie)[(key)|.attribute]=value 
        這里的 cookie 是指定 cookie 的名稱。而如果指定了 key,則該 cookie 就是一個字典。(測試一cookie是否為一個字典可用后面代碼顯示布爾值:<%=Request.Cookies("cookiename").HasKeys%>。為true是字典,false則不是。 ) 
        Attribute 指定 cookie 自身的有關(guān)信息。Attribute 參數(shù)可以是下列之一 :  
        ①Domain 若被指定,則 cookie 將被發(fā)送到對該域的請求中去。域?qū)傩员砻鱟ookie由哪個網(wǎng)站產(chǎn)生或者讀取,默認(rèn)情況下,cookie的域?qū)傩栽O(shè)置為產(chǎn)生它的網(wǎng)站,但你也可以根據(jù)需要改變它。(Response.Cookies("CookieName").Domain = "www.mydomain.com") 
        ②Path 為路徑屬性,該屬性可以實現(xiàn)更多的安全要求,通過設(shè)置網(wǎng)站上精確的路徑,就能限制cookie的使用范圍。如果未設(shè)置該屬性,則使用應(yīng)用程序的路徑。(Response.Cookies("CookieName").Path = "/maindir/subdir/path" ) 
        ③Expires 指定 cookie 的過期日期。為了在會話結(jié)束后將 cookie 存儲在客戶端磁盤上,或在許多時候,我們希望能更長時間地在訪問者的計算機上保存cookie。必須設(shè)置該日期。若此項屬性的設(shè)置未超過當(dāng)前日期,則在任務(wù)結(jié)束后 cookie 將到期。后面的代碼,就可以設(shè)置cookie的使用到期時間為“2010年1月1日”: Response.Cookies("CookieName").Expires=#January 01, 2010# 
        后面的代碼,將設(shè)定cookie的過期時間為“cookie的創(chuàng)建時間+365天”:Response.Cookies("CookieName").Expires=Date+365 
        但最好不要隨便寫 Response.Cookies("CookieName").Expires=Date,這樣頁面之間的調(diào)用時值會為空。執(zhí)行下面的代碼將會在訪問者的計算機中創(chuàng)建一個cookie,名字=VisitorName,值=Ken : Response.Cookies("VisitorName")="Ken" 
          執(zhí)行下面的代碼將會在訪問者的計算機中創(chuàng)建一個cookie,名字=VisitorName,值=表單中UserName的值 
        Response.Cookies("VisitorName")=Request.Form("UserName") 
        你可以擴展下面的代碼成為Cookie子關(guān)鍵值(CookieSubName),即cookie字典的生成。代碼如下: 
        Response.Cookies("VisitorName")("FirstName")="Ken"  
        Response.Cookies("VisitorName")("LastName")="Baumbach"  
        ◆ 讀取cookie的基本語法:Request.Cookies(cookie)[(key)|.attribute] 
        cookie 指定要檢索其值的 cookie。  
        key 可選參數(shù),用于從 cookie 字典中檢索子關(guān)鍵字的值。  
        attribe 指定 cookie 自身的有關(guān)信息。如:HasKeys 只讀,指定 cookie 是否包含關(guān)鍵字。 
        如果客戶端瀏覽器發(fā)送了兩個同名的 cookie,那么 Request.Cookie 將返回其中路徑結(jié)構(gòu)較深的一個。例如,如果有兩個同名的的 cookie,但其中一個的路徑屬性為 /www/ 而另一個為 /www/home/,客戶端瀏覽器同時將兩個 cookie 都發(fā)送到 /www/home/ 目錄中,那么 Request.Cookie 將只返回第二個 cookie。案例分析: 
        ◆ num.asp(通過留在本地磁盤上的cookie記錄一年內(nèi)訪問本站的次數(shù),第一次顯示“首次訪問”,以后顯示“第幾次訪問”) 
        <% dim num num=request.cookies("visitnum") 
        if num > "0" then 
        num=num+1 
        Response.write "您已是第"&num&"次訪問本站點了。" 
        Else Response.write "歡迎您首次訪問本站。" 
        num=1 end if 
        response.cookies("visitnum")=num 
        response.cookies("visitnum").expires=date+365 %>  
        ◆ showcookie.asp(從Cookies文件夾中遍歷出瀏覽器所有的Cookie name,以及相關(guān)的字典Cookie的顯示(藍字顯示))  <% For each cookie in Request.Cookies 
        if Request.cookies(cookie).HasKeys =false then 
        Response.write cookie & "=" & Request.Cookies(cookie) 
        Response.write ("<br>")  Else 
        for each key in Request.Cookies(cookie) 
        Response.write ("<font color=blue>") 
        Response.write cookie & ".("&key&")" & "=" & Request.Cookies(cookie)(key) 
        Response.write ("</font><br>") Next end if next  %>  
        ◆ check.asp ’首先,設(shè)置頁面。然后,檢查表單變量(在同一個頁面中)。如果表單變量存在,就創(chuàng)建cookie,并設(shè)置到期時間。<%@ LANGUAGE="VBSCRIPT" %> <%  
        bgcolor = Request.Form("bgcolor") 
        fgcolor = Request.Form("fgcolor") 
        pwd = Request.form("pwd") 
        If bgcolor <>"" or fgcolor <>"" then 
        Response.cookies("check")("bgcolor") = bgcolor 
        Response.Cookies("check")("fgcolor") = fgcolor 
        Response.Cookies("check")("pwd") = pwd 
        Response.Cookies("check").Expires=#may 01, 2004#  End if ’接著,讀取cookie 
        bgcolor = request.cookies("check")("bgcolor") 
        fgcolor = request.cookies("check")("fgcolor") 
        pwd = request.cookies("check")("pwd") 
        ’如果cookie在訪問者的計算機上不存在,就創(chuàng)建一個表單,詢問相關(guān)信息 
        If bgcolor ="" and fgcolor ="" and pwd="" then  %> 
        <HTML> <HEAD> </HEAD><body><DIV ALIGN="CENTER" > 
        <Form action="check.asp" method="POST"> 
        Bgcolor: <input type="text" name="bgcolor"><BR> 
        Fgcolor: <input type="text" name="fgcolor"><BR> 
        Password:<input type="password" name="pwd"><BR> 
            <input type="submit" value="Submit"> </Form></DIV></BODY><% End if 
        ’如果cookie已經(jīng)存在,并且bgcolor存在,就跳轉(zhuǎn)到color.asp。  
        If bgcolor <> "" then  Response.Redirect "color.asp"  End if  %> 
        ◆ color.asp(顯示用戶愛好顏色的頁面特性) 
        <% bgcolor=request.cookies("check")("bgcolor") 
        fgcolor=request.cookies("check")("fgcolor") 
        pwd=request.cookies("check")("pwd") %> 
        <%response.write("<body bgcolor="&bgcolor&"><font color="&fgcolor&">")%> 
        你的密碼是: <%response.write(" "&pwd&" ")%> 

        ASP編程入門進階(七):內(nèi)置對象Server  

        Server 對象提供對服務(wù)器上的方法和屬性的訪問 , 其大多數(shù)方法和屬性作為實用程序的功能服務(wù)(IIS HELP翻譯)。 
        有了 Server 對象,你就可以在服務(wù)器上啟動 ActiveX 對象例程,并使用 Active Server 服務(wù)提供象 HTML 和 URL 編碼這樣的函數(shù)。 
        一、Script.ScriptTimeout在腳本運行超過一段時間之后,即作超時處理。服務(wù)器一般的默認(rèn)腳本運行時間是90秒。 
        你可以從“Internet信息服務(wù)”中“默認(rèn)Web站點”的屬性彈出框中看出,你也可以自己設(shè)定。 
        呵呵,上面的可不是,900秒了。 
        應(yīng)該是“主目錄”標(biāo)簽中的“配置”對話框中,WINXP一樣。 


        在理解腳本運行時間之前,先來看一個程序,主要功能就是進行計算網(wǎng)頁執(zhí)行時間的。 

        當(dāng)然對應(yīng)的ASP也就是看到許多站點都有的頁面執(zhí)行時間顯示 
        1、time.asp  <%startime=timer()%> 
        <a href=#bot>到下面看執(zhí)行的時間</a> <% 
        for i= 1 to 5000 
        response.write("<hr width="&int(500+i)&">")  next %> 
        當(dāng)然中間還可以添加其它內(nèi)容。<br> <%endtime=timer()%> <a name=bot></a> 
        <%=FormatNumber((endtime-startime)*1000,3)%>毫秒 
        那如果上面的程序變成for i= 1 to 5000000呵呵,是不是機器快反應(yīng)不過來的感覺,那這個就是腳本的執(zhí)行時間了。為了讓程序能很好的執(zhí)行,就該把腳本執(zhí)行時間放長了。怎么放長?  
        <%Server.ScriptTimeout=110%> 
        時間的設(shè)定當(dāng)然是比默認(rèn)90秒大的,現(xiàn)在的代碼就是:指定服務(wù)器處理腳本在 110 秒后超時。還有,腳本時間的確定要看自身的程序了,一般情況100秒左右也差不多了,即使能執(zhí)行出來,可能觀看網(wǎng)頁的人早就把它叉叉了。 
        以上的ScriptTimeout就是Server對象唯一屬性了 
        二,Server.HtmlEncode HtmlEncode就是Server對象的其中一個方法了。它允許你對特定的字符串進行 HTML 編碼,雖然 HTML 可以顯示大部分你寫入 ASP 文件中的文本,但是當(dāng)你需要實際包含 HTML 標(biāo)記中所使用的字符,就會遇到問題。這是因為,當(dāng)瀏覽器讀到這樣的字符串時,會試圖進行解釋。 
        還是看一個程序,我想在頁面顯示“&nbsp;”這樣的代碼(附:&nbsp;是空格的代碼) 
        那么當(dāng)我進行書寫的時候你會發(fā)現(xiàn),瀏覽器已經(jīng)給我解釋了的。 
        所以,為了要讓一些特殊代碼能夠顯示,就運用該方法了。 
        2,htmlencode.asp <%Response.write ("這是沒有采用 HTMLEncode 方法的測試。<br> 這里就另起一行,說明代碼被執(zhí)行。&nbsp;")%> <hr> 
        <%Response.write Server.HtmlEncode("這是對 HTMLEncode 方法的測試。<br> 這里應(yīng)該不會另起一行,也就是代碼沒有被執(zhí)行了。&nbsp;")%> 
        這在許多網(wǎng)站,論壇都存在的一些BUG,不信你可以到各論壇試試:敲入&nbsp;就是沒有,急死你呢:)當(dāng)然HtmlEncode只是其中的一個原因,最主要的還是UBB代碼的轉(zhuǎn)換。不過關(guān)于這點我也已經(jīng)調(diào)試解決了。調(diào)試地址參看 http://www.cnbruce.com/juven/showart.asp 
        當(dāng)然經(jīng)典論壇不存在這問題,要不你也不會看到效果了。 
        三,Server.UrlEncode正如 HtmlEncode 方法使客戶可以將字符串翻譯成可接受的 HTML 格式一樣,Server 對象的 UrlEncode 方法則是根據(jù) URL 規(guī)則對字符串進行正確編碼,當(dāng)字符串?dāng)?shù)據(jù)以 URL形式傳遞到服務(wù)器時,在字符串中不允許出現(xiàn)空格,也不允許出現(xiàn)特殊字符。為此,如果你希望在發(fā)送字符串之前進行 URL 編碼,可使用 Server.URLEncode 方法。 
        為方便起見,我們先看為處理送交,然后處理接受的效果。 
        3,urlencode.asp <%filepath=request.servervariables("script_name")%> 
        接受URL中的值(沒有處理接受值,發(fā)現(xiàn)值被解釋了): <%=request.querystring("cnbruce")%> 
        <form action="<%=filepath%>"> 
        你可以輸入“&lt;hr&gt”等代碼看看:<input type="text" size="20" name="cnbruce"><input type="submit"> 
        </form> 
        接受URL中的值(進行了urlencode編碼,不會執(zhí)行): <%=Server.URLEncode(request.querystring("cnbruce"))%> 
        當(dāng)然你會發(fā)現(xiàn),雖然不執(zhí)行了,但會出現(xiàn)“<”變成了“%3C”,“>”變成了“%3E”,那這就是因為沒有在發(fā)送之前處理。 
        不過,我們還可以通過Replace函數(shù)將這些特殊代碼再逆轉(zhuǎn)過來。 
        4,vurlencode.asp <% function tihuan(what) 
        tihuan=what 
        if not isnull(what) then 
        tihuan=replace(tihuan,"%3C","&lt;") 
        tihuan=replace(tihuan,"%3D","=") 
        tihuan=replace(tihuan,"%3E","&gt;") 
        tihuan=replace(tihuan,"%26","&") 
        tihuan=replace(tihuan,"空格我不知道,呵呵。哪個告訴我下:)","&nbsp;") 
        tihuan=replace(tihuan,"%3B","&#59;") 
        tihuan=replace(tihuan,"%22",""") 
        tihuan=replace(tihuan,"%2B","+") 
        tihuan=replace(tihuan,"%2F","/") 
        end if end function %> 
        <%filepath=request.servervariables("script_name")%> 
        接受URL中的值(沒有處理接受值,發(fā)現(xiàn)值被解釋了): <%=request.querystring("cnbruce")%> 
        <form action="<%=filepath%>"> 
        你可以輸入“&lt;hr&gt”等代碼看看:<input type="text" size="20" name="cnbruce"><input type="submit"> 
        </form> 接受URL中的值(進行了urlencode編碼,不會執(zhí)行): <%=tihuan(Server.URLEncode(request.querystring("cnbruce")))%> 
        呵呵,其實上面我是做的無用功啦,真正應(yīng)該是在發(fā)送之前就該處理下的,不過對學(xué)習(xí)該方法的舉例確是個好方法:) 
        四,Server.MapPath 相信看過我寫的《DW2ASP系列》的朋友,都卡在這個上了。DW畢竟是入門的好東西,但要系統(tǒng)學(xué)ASP編程,對這個就該好好認(rèn)識了解下。 
        MapPath方法,具體的就是將指定的相對或虛擬路徑,映射到服務(wù)器上相應(yīng)的物理目錄上。 
        用法,也就是語法了,如下: Server.MapPath(Path) 
        Path 指定要映射物理目錄的相對或虛擬路徑。若 Path 以一個正斜杠 (/) 或反斜杠 (\) 開始,則 MapPath 方法返回路徑時將 Path 視為完整的虛擬路徑。若 Path 不是以斜杠開始,則 MapPath 方法返回同本文件中已有的路徑相對的路徑。這里需要注意的是 MapPath 方法不檢查返回的路徑是否正確或在服務(wù)器上是否存在。 
        當(dāng)然這可以和Request.ServerVariables連起來使用看看。 
        5,mappath.asp Request.ServerVariables("APPL_PHYSICAL_PATH") : <%=Request.ServerVariables("APPL_PHYSICAL_PATH")%><p> 
        Request.ServerVariables("PATH_INFO") : <%=Request.ServerVariables("PATH_INFO")%><p> 
        Request.ServerVariables("SCRIPT_NAME") : <%=Request.ServerVariables("SCRIPT_NAME")%><p> 
        Request.ServerVariables("URL") : <%=Request.ServerVariables("URL")%><p> 
        Request.ServerVariables("PATH_TRANSLATED") : <%=Request.ServerVariables("PATH_TRANSLATED")%><hr> 
        上面都是通過ServerVariables提取得出的值,下面就來運用mapath把一個虛擬地址轉(zhuǎn)變?yōu)閷嶋H的物理地址。<p> 
        Server.MapPath(Request.ServerVariables("URL")) :<%=Server.MapPath(Request.ServerVariables("URL"))%><p> 
        或者自己隨便寫個不存在的路徑,同樣能夠執(zhí)行<p> 
        Server.MapPath("cnbruce.asp") : <%=Server.MapPath("cnbruce.asp")%><p> 
        再來個“/”的<p> Server.MapPath("/cnbruce.asp") : <%=Server.MapPath("/cnbruce.asp")%><br> 
        Server.MapPath("\cnbruce.asp") : <%=Server.MapPath("\cnbruce.asp")%><p> 
        你會發(fā)現(xiàn)物理地址轉(zhuǎn)變到IIS默認(rèn)根目錄下面了。這就是如6to23之類的站點mappath的問題所在。還是虛擬主機好,即使是根,也還是自己站點的默認(rèn)存放節(jié)點根。  
        注意測試的地址和根目錄下的地址,對應(yīng)的是同一文件夾(這就是虛擬主機),6to23之類是不會相同的。有此些了解,對路徑的處理應(yīng)該要好多了,再返回我的站點,看看我對數(shù)據(jù)庫的mappath路徑的處理方法,相信又是一個理解層次了。 
        五、Server.CreatObject  這個方法恐怕是 ASP 中最為實用,也是最強勁的功能了。它可用于創(chuàng)建已經(jīng)注冊到服務(wù)器上的 ActiveX 組件實例。這是一個非常重要的特性,因為通過使用 ActiveX 組件能夠使你輕松地擴展 ActiveX 的能力,正是使用了 ActiveX 組件,你可以實現(xiàn)至關(guān)重要的功能,譬如數(shù)據(jù)庫連接、文件訪問、廣告顯示和其他 VBScript 不能提供或不能簡單地依靠單獨使用 ActiveX 所能完成的功能。也正是因為這些組件才使得 ASP 具有了強大的生命力。那今天就主要把Server對象學(xué)習(xí)了下,感覺好象是每個都有用的,重要啊。 
        還有,需要說明的,如果您從本處轉(zhuǎn)載,發(fā)現(xiàn)和本源件有差錯,比如代碼&nbsp; 、 &lt 、 &gt等等,根本就是被執(zhí)行了的。都說明您的站點存在著這些問題。 

        ASP編程入門進階(八):內(nèi)置對象Session  

        ASP對象中除了用于發(fā)送(Response)、接收和處理數(shù)據(jù)(requeest)、服務(wù)器訪問(Server)的對象外,還有一些非常實用的標(biāo)記Active Server應(yīng)用程序(Application)和單個用戶信息(Session)的對象。 
        Session對象 該對象在ASP使用中占相當(dāng)大的比例。由于網(wǎng)頁是一種無狀態(tài)程序,無法得知用戶瀏覽狀態(tài)。在ASP中,通過Session對象來記錄使用者私有的數(shù)據(jù)變量,以作為用戶再次對服務(wù)器提出要求時做確認(rèn),用戶在程序的Web頁面之間跳轉(zhuǎn)時,存在Session對象中的變量將不會消失。這些是很重要的功能,尤其是有會員的系統(tǒng)必須要用到的。像是會員的登入賬號、時間、狀態(tài)以及許許多多該記錄的實時數(shù)據(jù)(如購物系統(tǒng)記錄使用者的購物籃內(nèi)的商品),這些信息屬于各使用者私人所需要,通常開發(fā)者都是使用 Session 記錄處理。 
            在ASP中的Session是使用Cookies構(gòu)成,服務(wù)器將所有的Session內(nèi)記錄的數(shù)據(jù),以Cookies的方式傳至用戶的瀏覽器。通常一般瀏覽器會將這些Cookies存起來,每當(dāng)使用者點選連結(jié),再次與服務(wù)器做聯(lián)機時,瀏覽器就會把這些Cookies傳回Server供做處理:這即是Session的運作原理。由此可知會話狀態(tài)Session僅在支持cookie的瀏覽器中保留,如果客戶關(guān)閉了Cookie 選項Session也就不能發(fā)揮作用了。 
        一、Session.SessionID  屬性返回用戶的會話標(biāo)識。在創(chuàng)建會話時,服務(wù)器會為每一個會話生成一個單獨的標(biāo)識,會話標(biāo)識以長整形數(shù)據(jù)類型返回。在很多情況下 SessionID 可以用于 WEB 頁面注冊統(tǒng)計。 
            利用該屬性可以解決一種對用戶的控制問題。該問題的主要功能就是,針對某個網(wǎng)站的一個模塊,當(dāng)一個會員登錄后正在看此模塊時,另一個人用同樣的會員名登錄,就不能瀏覽這個模塊:也就是說一個會員名同時只能一個人瀏覽此模塊。 
            通過用會員名(假設(shè)為UserID,唯一)和SessionID來實現(xiàn)了控制。當(dāng)會員登錄時,給這個會員一個Session記錄登錄狀態(tài)如:Session("Status")="Logged",同時把這個會員的Session.SessionID寫入數(shù)據(jù)庫。當(dāng)他要瀏覽此模塊時,先判斷其是否登錄,若已經(jīng)登錄再判斷它的SessionID是否與數(shù)據(jù)庫記錄的相同,如果不同則不能訪問。 
            這樣,當(dāng)另一個用戶用相同的會員名登錄時,那么數(shù)據(jù)庫中記錄的就是新的SessionID,前者訪問此模塊時就不能通過檢查。這就實現(xiàn)了一個會員名同時只能一個人瀏覽某個模塊。這個功能在一些收費網(wǎng)站有很有特別作用,它防止了一個會員名給多個人瀏覽的問題,為公司保障了利益。 
        <%=Session.SessionId%> 是單獨生成的唯一ID標(biāo)識,可刷新調(diào)試。 
        二、Session.TimeOut 該屬性設(shè)置的Session的最大間隔時間。間隔時間是指客戶器端從最近一次向Web服務(wù)器提出要求,到下一次向Web服務(wù)器提出要求的時間?梢岳斫鉃椋喝绻脩粼谠摮瑫r時限之內(nèi)不刷新或請求網(wǎng)頁,則該會話將終止。Timeout 屬性是以分鐘為單位,為該應(yīng)用程序的Session對象指定超時時限的,一般默認(rèn)為20分鐘。這在網(wǎng)吧等公共場所,登錄個人信息頁而忘記關(guān)閉窗口時,顯得比較重要(至少可以把時間設(shè)短些)。 
        <%=Session.TimeOut=10%> 
        以上SessionId、TimeOut屬于Session對象的兩個屬性,下面看該對象的一個方法 
        Session.Abandon 該方法是Session對象的唯一方法,可以清除Session對象,用來消除用戶的Session對象并釋放其所占的資源。當(dāng)然你如果沒有明確調(diào)用Abandon方法,一旦會話超時,服務(wù)器也會將刪除這些對象并釋放資源。 
        下面就用兩個頁的程序來認(rèn)識Session對象以及Abandon方法的利用。 
        1,login.asp <% 
        ’提取url中變量loginout的值是否為true,若為真,就執(zhí)行Session.Abandon()。 
        if Request.QueryString("loginout")="true" then  &, nbsp;   Session.Abandon() 
        end if  ’只有在當(dāng)點擊了submit按鈕的前提下,再來判斷提取的東西都不為空,則建立Session對象。 
        submitname=request.form("submit1") 
        if submitname="submit" then 
            if Request.Form("name")<>"" and Request.Form("pwd")<>"" then 
                Session("name")=Request.Form("name") 
                Session("pw")=Request.Form("pwd") 
            end if end if %> <% 
        ’如果Session("name")不為空,則顯示它的值,并且做一個到info.asp的鏈接。 
        if Session("name")<>"" then 
        response.write("你的name值是:"&Session("name")) 
        response.write("<br><a href=’info.asp’>顯示你的資料</a>") 
        else ’否則,即Session("name")為空不存在,則顯示表單用以輸入建立Session的平臺。 
        %> <form action="login.asp" method="post"> 
        姓名:<input type="text"     name="name"><br> 
        密碼:<input type="password" name="pwd"><br> 
        <input type="submit" value="submit" name="submit1"></form> 
        <!--同樣做了一個到info.asp的鏈接。--> 
        <a href="info.asp">顯示你的資料</a><%end if%> 
        注意Session("name")為空和不為空的時候,都做了一個到info.asp的鏈接,具體調(diào)試結(jié)果如何,再來看info.asp的內(nèi)容。 
        2,info.asp <% ’如果session對象值為空則跳轉(zhuǎn)到login.asp 
        if session("name")="" then 
               Response.Redirect("login.asp") 
        ’否則就顯示個人信息 
        Else        Response.Write("你的姓名:"&session("name")&"<br>") 
               Response.Write("你的密碼:"&session("pw")&"<br>") 
        end if %> 
        <a href="login.asp">返回</a> 
        <a href="login.asp?loginout=true">退出</a> 
        可以看出來,info.asp頁面內(nèi)容的顯示其實是需要條件的。那就是必須得有一個session值的存在,這樣才可以顯示具體的信息。這在登錄系統(tǒng)中運用得比較多。 
        你可以把login.asp想象成一個登錄窗口,當(dāng)然我的這個比較簡單(只要輸入用名和密碼就生產(chǎn)Session了),實際情況是:判斷輸入的用名和密碼是否和數(shù)據(jù)庫中的用名和密碼吻合,如果正確吻合才生成Session的。然info.asp頁面的作用剛好可以做為一權(quán)限頁面,因為進入該頁需要Session,而Session的產(chǎn)生是確保用名密碼正確的。 
        所以當(dāng)一開始出現(xiàn)表單窗口時,你點login.asp鏈接是打不開的,只有當(dāng)提交了表單生成了Session后才能進入。這正是登錄系統(tǒng)的精髓所在,Do You Know?:) 
        四、Session_OnStart Session_OnStart屬于Session對象的一類事件。它是在服務(wù)器創(chuàng)建新會話時發(fā)生的。服務(wù)器在執(zhí)行請求的頁之前先處理該腳本。Session_OnStart 事件是設(shè)置會話期變量的最佳時機,因為在訪問任何頁之前都會先設(shè)置它們。 
        對象的例程每一次啟動時觸發(fā)Session_OnStart事件,然后運行Session_Onstart事件的處理過程。也就是說,當(dāng)服務(wù)器接收到應(yīng)用程序中的URL的HTTP請求時,觸發(fā)此事件,并建立一個Session對象。 
        當(dāng)然說到Session_OnStart事件就不能不談到一個文件Global.asa(P.S:我打算把該文件和Chat程序放在一起說的,所以現(xiàn)在先不作過多解釋) 
        具體用法先透露,寫在Global.asa文件內(nèi)部 
        <SCRIPT RUNAT=Server Language=VBScript> 
        ....... 
        Sub Session_OnStart 
        ....... 
        End Sub 
        ....... 
        </SCRIPT> 
        五、Session_OnEnd一看也就知道是Session對象的另一類事件了。當(dāng)調(diào)用Session.Abandon方法時或者在TimeOut的時間內(nèi)沒有刷新,這會觸發(fā)Session_OnEnd事件,然后執(zhí)行里面的腳本。同樣具體用法在后面將寫的Global.asa文件專題中詳細(xì)介紹到,簡單語法如下:<SCRIPT RUNAT=Server Language=VBScript>....... 
        Sub Session_OnEnd ....... End Sub....... </SCRIPT> 
        以上就是對Session對象的系統(tǒng)學(xué)習(xí)。 

        ASP編程入門進階(九):內(nèi)置對象Application  

        在Web應(yīng)用程序中,當(dāng)一個用戶訪問該應(yīng)用時,Session類型的變量可以供這個用戶在該Web應(yīng)用的所有頁面中共享數(shù)據(jù);如果另一個用戶也同時訪問該Web應(yīng)用,他也擁有自己的Session變量,但兩個用戶之間無法通過Session變量共享信息,而Application類型的變量則可以實現(xiàn)站點多個用戶之間在所有頁面中共享信息?梢岳斫釹ession是局部變量,而Application則為全局變量。 
        在同一虛擬目錄及其子目錄下的所有 .asp 文件構(gòu)成了 ASP 應(yīng)用程序。我們非但可以使用 Application 對象,在給定的應(yīng)用程序的所有用戶之間共享信息,并在服務(wù)器運行期間持久的保存數(shù)據(jù)。而且,Application 對象還有控制訪問應(yīng)用層數(shù)據(jù)的方法和可用于在應(yīng)用程序啟動和停止時觸發(fā)過程的事件。 
        一、Application("name")=Value 
        正如Session("name")=value一樣,Application對象也沒有內(nèi)置的屬性。當(dāng)然用戶可以自定義屬性,該屬性也可稱為集合。 
          一旦分配了Application對象的屬性,它就會持久地存在,直到關(guān)閉WEB服務(wù)器服務(wù)使得 Application 停止。由于存儲在 Application 對象中的數(shù)值可以被應(yīng)用程序的所有用戶讀取,所以 Application 對象的屬性特別適合在應(yīng)用程序的用戶之間傳遞信息。<% Application("MyName") = "cnbruce" %> 
        二、Application.Lock方法是禁止其他用戶修改Application對象的屬性,以確保在同一時刻僅有一個客戶可修改和存取 Application 變量。如果用戶沒有明確調(diào)用 Unlock 方法,則服務(wù)器將會在 .asp 文件結(jié)束或超時后即解除對 Application 對象的鎖定。最簡單的就是進行頁面記數(shù)的例子了。 
        1,num.asp<% Application.Lock 
        Application("NumVisits") = Application("NumVisits") + 1 
        Application.Unlock %> 
        你是本頁的第<%=Application("NumVisits")%>位訪問者 
        當(dāng)然,若如果你需要記數(shù)的初始值那就該寫個判斷了。 
        <% if Application("NumVisits")<9999 then 
        Application("NumVisits")=10000 
        end if Application.Lock 
        Application("NumVisits") = Application("NumVisits") + 1 
        Application.Unlock %> 
        你是本頁的第<%=Application("NumVisits")%>位訪問者上面的程序,你會發(fā)現(xiàn)每刷新一次,都會記數(shù)累加,如按IP值訪問來記數(shù)的話,則建立一個Session 
        2,vnum.asp <% if session("visitnum")="" then 
        Application.Lock  Application("NumVisits") = Application("NumVisits") + 1 
        Application.Unlock  session("visitnum")="visited" 
        end if %>你是本頁的第<%=Application("NumVisits")%>位訪問者 
        三、Application.Unlock與Lock方法相反,Unlock方法是允許其他用戶修改 Application 對象的屬性?梢钥闯鲈谏厦娴睦又,Unlock方法解除對象的鎖定,使得下一個客戶端能夠增加 NumVisits 的值。當(dāng)然需要注意的是:記數(shù)要確保服務(wù)器不被重啟,因為所以的訪問是數(shù)值是建立在頁面之上的,并未進行保存成文件或保存到數(shù)據(jù)庫這樣的處理。一般當(dāng)服務(wù)器重新啟動就會觸發(fā)Application的事件了。 
        四、Application_OnEnd事件 在應(yīng)用程序退出時于 Session_OnEnd 事件之后發(fā)生,當(dāng)然Application_OnEnd 事件的處理過程也必須寫在 Global.asa 文件之中。 
        比如上面的程序中,若服務(wù)器關(guān)機必然會觸發(fā)Application_OnEnd事件,那么該事件就可以進行數(shù)據(jù)保存的工作,已使得下次數(shù)據(jù)的續(xù)沿。當(dāng)然Application_OnEnd 事件在應(yīng)用程序退出時于Session_OnEnd 事件之后發(fā)生 
        <SCRIPT LANGUAGE="VBScript" RUNAT="Server">............. 
        Sub Application_OnEnd ............. 
        End Sub .............</SCRIPT>  
        五、Application_OnStart事件在首次創(chuàng)建新的會話( 即 Session_OnStart 事件 )之前發(fā)生。當(dāng)WEB服務(wù)器啟動并允許對應(yīng)用程序所包含的文件進行請求時就觸發(fā)Application_OnStart事件。 
        <SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>............. 
        Sub Application_OnStart.............End Sub.............</SCRIPT> 
        所以現(xiàn)在可以將Global.asa內(nèi)部的代碼可以想象 
        <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> 
        Sub Application_OnStart.....................End Sub  Sub Session_OnStart ..................... 
        End Sub   Sub Session_OnEnd  ..................... End Sub  Sub Application_OnEnd  
        .....................End Sub </SCRIPT>  
        具體Global.asa是怎么一回事?且聽下回分解。海 

        ASP編程入門進階(十):Global.asa文件  

        我們已經(jīng)知道Application和Session對象的OnStart、OnEnd事件的腳本,都必須是在 Global.asa 文件中聲明的。那究竟Global.asa是什么樣的一個文件?它有何作用?又該如何運用呢?  
        首先.asa是文件后綴名,它是Active Server Application的首字母縮寫。Global.asa文件可以管理在ASP應(yīng)用中兩個非?量痰膶ο螅篈pplication、Session。它其實是一個可選文件,程序編寫者可以在該文件中指定事件腳本,并聲明具有會話和應(yīng)用程序作用域的對象。該文件的內(nèi)容不是用來給用戶顯示的,而是用來存儲事件信息和由應(yīng)用程序全局使用的對象。該文件必須存放在應(yīng)用程序的根目錄內(nèi)。每個應(yīng)用程序只能有一個Global.asa文件。 
        關(guān)于Global.asa文件最常見的錯誤概念是它能為一般的使用的函數(shù)和子程序用作書庫。Global.asa文件僅能用于創(chuàng)建對象的引用和俘獲啟動,以及結(jié)束Application對象和Session對象。Global.asa文件主要基于會話級事件被訪問,在以下三種情況下被調(diào)用: 
        1,當(dāng)Application_OnStart或Application_OnEnd事件被觸發(fā)。 
        2,當(dāng)Session_OnStart或Session_OnEnd事件被觸發(fā)。 
        3,當(dāng)引用一個在Global.asa文件里被實例化的對象(Object)。 
        Global.asa的標(biāo)準(zhǔn)文件格式如下: 
        <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> 
        Sub Application_OnStart 
          ’Application_OnStart 當(dāng)任何客戶首次訪問該應(yīng)用程序的首頁時運行 
        End Sub    Sub Session_OnStart  
          ’Session_OnStart 當(dāng)客戶首次運行 ASP 應(yīng)用程序中的任何一個頁面時運行 
        End Sub    Sub Session_OnEnd  
          ’Session_OnEnd 當(dāng)一個客戶的會話超時或退出應(yīng)用程序時運行 
        End Sub    Sub Application_OnEnd  
          ’Application_OnEnd 當(dāng)該站點的 WEB 服務(wù)器關(guān)閉時運行 End Sub </SCRIPT> 
        一、Session_onStart 先看一個控制用戶進入頁面的代碼: 
        1、Global.asa(放在被調(diào)試的虛擬目錄的根目錄下面) 
        <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> 
        Sub Session_OnStart ’只要是用戶第一次登錄本站,則會跳轉(zhuǎn)到首頁 
        response.redirect("htp://www.cnbruce.com/")  End Sub</SCRIPT> 
        然后調(diào)試當(dāng)前虛擬目錄下的任何文件,你會發(fā)現(xiàn)所有頁面都跳轉(zhuǎn)向htp://www.cnbruce.com/ 
        通過此“強制進入某頁”的例子,可以想象當(dāng)首頁需要被關(guān)注的時候是非常有必要的。下面就以一個“在線人數(shù)”的例子來繼續(xù)觀察Session_OnStart和Session_OnEnd事件 
        例2、Global.asa(放在被調(diào)試的虛擬目錄的根目錄下面) 
        <SCRIPT LANGUAGE=VBScript RUNAT=Server> 
        Sub Application_onStart ’初始值為0 
             Application("OnLine") = 0  
        End Sub   Sub Session_onStart ’一個用戶訪問進行記數(shù)加1 
             Application.Lock       Application("OnLine") = Application("OnLine") + 1  
             Application.Unlock  End Sub  
        Sub Session_OnEnd ’一個用戶進程的結(jié)束,記數(shù)減1 (P.S.如果沒有該事件程序,則執(zhí)行的就是頁面訪問程序了。)    Application.Lock  
           Application("OnLine") = Application("OnLine") - 1  
           Application.Unlock  End Sub     </SCRIPT> 
        例3、online.asp <% if request.querystring("logout")="true" then 
        session.Abandon()  response.end end if %> 
        當(dāng)前共有<%=Application("OnLine")%>在線  
        <a href="online.asp?logout=true">退出</a> 
        你發(fā)現(xiàn)在該頁中只有一個Application("OnLine"),而且還是被顯示引用的。那么其值來自何方?這正是Global.asa文件的關(guān)鍵所在。你可以在本機依次打開各個窗口,進行進行關(guān)閉窗口或退出兩種方法的調(diào)試。 
        三、繼續(xù)細(xì)化一下上面的程序你會發(fā)現(xiàn):當(dāng)進行“退出”連接后關(guān)閉窗口和直接關(guān)閉窗口效果是不一樣的。因為Session存在時間的緣故,當(dāng)直接進行關(guān)閉窗口,并不能觸發(fā)Session_OnEnd事件,所以該如何實現(xiàn)這個幾乎不可能的想法呢? 
        大家都知道,當(dāng)網(wǎng)頁進行關(guān)閉的時候可以連帶一個onunload事件,那么該onunload只要能執(zhí)行Session的注銷功能不就我們需要的嗎?廢話少說,將online.asp進行修改 
        例3、online.asp <% if request.querystring("logout")="true" then 
        session.Abandon()  response.end  end if %> 
        <body onunload=javascript:window.open("exit.asp")> 
        當(dāng)前共有<%=Application("OnLine")%>在線 
        <a href="online.asp?logout=true">退出</a> 
        注意,online.asp進行onunload的時候會打開exit.asp,那只要在exit.asp中再設(shè)置session.Abandon()就OK了。 
        例4、exit.asp <%session.Abandon()%> <script> self.close() </script> 
        當(dāng)然,加了段Script腳本,目的是進行Session的注銷以后立即進行關(guān)閉本身。 
        那現(xiàn)在基本一個在線統(tǒng)計的Web應(yīng)用就可以了。 
        四、深入研究Global.asa從上面的調(diào)試中,舉一反三的你,一定會提出一個問題:如何控制注冊用戶在線人數(shù)?那下面幾個文件一個一個看: 
        例5、Global.asa(放在被調(diào)試的虛擬目錄的根目錄下面) 
        <SCRIPT LANGUAGE="VBScript" RUNAT="Server"> 
        Sub Application_OnStart 
        application("online")=0 
        End Sub Sub Session_OnStart 
        End Sub Sub Session_OnEnd 
        if session.contents("pass") then ’判斷是否為登錄用戶的Session_OnEnd 
          application.lock 
          application("online")=application("online")-1 
          application.unlock 
        end if End Sub Sub Application_OnEnd End Sub</SCRIPT> 
        注意本Global.asa中的Session_OnStart塊不做任何事件。因為一旦有用戶訪問服務(wù)器而不管用戶是否登錄,都會產(chǎn)生OnStart事件,而現(xiàn)在需要的只是登錄用戶的在線,所以不能在OnStart事件里使Applicaiton("online")加1。又因為不管是否是登錄用戶的會話結(jié)束都會產(chǎn)生OnEnd事件(假如有訪客訪問了服務(wù)器但并不登錄,他的會話結(jié)束后也會產(chǎn)生OnEnd事件),所以在Session_OnEnd事件里用了句if語句來判斷是否為已登錄用戶的OnEnd事件,如果是才將在線人數(shù)減1。 
        并且值得注意的是:session.contents("pass")的使用,因為在OnEnd事件里禁止使用Session對象,但是可以用Session對象的集合來調(diào)用session變量。也就是說不能直接寫session("pass"),而是需要寫session.contents("pass")。 
        例6 login.asp <% if request.querystring("logout")="true" then 
        session.Abandon() 
        end if submitname=request.form("submit") 
        if submitname="submit" then 
        name=request.form("name") 
        pwd=request.form("pwd") 
        if name="cnbruce" and pwd="cnrose" then 
          session("name")=name 
          session("pass")=true 
        else   response.write "Error Name Or Pwd.<a href=’login.asp’>Back</a>" 
          response.end  end if application.lock 
        application("online")=application("online")+1 
        application.unlock %> 
        當(dāng)前注冊會員<%=application("online")%>人。 
        <a href="login.asp?logout=true">退出</a> 
        <%else%> <form action="login.asp" method="post"> 
        <input type="text" name="name"><br> 
        <input type="password" name="pwd"><br> 
        <input type="submit" name="submit" value="submit"> <%end if%> 
        只是簡單地檢測用名是cnbruce,密碼是cnrose的時候,生成一個session("pass")=true,就是放在Global.asa中判斷的。 
        五,繼續(xù)發(fā)揮想象 想想,再想想。僅統(tǒng)計有多少人在線是不夠的,還要判斷用戶的在線狀態(tài)。 
        可以想象辦法基本,當(dāng)用戶登錄的時候,在login.asp里將online設(shè)為1(如果有數(shù)據(jù)庫則上傳),但用戶離線時將online設(shè)為0,要完善它,就要修改一下Session_OnEnd事件,在該事件里將online設(shè)為0(同樣將為0的值上傳)…… 
        當(dāng)然,Global.asa遠遠不止這些。不過我們現(xiàn)在先不著急全部掌握,當(dāng)我們接觸到數(shù)據(jù)庫的時候再返回過來看,繼續(xù)研究該文件,相信到那時一定又會感悟到很多。所以,還是先把上面的這些吃透吧:) 

        ASP編程入門進階(十一):Chat聊天程序  

        通常的聊天室所采用的程序,也就是Chat程序了,其基本結(jié)構(gòu)原理是不會采用到數(shù)據(jù)庫的。那究竟采用什么技術(shù)呢?我們知道ASP變量當(dāng)中Session變量的作用是記錄單個用戶的信息,并且能跟蹤用戶的行為;Application對象的作用則起的全局變量,可以實現(xiàn)站點多個用戶之間在頁面中共享信息的。那可以想象,在針對當(dāng)前聊天程序中,一個聊天成員即為一個Session變量,聊天成員之間的會話則當(dāng)成Application變量進行共享顯示,以使各成員都能看見。 
        那下面就采用一很經(jīng)典的實例程序,進行了解和分析。 
        1,chat.asp <%If Request.ServerVariables("Request_Method")="GET" then%> 
          <form method="post" action="chat.asp"> 
           <input type="text" name="nick"  value="your nick name"><p> 
           <input type="submit" value="come in"><p> 
           <input type="hidden" name="log" size="20" value="1">   </form> 
        <%Response.End    Else   Response.clear   dim talk 
           If Request.Form("nick")<>"" then     Session("nick")=Request.Form("nick")   End if %> <form method="post" action="chat.asp" name=form1>  
        <%=Session("nick")%>說話: 
        <input type="text" name="talk" size="50"><br> 
        <input type="submit" value="提交"> 
        <input type="reset" value="取消"></p> 
        </form> <a href="chat.asp">離開</a><br>  
        <% If Request.Form("log")<>1 then 
          If trim(Request.Form("talk"))="" then 
            talk=Session("nick")&"不說一句話就想來敷衍大家" 
          Else    talk=trim(Request.Form("talk")) 
          End If Application.lock 
          Application("show")="來自"&Request.ServerVariables("remote_addr")& "的" &Session("nick")&"在"&time& "的時候說:" &talk& "<br>" &Application("show") 
        Application.UnLock  Response.Write Application("show") 
        End if %> <%End if%> 
        簡單解釋:1、<%If Request.ServerVariables("Request_Method")="GET" then%>的作用就是判斷當(dāng)前頁面接受的方式,如果為GET方式則會顯示“要求輸入昵稱”的表單頁。因為頁面的默然接受方式為GET,當(dāng)在URL地址欄直接敲入時,也就是沒有任何信息的時候,就應(yīng)該顯示要求“輸入昵稱”。 
        2、<input type="hidden" name="log" size="20" value="1">和下面的If Request.Form("log")<>1 then是有關(guān)聯(lián)的:顯然第一次輸入昵稱進入,同樣將log隱藏域發(fā)送。但作為第一次的進入是無任何語句發(fā)言的,所以判斷接受的log值不為1,亦即非首次登錄(表示已經(jīng)登錄)時,執(zhí)行內(nèi)部相關(guān)聊天顯示程序。 
        3、trim(Request.Form("talk"))="",trim就是個函數(shù)了:刪去字符串前,后的空格。初此,還有rtrim():去掉字符串后的空格;ltrim():去掉字符串前的空格。 

        4,Application.lock   Application("show")="來自"&Request.ServerVariables("remote_addr")& "的" &Session("nick")&"在"&time& "的時候說:" &talk& "<br>" &Application("show") 
        Application.UnLock提取精華得Application.lock 
          Application("show")=talk& "<br>" &Application("show")   Application.UnLock 
        可以看到是Application變量的疊加功能,每次Application("show")的值都建立在原有Application變量值的基礎(chǔ)之上,再附加上最新的聊天內(nèi)容:talk變量的值。這樣就保證所有用戶都能看到的共享信息了。未完待敘,就醬紫看先 :) 

        ASP編程入門進階(十二):ASP技巧累加 
          
        一、On Error 語句 作用是:啟用或禁用錯誤處理程序。一般用法如下: 
        On Error Resume Next  On Error GoTo 0 
        如果在您的代碼中未使用On Error Resume Next語句,所發(fā)生的運行時錯誤將顯示錯誤信息,同時,代碼的執(zhí)行也隨之終止。但當(dāng)你采用它時,就會使程序按照產(chǎn)生錯誤的語句之后的語句繼續(xù)執(zhí)行,或是按照最近一次所調(diào)用的過程(該過程含有 On Error Resume Next 語句)中的語句繼續(xù)運行。這個語句可以不顧運行時錯誤,繼續(xù)執(zhí)行程序,之后您可以在過程內(nèi)部建立錯誤處理例程。在調(diào)用另一個過程時,On Error Resume Next 語句變?yōu)榉腔顒拥。所以,如果希望在例程中進行內(nèi)部錯誤處理,則應(yīng)在每一個調(diào)用的例程中執(zhí)行 On Error Resume Next 語句。 
        如果您已啟用 On Error Resume Next 錯誤處理程序,則可使用On Error GoTo 0禁用錯誤處理程序。 

        [附注:要在代碼中生成運行時錯誤,請用Err對象的Raise方法。 
        這樣的情況經(jīng)常在調(diào)試程序的時候看見,比如分別調(diào)試下面兩程序則會顯示。 
        1,err1.asp <%Err.Raise 6%> 技術(shù)信息(用于支持人員) 錯誤類型:Microsoft VBScript 運行時錯誤 (0x800A0006)  溢出 
        2,err2.asp  <%cnbruce.com%> 調(diào)試的時候也就是 技術(shù)信息(用于支持人員) 
        錯誤類型:Microsoft VBScript 運行時錯誤 (0x800A01A8) 缺少對象: ’cnbruce’ 
        但當(dāng)你在首行添加了On Error Resume Next之后,發(fā)現(xiàn)不報錯提示,表明內(nèi)部錯誤處理完成。但進行下列程序的時候發(fā)現(xiàn) 
        3,err3.asp <% On Error Resume Next 
        cnbruce.com 
        On Error GoTo 0  cnbruce.com%> 
        這時運用了On Error GoTo 0,則會顯示出錯信息,只不過不是第三行,而是第五行的cnbruce.com錯誤對象了。通過上面幾個例子,相信你對此語句應(yīng)該有所領(lǐng)悟了。接著再看。 
        二,Option Explicit 語句 該語句的作用是:強制要求顯式聲明腳本中的所有變量。 
          所謂的顯式聲明,就是要使用 Dim、Private、Public 或 ReDim 語句聲明所有變量。如果在程序中試圖使用未經(jīng)聲明的變量名,則會出現(xiàn)錯誤。用該語句可以避免拼錯已存在的變量名稱。對于作用范圍不清楚的變量,使用此語句也可避免發(fā)生混淆。當(dāng)然,如果要使用 Option Explicit,該語句必須出現(xiàn)在腳本的任何其他語句之前。 
        4、err4.asp <% Option Explicit    ’ 強制顯示聲明變量。 
        Dim MyVar          ’聲明變量。 
        MyVar = 10         ’聲明變量不產(chǎn)生錯誤。 
        MyInt = 10         ’未聲明變量產(chǎn)生錯誤。 
        response.write(MyInt) %> 
        報錯信息如下: 技術(shù)信息(用于支持人員) 
        錯誤類型: Microsoft VBScript 運行時錯誤 (0x800A01F4) 變量未定義: ’MyInt’ 
        再加一句:ASP中對VBScript提供了強勁的支持,能夠無縫集成VBScript的函數(shù)、方法,這樣給擴展ASP的現(xiàn)有功能提供了很大便利。由于ASP中已經(jīng)模糊了變量類型的概念,所以,在進行ASP與VBScript交互的過程中,很多程序員也慣于不聲明VBScript的變量,以后注意,這樣加重了服務(wù)器的解析負(fù)擔(dān),進而影響服務(wù)器的響應(yīng)請求速度。鑒于此,我們可以象在VB中強制用戶進行變量聲明一樣在VBScript中強制用戶進行變量聲明。實現(xiàn)方法就是:在ASP程序行首放置<% option explicit%>。實踐也證明,ASP文件中使用“Option Explicit”可以使得程序出錯機會降到最少,并且會大大提升整體性能。另外,聲明的變量有個順序的技巧,要么以編譯時間,要么以運行時間。聲明的變量都按此順序引用。 

        ASP編程入門進階(十三):ASP組件Ad/ContentRotator  

        ASP的強大不僅僅局限于接受和顯示的交互,更多的是運用ActiveX 組件進行更強大的Web應(yīng)用。那究竟ActiveX組件為何物?它又是如何運作的呢?其實ActiveX Server Components(ActiveX 服務(wù)器組件)是一個存在于 WEB 服務(wù)器上的文件,該文件包含執(zhí)行某項或一組任務(wù)的代碼,組件可以執(zhí)行公用任務(wù),這樣就不必自己去創(chuàng)建執(zhí)行這些任務(wù)的代碼。很形象的一句話:運用組件直接采用別人經(jīng)典的功能強大的程序。只不過這程序已被封裝了的。 
        那具體ActiveX組件是如何產(chǎn)生、如何得來的呢?一般由下面三個路徑獲得: 
        1,安裝完IIS服務(wù)器以后,自帶的一些內(nèi)置組件,如Database Access數(shù)據(jù)庫連接組件。 
        2,從第三方開發(fā)者處獲得可選的組件,或者免費或者收費的,如一些上傳組件(當(dāng)然現(xiàn)在有無組件上傳)。 
        3,如果你是一位Web程序開發(fā)者,可以使用Visual Basic 、Java 、Visual C++ 、COBOL等程序設(shè)計語言來編寫你所需要的ActiveX Server Component。這也就是所謂的ASP進行COM(Component Object Model)、COM+開發(fā)了。 
          當(dāng)然無論是第三方還是自行開發(fā),在使用之前都必須要進行系統(tǒng)的注冊。不過這些都是后話。我們現(xiàn)在需要的,是盡快先把ASP自帶的一些組件搞懂吧!〔贿^在使用內(nèi)置組件之前,先用一個程序檢測一下自己機器中的組件支持情況。引用一段網(wǎng)上流行的“阿江ASP探針”,將下列代碼保存為asp文件進行調(diào)試查看。 
        1,objcheck.asp <%Option Explicit %> <% Dim filename 
        filename=Request.ServerVariables("SCRIPT_NAME") 
        Dim ObjTotest(14,4) 
        ObjTotest(0,0) = "MSWC.AdRotator" 
        ObjTotest(0,1) = "廣告輪顯組件" 
        ObjTotest(1,0) = "MSWC.ContentRotator" 
        ObjTotest(1,1) = "內(nèi)容輪顯組件" 
        ObjTotest(2,0) = "MSWC.BrowserType" 
        ObjTotest(2,1) = "瀏覽器類型顯示組件" 
        ObjTotest(3,0) = "MSWC.NextLink" 
        ObjTotest(4,0) = "MSWC.Tools" 
        ObjTotest(5,0) = "MSWC.Status" 
        ObjTotest(6,0) = "MSWC.Counters" 
        ObjTotest(7,0) = "MSWC.IISLog" 
        ObjTotest(8,0) = "MSWC.PermissionChecker" 
        ObjTotest(9,0) = "Microsoft.XMLDom" 
        ObjTotest(10,0) = "IISSample.ContentRotator" 
        ObjTotest(11,0) = "IISSample.PageCounter" 
        ObjTotest(12,0) = "Scripting.FileSystemObject" 
        ObjTotest(13,0) = "adodb.connection" 
        public IsObj,VerObj,TestObj 
        dim i  for i=0 to 13 
               on error resume next 
               IsObj=false 
               VerObj="" 
               TestObj="" 
               set TestObj=server.CreateObject(ObjTotest(i,0)) 
               If IsObject(TestObj) then 
                      IsObj = True 
                      VerObj = TestObj.version 
                      if VerObj="" or isnull(VerObj) then VerObj=TestObj.about 
               end if         ObjTotest(i,2)=IsObj 
               ObjTotest(i,3)=VerObj 
        Next  sub ObjTest(strObj) 
               on error resume next 
               IsObj=false 
               VerObj="" 
               TestObj="" 
               set TestObj=server.CreateObject (strObj) 
               If IsObject(TestObj) then        
                      IsObj = True 
                      VerObj = TestObj.version 
                      if VerObj="" or isnull(VerObj) then VerObj=TestObj.about 
               end if        End sub  %> 
        <title>Object Check</title><table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#cccccc" width=80%> 
               <tr align=center><td width=40%>組 件 名 稱</td><td width=40%>相 關(guān) 信 息</td></tr>       <%For i=0 to 13%> 
               <tr>               <td>&nbsp;<%=ObjTotest(i,0) & "&nbsp;<font color=#888888>" & ObjTotest(i,1)%></font></td> 
                      <td>&nbsp; 
                      <%              If Not ObjTotest(i,2) Then  
                             Response.Write "<font color=red>不支持</font>" 
                      Else                     Response.Write "支持," & left(ObjTotest(i,3),22) 
                      End If%></td>        </tr>        <%next%> </table> 
        <FORM action=<%=filename%> method=post> 
        <input type=text name="classname" size=40> 
        <INPUT type=submit value=" 確 定 "> 
        </FORM> <% Dim strClass 
        strClass = Trim(Request.Form("classname")) 
        If strClass <> "" then 
        Response.Write "<br>您指定的組件的檢查結(jié)果:" 
               Dim Verobj1 
               ObjTest(strClass) 
                 If Not IsObj then  
                      Response.Write "<br><font color=red>很遺憾,該服務(wù)器不支持 " & strclass & " 組件!</font>"           Else              if VerObj="" or isnull(VerObj) then  
                             Verobj1="無法取得該組件版本" 
                      Else                     Verobj1="該組件版本是:" & VerObj 
                      End If              Response.Write "<br><font class=fonts>恭喜!該服務(wù)器支持 " & strclass & " 組件。" & verobj1 & "</font>"          End If  End if %> 
        如果你可以運行該ASP文件,也就是說你擁有IIS的WEB服務(wù)了。既然有IIS,不出意外,我們今天要學(xué)的組件AdRotator相信應(yīng)該也是支持的。 
        P.S.一般微軟自帶的大多是MSWC開頭。 
        廣告輪顯組件AdRotator組件,其功能相當(dāng)于在網(wǎng)站上建立了一個符合廣告領(lǐng)域標(biāo)準(zhǔn)功能的廣告系統(tǒng)。它具有每次訪問ASP頁面時,在頁面上顯示不同的廣告內(nèi)容;跟蹤特定廣告顯示次數(shù)的能力以及跟蹤客戶端在廣告上單擊次數(shù)的能力。 
        AD Rotator 組件的工作原理是通過讀取 AD Rotator 計劃文件來完成的,該文件包括與要顯示圖象文件的地點有關(guān)的信息,以及每個圖象的不同屬性。下面就是一個標(biāo)準(zhǔn)的 AD Rotator 計劃文件。 
        一、類型為txt文本 ,命名為myadrot.txt 
        redirect gourl.asp 
        width 88  height 31 border 1      * 
        http://www.cnbruce.com/images/logo.gif 
        http://www.cnbruce.com/    CN-Bruce    10 
        http://www.it365cn.com/images/logo.gif 
        http://www.it365cn.com     It365cn     10 
        http://www.blueidea.com/images/logo.gif 
        http://www.blueidea.com     Blue!dea   10 
        代碼的前四行包含了廣告的全局設(shè)置: 
        1,Redirect 指出廣告將成為其熱連接的URL。但其并非直接跳轉(zhuǎn)的URL,它包含了兩個參數(shù)的查詢字符串:特定廣告主頁的URL和圖象文件的URL。這些值從而可在gourl.asp文件中進行提取,并且與此同時gourl.asp還可以進行其他的處理工作,比如跟蹤單擊廣告的次數(shù)、跳轉(zhuǎn)到接受的的廣告主頁等。 
        2,width、height、border不用說一看就知道是連接圖片的寬、高以及邊框線大小。 
        “*”號表示了分隔符,以及“*”號下面的每四行為一個單位進行描述每個廣告的細(xì)節(jié)。其中分別代表: 
        1,每個廣告的描述包含圖象文件的URL 
        2,廣告對象的主頁URL(如果廣告客戶沒有主頁,則該行為一個連字符“-”,指出該廣告沒有鏈接) 
        3,圖象的替代文字 
        4,及指定該頁與其他頁交替顯示頻率的數(shù)值。 
        該文件是用戶自創(chuàng)建的文件。它通常用來解析由AdRotator對象發(fā)送的查詢字符串的腳本,并將用戶重定向到與用戶所點擊的廣告所相關(guān)的URL。那具體怎么應(yīng)用該定向文件呢? 
        二、adrotator.asp文件 最主要的是連接myadrot.txt文件,并且執(zhí)行myadrot.txt文件中的信息內(nèi)容。很簡單,兩行代碼。 
        <%set myad=Server.CreateObject("MSWC.adrotator")%> 
        <%=myad.getadvertisement("myadrot.txt")%> 
        “<%set myad=Server.CreateObject("MSWC.adrotator")%>”學(xué)過Server對象,相信還記得該對象強大的一個方法,那就是CreateObject。他可用于創(chuàng)建已經(jīng)注冊到服務(wù)器上的ActiveX組件實例。那這就表示引用組件MSWC.adrotator了。 
        “<%=myad.getadvertisement("myadrot.txt")%>”Ad Rotator組件支持的唯一方法也就是GetAdvertisement了,它只有一個參數(shù):AdRotator計劃文件的名稱。注意指向文件的路徑是當(dāng)前虛擬目錄的相對路徑,物理路徑是不允許的。也就是說當(dāng)前的adrotator.asp和myadrot.txt是在同一目錄下了。然后進行執(zhí)行該ASP文件,多次刷新,會發(fā)現(xiàn)每次的廣告確實是在輪顯著的。這時再注意點擊圖片的超級連接地址。比如: 
        gourl.asp?url=http://www.cnbruce.com/&image=http://www.cnbruce.com/images/logo.gif  很明顯我們還需要建立gourl.asp,并且將url參數(shù)的值進行提取,再接著跳轉(zhuǎn)到該url地址上。 
        三、gourl.asp 該頁主要功能是提取url參數(shù)值,跳轉(zhuǎn)到廣告主頁。代碼如下: 
        <%whaturl=request.querystring("url")%> 
        <%response.redirect whaturl%> 
        功能很簡單就完成。當(dāng)然,剛才也說了,這個頁還可以做其它一些事件:跟蹤客戶端在廣告上單擊次數(shù),比如將接受過來的相同的url地址進行記數(shù)的累加,就能顯示出該網(wǎng)站廣告的點擊次數(shù),然后和相應(yīng)廣告商拿取相應(yīng)的費用什么的……呵呵,在早期都要求需要實際點擊率的,現(xiàn)在好象不管,只要廣告掛那兒就行-_-! 
        不過,總的說來,這個組件的功能就是這樣。你有多個廣告商,并且是按比例單獨顯示,還需要計算實際點擊率的時候,用Ad Rotator組件是最好不過。那也就是說視情況而定了。 
        最后再說下,該組件的實現(xiàn)需要三個文件:重定向文件、引用文件、處理轉(zhuǎn)向文件。 
        Content Rotator組件正如Ad Rotator為廣告輪顯,Content Rotator組件則為內(nèi)容輪顯。 
        該組件就像一個簡化了的Ad Rotator組件,所以其工作原理亦為:通過讀取計劃文件來完成的網(wǎng)頁內(nèi)容的顯示。該計劃文件也就是:內(nèi)容調(diào)度文件(Content Schedule File)。 
        一,類型為txt文本 ,命名為context.txt 
        %% 3 //后面是注釋 

        <color=red>ASP編程入門進階</color> 
        %% 4 //下面顯示表格 
        <table><tr><td>www.cnbruce.com</td></tr></table>  
        %% 5 <A HREF="http://www.cnbruce.com">CN-Bruce</A> 
        該文件的結(jié)構(gòu)比Ad Rotator的調(diào)度文件簡單,僅需提供要使用的各個文本字符串的列表,由前面加兩個百分號(%%)的語句行說明。為了設(shè)置每個條目的比率(決定它出現(xiàn)在返回頁面中的頻率),在雙百分號的后面添加了一個數(shù)字。如果其后跟雙斜杠(//)就表示為添加的注釋。接著就是通過ASP頁面將這些信息按規(guī)定完整顯示。 
        二、showcontext.asp <%  Set MyContent = Server.CreateObject("MSWC.ContentRotator") 
        Content = MyContent.ChooseContent("context.txt")  Response.Write Content %> 
        "Set MyContent = Server.CreateObject("MSWC.ContentRotator")",先建立和Content Rotator組件的聯(lián)系。 
        "Content = MyContent.ChooseContent("context.txt")",表示采用Content Rotator組件的方法:ChooseContent,并且賦值給變量Content,到最后輸出顯示結(jié)果。 
        三、showall.asp以上頁面內(nèi)容個顯示是通過Content Rotator組件的ChooseContent方法實現(xiàn)的。此外,該組件還有一方法:GetAllContent。示例如下: 
        <%  Set MyContent = Server.CreateObject("MSWC.ContentRotator") 
        Content = MyContent.GetAllContent("context.txt") 
        Response.Write Content %> 
        運行結(jié)果會發(fā)現(xiàn)context.txt所有內(nèi)容被解釋執(zhí)行,并且分類之間會自動添加了<hr>水平線。 
        當(dāng)然這個方法可以用在隨機圖片之類的特效頁面上。 

        ASP編程入門進階(十四):Browser & Linking 組件 

        一、Browser Capabilities組件該組件最主要的作用是:提取識別客戶端瀏覽器的版本信息。其原理是這樣的:當(dāng)客戶端瀏覽器向服務(wù)器發(fā)送頁面請求時,同時會自動發(fā)送一個User Agent HTTP標(biāo)題,而該標(biāo)題是一個聲明瀏覽器及其版本的 ASCII 字符串。而Browser Capabilities組件就將User Agent映射到在文件Browscap.ini中所注明的瀏覽器 , 并通過BrowserType對象的屬性來識別客戶瀏覽器。若該對象在 browscap.ini 文件中找不到與該標(biāo)題匹配的項,那么將使用默認(rèn)的瀏覽器屬性。若該對象既未找到匹配項且 browscap.ini 文件中也未指定默認(rèn)的瀏覽器設(shè)置,則它將每個屬性都設(shè)為字符串 "UNKNOWN"。 
         默認(rèn)情況下,browscap.ini文件被存放在 WINDOWS \ SYSTEM \ INERSRV( 如果是95/98+PWS4) 或 NT\SYSTEM32\INERSRV( 如果是 NT) 目錄中,你可以自己編輯這個文本文件,以添加自己的屬性或者根據(jù)最新發(fā)布的瀏覽器版本的更新文件來修改該文件。 
        可以得出結(jié)論,Browser Capabilities組件也就是提取某個文件中的內(nèi)容,然后比較得出顯示。具體該如何應(yīng)用呢? 
        1、btinfo.asp <%set bc=server.CreateObject("mswc.browsertype")%>  
        瀏覽器名稱是browser:<%=bc.browser%><br>   
        瀏覽器版本是version:<%=bc.version%> <br> 
        瀏覽器主版本是majorver:<%=bc.majorver%> <br> 
        瀏覽器輔版本是minorver:<%=bc.minorver%> <br> 
        瀏覽器的運行平臺是platform:<%=bc.platform%> <br> 
        很顯然“<%set bc=server.CreateObject("mswc.browsertype")%> ”就是進行的瀏覽器組件的建立,以下諸如“bc.browser”之類即為顯示瀏覽器的具體某個特性了。 
        2,btif.asp <%set bc=server.CreateObject("mswc.browsertype")%>  
        <%if bc.frames=true then%>   
        瀏覽器支持多窗口(frames)顯示    
        <%else%>  瀏覽器不支持多窗口(frames)顯示    
        <%end if%>  <br>   <%if bc.backgroundsounds=true then%>   
        瀏覽器可以播放背景音樂(backgroundsounds)    
        <%else%>   瀏覽器不能播放背景音樂(backgroundsounds)    
        <%end if%>  <br>  <%if bc.tables=true then%>   
        瀏覽器支持表格(tables)顯示    
        <%else%>   瀏覽器不支持表格(tables)顯示    
        <%end if%>  <br>  <%if bc.beta=true then%>   
        你的瀏覽器是一測試版(beta)   <%else%>  你的瀏覽器是一正式版    
        <%end if%>  <br>  <%if bc.activexcotrols=true then %>   
        瀏覽器支持active控制   <%else%>   
        瀏覽器不支持active控制   <%end if%>  <br>  
        <%if bc.cookies=true then%>    瀏覽器支持cookie功能  <%else%>    
        瀏覽器不支持cookie功能   <%end if%>     <br>  
        <%if bc.vbscript=true then%>     
        瀏覽器支持vbscript  <%else%>   瀏覽器不支持vbscript    
        <%end if%>  <br> <%if bc.jscript=true then%>    瀏覽器支持jscript   
        <%else%>   瀏覽器不支持jscript   <%end if%> 
        該代碼則是檢測當(dāng)前瀏覽器對各類網(wǎng)頁技術(shù)的支持情況,下面就可以根據(jù)某特定情況做相應(yīng)變動。 
        3、fram.asp<%set bc=server.CreateObject("mswc.browsertype") 
          if bc.frames then  %> <frameset rows="*,*">   
        <frame src="http://www.google.com"> 
          <frame src="http://www.baidu.com"> </framest> <%else%> 
        你的瀏覽器不支持框架 <%end if%> 
        很簡單的意思:如果當(dāng)前瀏覽器支持框架則進行frameset的顯示,否則提示“你的瀏覽器不支持框架”,當(dāng)然,需要提醒你的:不要過分依賴該組件,因為其只是提取browscap.ini里的值,而該值隨時可以被客戶修改,或者記錄過時,不能真實反映到瀏覽器的情況,所以要慎用。 
        二、Content Linking組件 曾經(jīng)用DW做網(wǎng)頁都有這樣一個煩惱:新做了頁面,其它所有相關(guān)的頁都要重新再做一次超級鏈接。一次也就罷了,多了多了不禁覺得無用功做了不少。試想如果能有一個專門的文件來負(fù)責(zé)頁面的連接那該多好。Content Linking 組件也就應(yīng)運而生了。它非但可以使你在這些頁面中建立一個目錄表,而且還可以在它們中間建立動態(tài)連接,并自動生成和更新目錄表及先前和后續(xù)的 Web 頁的導(dǎo)航鏈接。 
         使用該組件,首先需要編寫一個目錄文件,也就是網(wǎng)頁網(wǎng)址的順序列表文件,它是一個文本文件,可以自由命名。其次,編寫一個ASP文件,根據(jù)目錄文件提供的信息自動生成帶超鏈的目錄頁。如果需要在每一頁上假如“向前或向后翻頁”的超鏈,就再編寫一個能自動生成翻頁超鏈的包含文件,可使用inc為擴展名,例如"Nlink.inc"。以后,在組內(nèi)每一頁中包含它。 
        1,link.txt文件 redirect.asp?url=http://www.cnbruce.com/       cnbruce.com 
        redirect.asp?url=http://www.blueidea.com/       blueidea.com 
        redirect.asp?url=http://www.it365cn.com/       it365cn.com 
        該目錄文件的網(wǎng)址就是連接網(wǎng)址,文本就是連接文本了,需要注意的是中間采用Tab鍵進行分隔。 
        2,link.asp文件 <%Set objNextLink = Server.CreateObject("MSWC.Nextlink")%> 
        <% intCount = objNextLink.GetListCount("link.txt") 
        For i = 1 To intCount %>  
        <a href="<%=objNextLink.GetNthURL("link.txt", i) %>"> 
        <%=objNextLink.GetNthDescription("link.txt", i) %> 
        </a><br><%Next%> 
        “Set objNextLink = Server.CreateObject("MSWC.Nextlink")”建立Nextlink組件的連接 
        “objNextLink.GetListCount("link.txt")”提取link.txt文件中的列表數(shù)目 
        “objNextLink.GetNthURL("link.txt",i)”提取link.txt文件中第i行文本的連接網(wǎng)址 
        “objNextLink.GetNthDescription("link.txt",i)”提取link.txt文件中第i行文本的連接文本 
        3,redirect.asp文件,就是轉(zhuǎn)向文件。 
        <% Response.Clear  Response.Redirect Request.QueryString("url") %> 
        呵呵,是不是覺得還沒用到“上一頁”、“下一頁”的功能。再來~! 
        4,link1.txt   1.asp       ASP編程入門進階(一)  2.asp       ASP編程入門進階(二) 
        3.asp  ASP編程入門進階(三)  4.asp       ASP編程入門進階 
         主要功能是設(shè)置文本和連接 
        5,link1.inc <%Set Nextlink=Server.CreateObject("MSWC.NextLink") 
        Response.write "當(dāng)前文章索引號為" & NextLink.GetListIndex("link1.txt") & "<br>" 
        Response.write "上一章的標(biāo)題:" & NextLink.GetPreviousDescription("link1.txt") & "<br>" Response.write "下一章的標(biāo)題:" & NextLink.GetNextDescription("link1.txt") & "<br>" count = NextLink.GetListCount("link1.txt") 
        Response.write "<a href="""&NextLink.GetNthUrl("link1.txt",1)&"""&>"&"第一章"&"</a> " Response.write "<a href="""&NextLink.GetPreviousUrl("link1.txt")&"""&>"&"上一章"&"</a> " 
        Response.write "<a href="""&NextLink.GetNextUrl("link1.txt")&"""&>"&"下一章"&"</a> " 
        Response.write "<a href="""&NextLink.GetNthUrl ("link1.txt",count)&"""&>"&"最后一章"&"</a><br>" %> 
        GetListCount(目標(biāo)文件名)       顯示組件中包含的連接的文件數(shù)目。  
        GetListIndex(目標(biāo)文件名)       顯示當(dāng)前頁在這些連接文件中的前后位置索引值。  
        GetNextDescription(目標(biāo)文件名) 顯示連接文件中下一個的描述。  
        GetNextURL(目標(biāo)文件名)         顯示連接文件中的下一個文件的URL地址。  
        GetNthDescription(目標(biāo)文件名, N)   顯示連接文件中第N個網(wǎng)頁的描述。  
        GetNthURL(目標(biāo)文件名, N)       顯示連接文件中第N個網(wǎng)頁的文件URL地址。 
        GetPreviousDescription(目標(biāo)文件名) 顯示連接文件中前一個文件的描述。  
        GetPreviousURL(目標(biāo)文件名)     顯示連接文件中前一個文件的URL地址。 
        6,1.asp,2.asp,3.asp,4.asp 
        <!--#include file="link1.inc"--><br> 
        以下是具體內(nèi)容,這就是一個很簡單的分頁程序了。當(dāng)然接著的后面會有些更詳細(xì)更復(fù)雜的分頁,慢慢來吧,呵呵。 

        ASP編程入門進階(十五):計數(shù)器組件Counters  

        該組件用于創(chuàng)建一個或多個計數(shù)器,這些計數(shù)器用于跟蹤某一網(wǎng)頁或某一網(wǎng)站訪問次數(shù)的信息。你只能創(chuàng)建一個計數(shù)器組件,但該組件可以有多于一個的計數(shù)器。一旦創(chuàng)建了計數(shù)器,它將一直持續(xù)下去直到被刪除為止。計數(shù)器不會在一個事件比如訪問一頁時自動增加。你必須使用Set和Increment方法人工的設(shè)置或增長計數(shù)器。 
            計數(shù)器不受作用域限制。一旦創(chuàng)建了一個計數(shù)器,那么站點上的任何頁都可以檢索和控制它的值。 
        一、Counters.Set & Counters.Get  Counters.Set主要用來設(shè)置記數(shù)初始值,Counters.Get則是用來提取記數(shù)的值。 
        1,counts_set.asp <%  Set Counters=server.createobject("MSWC.Counters") 
        Counters.Set "cnbruce",10 
        Counters.set "it365cn",20 
        Counters.set "blueidea",30 %> 
        共有<%= Counters.Get("cnbruce") %>次訪問 cnbruce.com 網(wǎng)站 <br> 
        共有<%= Counters.Get("it365cn") %>次訪問 it365cn.com 網(wǎng)站 <br> 
        共有<%= Counters.Get("blueidea") %>次訪問 blueidea.com 網(wǎng)站 <br> 
        用法很簡單,首先“Counters=server.createobject("MSWC.Counters")”表示建立了一Counters組件的連接;Counters.Set "cnbruce",10表示記數(shù)了名為“cnbruce”的初始值10;Counters.Get("cnbruce")就表示提取名為“cnbruce”的記數(shù)值了。 
        二、Counters.Increment該方法的功能是:記數(shù)每次加一。在上例中你刷新頁面,記數(shù)是不會添加的,所以現(xiàn)在換用Increment方法。 
        2,counts_inc.asp <% Set Counters=server.createobject("MSWC.Counters") %> 
        共有<%= Counters.Increment("cnbruce") %>次訪問 cnbruce.com 網(wǎng)站 <br> 
        共有<%= Counters.Increment("it365cn") %>次訪問 it365cn.com 網(wǎng)站 <br> 
        共有<%= Counters.Increment("blueidea") %>次訪問 blueidea.com 網(wǎng)站 <br> 
        基本代碼相似,主要就是Counters.Increment的功能累加1。 
        根據(jù)累加可以做個簡單的投票系統(tǒng)了。 
        3,vote.asp <%  set Counters=server.createobject("MSWC.Counters") 
          vote = Request.QueryString("site") 
          Counters.Increment(vote)  %> 
        Vote for your Favorite Site: 
        <FORM NAME="Voting for Sites" METHOD="GET" ACTION="vote.asp"> 
        <input type="RADIO" NAME="site" VALUE="cnbruce">cnbruce 
        <input type="RADIO" NAME="site" VALUE="it365cn">it365cn 
        <input type="RADIO" NAME="site" VALUE="blueidea">blueidea 
        <BR><INPUT TYPE="SUBMIT" VALUE="Submit Vote"> 
        </FORM> Current Vote Tally:<BR> 
        Cnbruce: <% =Counters.Get("cnbruce") %><BR> 
        It365cn: <% = Counters.Get("it365cn") %><BR>  
        Blueidea: <% = Counters.Get("blueidea") %><BR> 
        功能是選擇某單選按鈕后提交,其對應(yīng)的記數(shù)值則Counters.Increment 
        三、Counters.Remove該對象則是起的記數(shù)清空的作用了。 
        4,remove.asp <%  set Counters=server.createobject("MSWC.Counters") 
          vote = Request.QueryString("site") 
          clear = Request.QueryString("clear") 
          Counters.Increment(vote) 
          If Not clear="" Then 
            Counters.Remove("cnbruce") 
            Counters.Remove("it365cn") 
            Counters.Remove("blueidea") 
          End If %>  Vote for your Favorite Site: 
        <FORM NAME="Voting for Sites" METHOD="GET" ACTION="remove.asp"> 
        <input type="RADIO" NAME="site" VALUE="cnbruce">cnbruce 
        <input type="RADIO" NAME="site" VALUE="it365cn">it356cn 
        <input type="RADIO" NAME="site" VALUE="blueidea">blueidea 
        <BR><INPUT TYPE="SUBMIT" VALUE="Submit Vote"> </FORM> 
        Current Vote Tally:<BR> 
        Cnbruce: <% =Counters.Get("cnbruce") %><BR> 
        It365cn: <% = Counters.Get("it365cn") %><BR>  
        Blueidea: <% = Counters.Get("blueidea") %> 
        <FORM NAME="Clear Counters" METHOD="GET" ACTION="remove.asp"> 
        <BR><INPUT TYPE="SUBMIT" VALUE="Clear the Counters" NAME="clear"> </FORM> 
        通過今天的接觸可以總結(jié)出,一個簡單的記數(shù)系統(tǒng)已經(jīng)有兩種方法:使用Application對象、使用Counters組件。但更多的還有采用FSO,或者是需要數(shù)據(jù)庫的就是后話慢慢談了。 
          在我們使用ASP組件時候還要注意一些東西: 
        當(dāng)我們使用服務(wù)器組件創(chuàng)建對象時,一般有兩種方法。比較常用的方法是用SERVER對象的CreateObject() 方法,象這樣: SET NextLink = Server.CreateObject("MSWC.NextLink") 
          這種方法很好用,但是還有一種方法更節(jié)省系統(tǒng)資源。因為當(dāng)你用Server.CreateObject()方法創(chuàng)建對象時,對象立即被加載,同時系統(tǒng)為這個對象分配好內(nèi)存和其它資源。 
          第二種創(chuàng)建對象的方法是利用HTML的<OBJECT>標(biāo)記,語法是這樣的: 
        <OBJECT Runat=Sever ID=NextLink ProgID="MSWC.NextLink" ></OBJECT> 
        利用<OBJECT>標(biāo)記創(chuàng)建對象時,你要創(chuàng)建的對象不被馬上加載,而是等到這個對象的方法或?qū)傩缘谝淮伪灰脮r才加載。這樣,我們就會節(jié)省一些資源。雖然不是很多,但是當(dāng)你的系統(tǒng)每天要承受近百萬次的點擊時,這對節(jié)省服務(wù)器資源就很有幫助了。(Pine譯注)如其所言:我們的Counters則可以放于global.asa中 
        <OBJECT RUNAT=Server SCOPE=Application ID=Counter PROGID="MSWC.Counters"></OBJECT> 

        ASP編程入門進階(十六):FSO組件之驅(qū)動器操作 

        FSO,正如UFO般令人激動、令人神往,當(dāng)然更多的亦是讓人歡喜讓人憂。君不見某空間服務(wù)商廣告:100MB空間只要60RMB/年,支持?jǐn)?shù)據(jù)庫,支持什么什么……一問不支持FSO,立馬泄氣。那FSO究竟是什么東西,它的力量又是如何巨大,其操作的原理又是怎的怎的呢?這次來個徹底的理解。 
            首先,F(xiàn)SO是FileSystemObject的簡稱。當(dāng)然也就是我們的俗稱FSO組件了,該組件可以用來處理驅(qū)動器、文件夾以及文件。它可以檢測并顯示出系統(tǒng)驅(qū)動器的信息分配情況;還能夠創(chuàng)建、改變、移動和刪除文件夾,并能探測一些給定的文件夾是否存在,若存在,還能提取出該文件夾的信息,如名稱、被創(chuàng)建或最后一次修改的日期,等。FSO還使得對文件的處理變得很容易。 
        一、fso.GetDrive   正如其它組件的建立一樣,F(xiàn)SO的引用也必須建立連接。 
        Set fso=Server.CreateObject("Scripting.FileSystemObject") 
        注意CreateObject的內(nèi)部再也不是MSWC了,而是Scripting。 
        那下面就可以通過fso來處理驅(qū)動器了。比如fso.GetDriveName提取驅(qū)動器名,fso.GetDrive同樣提取標(biāo)準(zhǔn)驅(qū)動器名。比如: 
        1,fso.asp  <%Set fso=Server.CreateObject("Scripting.FileSystemObject")%> 
        <%=fso.GetDriveName("d:")%><br> 
        <%=fso.GetDrive("d:")%> 
        你會發(fā)現(xiàn)GetDriveName("d:")就是“d:”,而GetDrive("d:")則為標(biāo)準(zhǔn)的“D:”,所以我們一般這樣寫fso.GetDrive(fso.GetDriveName(drvPath))來提取某個具體的驅(qū)動盤。 
        二、drv.GetInfo 提取該驅(qū)動盤的具體信息。 
        2,drv.asp<%  Set fso=Server.CreateObject("Scripting.FileSystemObject") 
        Set drv=fso.GetDrive(fso.GetDriveName("d:")) %>&n, bsp;
        該盤的空間大小:<%=drv.TotalSize%><br> 
        該盤的剩余空間大小:<%=drv.FreeSpace%> 
        以上只是提取的D盤驅(qū)動器的信息,來個通用的函數(shù),繼續(xù)分別測試自己的驅(qū)動吧。 
        3,drvinfo.asp <%  Function ShowDriveInfo(drvPath) 
           Dim fso, drv, s 
           Set fso = CreateObject("Scripting.FileSystemObject") 
           Set drv = fso.GetDrive(fso.GetDriveName(drvPath)) 
           s = "驅(qū)動盤" & drv & "的卷標(biāo)是:" 
           s = s & drv.VolumeName & "<br>" 
           s = s & "總計空間:" & drv.TotalSize & "<br>" 
           s = s & "剩余空間:" & drv.FreeSpace & "<br>" 
           s = s & "文件類型:" & drv.DriveType & "<br>" 
           s = s & "文件系統(tǒng):" & drv.FileSystem 
           Response.Write s End Function %> <% 
        on error resume next 
        whatpath=request.form("path") 
        if whatpath<>"" then 
        ShowDriveInfo(whatpath) 
        end if%> <form action="drvinfo.asp" method="post"> 
        <input name="path"> <input type="submit"> </form> 
        其中的drv.TotalSize和drv.FreeSpace返回的是字節(jié)數(shù),我們可以用FormatNumber()函數(shù)處理下。比如FormatNumber(Drive.TotalSize/1024,0)得到一眼就知磁盤多少G的值。 
        還有一個文件類型:drv.DriveType最多的時候是顯示數(shù)值“2”,其實“2”就表示的“硬盤驅(qū)動器”,“1”表示“軟盤驅(qū)動器”,“4”表示“光盤驅(qū)動器”……下面就用一個程序遍歷顯示自己機器上所有驅(qū)動器的信息 
        4,showall.asp <% Function tran(Driver) Select Case Driver 
        Case 0: tran="設(shè)備無法識別" Case 1: tran="軟盤驅(qū)動器" Case 2: tran="硬盤驅(qū)動器" Case 3: tran="網(wǎng)絡(luò)硬盤驅(qū)動器" Case 4: tran="光盤驅(qū)動器" Case 5: tran="RAM虛擬磁盤" End Select  End Function 
        set fso=Server.CreateObject("Scripting.FileSystemObject")%> 
        <table border=1 width="100%"><tr> 
        <td>盤符</td> <td>類型</td> <td>卷標(biāo)</td> <td>總計大小</td> <td>可用空間</td> <td>文件系統(tǒng)</td> 
        <td>序列號</td> <td>是否可用</td> <td>路徑</td> </tr> <% 
        on error resume next For each drv in fso.Drives     Response.Write "<tr>" 
            Response.Write "<td>" & drv.DriveLetter & "</td>" 
            Response.write "<td>" & tran(drv.DriveType) & "</td>" 
            Response.write "<td>" & drv.VolumeName & "</td>" 
            Response.write "<td>" & FormatNumber(drv.TotalSize / 1024, 0)& "</td>" 
            Response.write "<td>" & FormatNumber(drv.Availablespace / 1024, 0) & "</td>" 
            Response.write "<td>" & drv.FileSystem & "</td>" 
            Response.write "<td>" & drv.SerialNumber & "</td>" 
            Response.write "<td>" & drv.IsReady & "</td>" 
            Response.write "<td>" & drv.Path & "</td>"   Response.Write "</tr>"Next set fs=nothing %> </table> 
        是不是很神氣?那你可以對自己的機器調(diào)試,然后上傳到自己的空間去調(diào)試,你會發(fā)現(xiàn)服務(wù)商會你進行了些設(shè)置:) 
        當(dāng)然更神的還在后面面,比如對文件夾,對文件的操作(包括添加、修改和刪除)。ps:你對驅(qū)動器是不能輕易添加刪除的:) 

        ASP編程入門進階(十七):FSO組件之文件夾操作  

        操作完驅(qū)動器,接著就是來操作文件夾了。其中包括:提取文件夾信息、創(chuàng)建文件夾、刪除文件夾、復(fù)制文件夾、移動文件夾等。下面就具體來看。 
        一、fso.GetFolder一看就明白,是提取文件夾了。那具體是提取哪個文件夾呢?后面肯定要跟一個文件夾的路徑。提取出來了再來顯示該文件夾相關(guān)信息呢?是不是有要具體提取下去。所以,看程序:1,getfldr.asp <% Set fso = CreateObject("Scripting.FileSystemObject") 
        Set fldr = fso.GetFolder("c:\Program Files") 
        Response.Write "父文件夾名字是:" & fldr & "<br>" 
        If fldr.IsRootFolder = True Then 
           Response.Write "該文件夾是一根文件夾" & "<br>" 
        Else   Response.Write "該文件夾不是根文件夾" & "<br>"  
        End If Response.Write "驅(qū)動器名字是:" & fldr.Drive & "<br>" %> 
        首先建立FSO組件的連接是必不可少的啦,然后Set fldr = fso.GetFolder("c:\Program Files")設(shè)定fldr對象被賦值,以作下面程序的引用。 
        fldr.IsRootFolder即為判斷該文件夾是否為一根文件夾,值為布爾值(true or false);fldr.Drive則顯示該文件夾所在的驅(qū)動器號了。 
        二、fso.CreateFolder 
        下面比較讓人激動的是通過ASP建立文件夾了,你可以在你的權(quán)力范圍內(nèi)任意位置建立任意文件夾。 
        2,creatfldr.asp <% Set fso = CreateObject("Scripting.FileSystemObject") 
        fso.CreateFolder ("c:\cnbruce") 
        Response.Write "文件夾名為" & fso.GetBaseName("c:\cnbruce")%> 
        執(zhí)行程序,應(yīng)該發(fā)現(xiàn)C盤多出了cnbruce文件夾,fso.GetBaseName則是提取文件夾名。 
        三、fso.DeleteFolder 通過ASP可以建立了文件夾,則同樣可以刪除文件夾。 
        3,delfldr.asp <% Set fso = CreateObject("Scripting.FileSystemObject") 
        fso.DeleteFolder("c:\cnbruce") 
        Response.Write "文件夾已刪除"%> 
        發(fā)現(xiàn)剛建立的cnbruce文件夾確實已被刪除。那下面就采用一個通用程序來靈活應(yīng)變下。 
        4,mainflr.asp <% Sub CreateAFolder(file)   Dim fso 
          Set fso = CreateObject("Scripting.FileSystemObject") 
          fso.CreateFolder(file) 
          response.write "已經(jīng)建立了"&file 
        End Sub  Sub DeleteAFolder(file) 
          Dim fso   Set fso = CreateObject("Scripting.FileSystemObject") 
          fso.DeleteFolder(file) 
          response.write "已經(jīng)刪除了"&file 
        End Sub %> <%  subname=request.form("submit") 
        create=request.form("create") 
        del=request.form("del") 
        if subname<>"" then    if create<>"" then 
            call CreateAFolder(""&create&"") 
          end if  if del<>"" then 
            call DeleteAFolder(""&del&"") 
          end if   end if %> 
        <form action="mainflr.asp" method="post"> 
        <input name="create"> 
        <input type="submit" value="建立" name="submit"> 
        </form> <hr> <form action="mainflr.asp" method="post"> 
        <input name="del"> <input type="submit" value="刪除" name="submit"> </form> 
        需要注意的是:刪除并不會提示“確認(rèn)要放入回收站”這項。這點你需要謹(jǐn)慎處理,特別是對你的系統(tǒng)文件夾。 
        四、fso.MoveFolder主要作用是進行文件夾的移動,相當(dāng)于剪切粘貼動作。 
        5,movefldr.asp<% Set fso = CreateObject("Scripting.FileSystemObject") 
        fso.CreateFolder ("c:\cnbruce") 
        fso.MoveFolder "c:\cnbruce", "C:\Program Files\" 
        %> <a href="C:\Program Files\">查看cnbruce文件夾有沒有移動過來</a> 
        格式:fso.MoveFolder "被移動的文件夾","移動到的文件夾" 
        本程序先是在C盤下建立了cnbruce文件夾,然后將其移動到C:\Program Files\文件夾下面。 
        不過同樣需要注意的是你的系統(tǒng)文件夾不能亂移動。 
        五、fso.CopyFolder主要作用:將文件夾從某位置復(fù)制到另一位置。 
        6,copyfldr.asp <% Set fso = CreateObject("Scripting.FileSystemObject") 
        fso.CopyFolder "c:\Program Files\cnbruce", "c:\" %> 
        <a href="C:\">查看cnbruce文件夾有沒有復(fù)制過來</a> 
        該程序是建立在上一movefldr.asp的執(zhí)行結(jié)果基礎(chǔ)之上來完成復(fù)制到C盤根目錄下的。當(dāng)然,其拷貝也是將該文件夾包括里面所以子文件夾和文件統(tǒng)統(tǒng)拷貝。 
        到最后再試著將c:\Program Files\cnbruce和c:\cnbruce兩個文件夾進行刪除掉吧。 
          不過,繼續(xù)提醒你:不要寫錯了,比如寫成c:\Program Files,那你就慘了:這叫玩命,學(xué)ASP玩出心跳出來了。 
            對文件夾的操作差不多了,是不是感到用處比較大?不過還要注意注意正規(guī)合理利用該組件。然后接下來就是更微妙的:FSO對文件的操作。 

        ASP編程入門進階(十八):FSO組件之文件操作(上) 

        FSO中除了可以對驅(qū)動器、文件夾的操作以外,功能最強大的就是對文件的操作了。它可以用來記數(shù)、內(nèi)容管理、搜索還可生成動態(tài)HTML頁面等等。 
        一、fso.OpenTextFile無需多說,fso.OpenTextFile就是打開某個文件了,一般情況之下是打開的txt文本文件。所以首先我們先建立一個txt文件,然后通過FSO來讀取其中的內(nèi)容。 
        1,info.txt   name:cnbruce  sex:male 
        建立了該文件,下面再做個ASP頁面,當(dāng)然最好兩個文件是在同一目錄下。 
        2,opentxt.asp <% whichfile=server.mappath("info.txt") 
        Set fso = CreateObject("Scripting.FileSystemObject") 
        Set txt = fso.OpenTextFile(whichfile,1) 
        rline = txt.ReadLine 
        rline = rline & "<br>" & txt.ReadLine 
        Response.Write rline txt.Close %> 
        需要注意:無論是通過FSO打開驅(qū)動器、打開文件夾、打開文件,以及以后要接觸到的打開數(shù)據(jù)庫,都只能是打開絕對物理路徑地址。但一般情況是上傳到空間服務(wù)商那,不能很直接地了解到自己文件的所在位置,所以強烈推薦使用server.mappath方法:平臺移植性強,適用性強。 
        CreateObject("Scripting.FileSystemObject")建立了FSO組件的連接,fso.OpenTextFile(whichfile,1)打開了info.txt該文件。參數(shù)“1”表示“ForReading:以只讀方式打開文件。不能寫這個文件!保渌有參數(shù)“2”表示“ForWriting:以寫方式打開文件”,參數(shù)“8”表示“ForAppending:打開文件并從文件末尾開始寫”。打開了該文件,接下來是不是要顯示文件中的內(nèi)容?那就通過txt.ReadLine方法讀取文本中的一整行,如果需要繼續(xù)讀取下一行,則繼續(xù)使用txt.ReadLine方法。當(dāng)然初此還有其它的讀取方法,比如txt.Read(7)讀取指定數(shù)量的字符,txt.ReadAll返回文本中的全部內(nèi)容。 
        二、fso.CreateTextFile 如fso.CreateFolder建立文件夾般,fso.CreateTextFile則是建立文件了。 
        3,creattxt.asp <% whichfile=server.mappath("info.txt") 
        Set fso = CreateObject("Scripting.FileSystemObject") 
        Set MyFile = fso.CreateTextFile(whichfile,True) 
        MyFile.WriteLine("My Name Is CN-Bruce") 
        MyFile.WriteLine("My Sex Is Male") 
        MyFile.Close %> <a href="opentxt.asp">查看內(nèi)容</a> 
        本次建立的文件是上一info.txt文件,fso.CreateTextFile(whichfile,True)其中的參數(shù)true即表示能覆蓋已有文件。建立后需要向里面添加數(shù)據(jù)就采用“MyFile.WriteLine”了。 
        那現(xiàn)在就可以建立一個簡單的文本記數(shù)器了,還記得以前的記數(shù)嗎? 
        1,通過application、session、global.asa進行記數(shù); 
        2,通過Counter組件進行記數(shù)。但兩者都有通病,就是不能保存,如果服務(wù)器重新啟動后,是不是所有記數(shù)全部清空了呢:)那現(xiàn)在就可以使用文本來記錄數(shù)據(jù)了,即使重啟,下次提取的也還是該文件。 
        試驗:文本計數(shù)器首先建立一記數(shù)的文本文件counter.txt,設(shè)定初始值為“1” 
        4,counter.txt  1 接著是記數(shù)的ASP文件,功能是顯示文本的記數(shù),本做加1的記數(shù),然后還要將新的記數(shù)寫入文本文件。 
        5,txtcount.asp <% whichfile=server.mappath("counter.txt") 
        ’打開文件并將其值讀取,最后關(guān)閉連接釋放資源 
        set fso=createobject("Scripting.FileSystemObject") 
        set openfile=fso.opentextfile(whichfile,1) 
        visitors=openfile.readline 
        openfile.close ’頁面顯示記數(shù)內(nèi)容并做加1運算 
        response.write "您是本頁的第"&visitors&"位訪客" 
        visitors=visitors+1 ’將新的數(shù)值添加寫入到文本,最后關(guān)閉所有連接釋放資源 
        set creatfile=fso.createtextfile(whichfile) 
        creatfile.writeLine(visitors) creatfile.close set fso=nothing %> 
        那根據(jù)這個可以繼續(xù)地擴展內(nèi)容:比如讓記數(shù)用數(shù)字圖片顯示。當(dāng)然前提就是你需要0-9的10張記數(shù)圖片,并將此圖片放于img文件夾中。下為一增強的txtcount.asp內(nèi)容代碼 
        <% whichfile=server.mappath("counter.txt") 
        set fso=createobject("Scripting.FileSystemObject") 
        set openfile=fso.opentextfile(whichfile,1) 
        visitors=openfile.readline 
        openfile.close 
        CountLen=len(visitors) 
        response.write "您是本頁的第" 
        for i=1 to 6-countLen        ’表示最大值999999 
        response.write "<img src=img/0.gif></img>" 
        next  for i=1 to countlen 
        response.write "<img src=img/" & mid(visitors,i,1) & ".gif></img>" 
        next response.write "位訪客" 
        visitors=visitors+1 
        set creatfile=fso.createtextfile(whichfile) 
        creatfile.writeLine(visitors) 
        creatfile.close   set fso=nothing %> 
        本程序中采用的是mid函數(shù),該函數(shù)的作用是返回某字符串中從第幾位字符開始的幾個字符。格式即為:Mid(string,start,length) 

        ASP編程入門進階(十八):FSO組件之文件操作(中)  

        學(xué)會了FSO提取文件值,也學(xué)會了將信息輸入到文件中,那下面就再來應(yīng)用一下。不知道你有沒有這樣的習(xí)慣:看到一個文件,不自覺的右鍵選擇用記事本打開。呵呵,幾乎沒有哪個文件是不可以的。所以現(xiàn)在,可以默認(rèn)所有文件都是文本,只是后綴名不同而已;那么也就是說,現(xiàn)在可以提取任一文件的內(nèi)容信息。OK,就來想象一下:提取一個文件的路徑(采用file按鈕進行查找定位),將該路徑文件打開,并讀取所有行,顯示讀取的信息 
        一、viewcode.asp <% Function ShowCode(filename)  
            Set fso = Server.CreateObject("Scripting.FileSystemObject") 
            Set cnrs = fso.OpenTextFile(filename, 1) 
            While Not cnrs.AtEndOfStream 
                rsline = cnrs.ReadLine 
                rsline = server.HTMLEncode(rsline) 
                Response.Write(rsline & "<br>") 
            Wend end Function %> 
        <form action="viewcode.asp" method="post"> 
        輸入文件名<input type="file" name="filename"> 
        <input type="submit" value="查看源程序"> 
        </form> <% file=request.form("filename") 
        response.write (file & "源程序如下<hr>") 
        If trim(file)<> "" then    Call ShowCode(file) End If %>  
        以上程序調(diào)試時,可以選擇html,asp頁面,也可以打開任一應(yīng)用程序等。定義的ShowCode函數(shù),主要作用是打開、讀取并顯示文件中所有信息內(nèi)容。注意添加了server.HTMLEncode(rsline),針對含有標(biāo)準(zhǔn)HTML代碼的文件。顯示文件中所有行即用一條件循環(huán)進行遍歷顯示了。 
         While Not cnrs.AtEndOfStream ... Wend 
          接著,下面的這個例題具體就涉及open方法的問題了,還記得?正常情況之下打開文件是采用fso.OpenTextFile("c:\testfile.txt",1),參數(shù)1的作用是:以只讀模式打開文件。不能對此文件進行寫操作。如果現(xiàn)在已經(jīng)存在一文件,需要進行追加寫入,則該怎么辦呢?簡單,參數(shù)為8即可。 
          這有什么用呢?呵呵,亞瑪遜的網(wǎng)絡(luò)故事接龍就是如此:能接龍就需要首先要顯示原有故事,然后自己添加故事寫入文件。這其中的寫入文件最講究的就是追加寫入了。所以下面就可以實現(xiàn)。story.asp 
         <% If not request.Form("NextLine")="" then 
          Set fso=Server.CreateObject("Scripting.FileSystemobject") 
          textfile1=Server.MapPath("story.txt") 
          set cnrs=fso.OpenTextFile(textfile1,8) 
          cnrs.WriteLine(Request.Form("NextLine"))  cnrs.Close end if %> 
        故事如下: <% Set fso=Server.CreateObject("Scripting.FileSystemObject") 
        textfile1=Server.MapPath("story.txt") 
        set cnrs=fso.OpenTextFile(textfile1,1) 
        while not cnrs.AtEndOfStream 
          Response.Write "&nbsp;" & cnrs.ReadLine 
        Wend cnrs.close %> <hr> 
        <form method="post" action="story.asp"> 
        請輸入這個故事的新行:<input name="NextLine" type="text" size="70"> 
        <input type="submit" value="提交"> </form>  
        整個就是一很簡單的讀取信息和加入信息的混合利用,相信有了前面的基礎(chǔ)看懂應(yīng)該不成問題。當(dāng)然還缺少個story.txt文件,里面寫好故事開頭就可以了。再下面,繼續(xù)來,該側(cè)重點主要就是練習(xí)一些函數(shù)的使用技巧了。 
        1、instr函數(shù):返回某字符串在另一字符串中第一次出現(xiàn)的位置。 
        比如現(xiàn)在查找字母“A”在字符串“A110B121C119D1861”中第一次出現(xiàn)的位置,則可以 

        同樣字母“B”的位置也就能確定,F(xiàn)在就來最關(guān)鍵的:提前字母“A”和“B”中間的值“110”。還記得mid函數(shù)嗎?mid函數(shù)的主要作用是:從字符串中返回指定數(shù)目的字符。比如現(xiàn)在的“110”則應(yīng)該是從字符串的第2位取得3個單位的值。 

        但設(shè)想一下:如果不是“110”,而是“1100”,那是不是要提取4位……這樣就顯出程序的不夠完美。所以繼續(xù)思考:所提取的值,永遠是在字母“A”后面的,且值也永遠是在字母“A”和“B”之間的,那么只要分別提取出“A”、“B”的位置,則中間數(shù)值的起始位應(yīng)是字母“A”位+1,中間數(shù)值的長度應(yīng)是字母“B”位-字母“A”位-1那么現(xiàn)在就可以讓程序完美起來: 

        OK,那么現(xiàn)在你也就完全可以把字母“B”、“C”、“D”后面的值一一提取了。 
        當(dāng)然需要注意的就是“D”后面有幾位怎么取呢?采用字符串總長度-字母D所在位置數(shù)就可以了。 
        <script language=vbs> 
        my_string = "A110B121C119D1861" 
        a_num = instr(my_string,"A") 
        b_num = instr(my_string,"B") 
        c_num = instr(my_string,"C") 
        d_num = instr(my_string,"D") 
        total_num = len(my_string) 
        a_value = mid(my_string,a_num+1,b_num-a_num-1) 
        b_value = mid(my_string,b_num+1,c_num-b_num-1) 
        c_value = mid(my_string,c_num+1,d_num-c_num-1) 
        d_value = mid(my_string,d_num+1,total_num-d_num) 
        alert(a_value) alert(b_value) alert(c_value) alert(d_value) </script> 
        到現(xiàn)在,你也許確實學(xué)到了不少,但也許會提出疑問:這個放在FSO文件操作里有什么作用呢?那下面才是我們的正題:用FSO進行簡單的文本投票。 
          投票頁面首要的就是顯示各類項目的投票數(shù),并相應(yīng)賦于某個變量。然后判斷本次投票的選相,相對應(yīng)地將投票數(shù)值加1,完畢后再將所有值繼續(xù)寫入文本。 
        1,一個HTML表單頁website.html 以做投票點擊的平臺。 

        2,接受表單頁值的result.asp 
        <% whichfile=server.mappath("site.txt") 
        set fso=createobject("Scripting.FileSystemObject") 
        set thisfile=fso.opentextfile(whichfile) 
        my_string=thisfile.readline 
        a_num = instr(my_string,"A") 
        b_num = instr(my_string,"B") 
        c_num = instr(my_string,"C") 
        d_num = instr(my_string,"D") 
        total_num = len(my_string) 
        a_value = mid(my_string,a_num+1,b_num-a_num-1) 
        b_value = mid(my_string,b_num+1,c_num-b_num-1) 
        c_value = mid(my_string,c_num+1,d_num-c_num-1) 
        d_value = mid(my_string,d_num+1,total_num-d_num) 
        select case request.form("website") 
            case "A": a_value=a_value+1 
            case "B": b_value=b_value+1 
            case "C": c_value=c_value+1 
            case "D": d_value=d_value+1 
        end select 
        mynew_string="A" & cstr(a_value) & "B" & cstr(b_value) & "C" & cstr(c_value) & "D" & cstr(d_value) 
        set newfile=fso.createtextfile(whichfile) 
        newfile.writeLine(mynew_string) 
        newfile.close  set fso=nothing 
        %> 當(dāng)前投票:<br>  cnbruce.com:<%=a_value%><br> 
        blueidea.com:<%=b_value%><br> 
        it356cn.com:<%=c_value%><br> 
        5d.cn:<%=d_value%><br>  <a href="website.html">返回繼續(xù)</a> 
        有了上面函數(shù)的基礎(chǔ),看這個應(yīng)該不是很難的 
        3,最后不要忘了的記數(shù)文件site.txt 
        格式:A1B1C1D1 OK,三個文件就可以勝任一個很簡單的投票系統(tǒng)了,如果要加強,需要細(xì)化的則結(jié)合以前的知識吧,比如投過一次后設(shè)置session或者cookies,當(dāng)再次投票時候判斷如果session或者cookies存在則不允許,也就是簡單的投票防作假手段了……當(dāng)然更多的還是要自己去想去實踐了。 

        ASP編程入門進階(十八):FSO組件之文件操作(下)  

        一,fso.GetFile 提取文件相應(yīng)的 File 對象 
        1,getfile.asp <%  whichfile=Server.MapPath("cnbruce.txt") 
        Set fso = CreateObject("Scripting.FileSystemObject") 
        Set f1 = fso.CreateTextFile(whichfile,true) 
        f1.Write ("This is a test.My Name is cnbruce.") 
        f1.Close  Set f2 = fso.GetFile(whichfile) 
        s = "文件名稱:" & f2.name & "<br>" 
        s = s & "文件短路徑名:" & f2.shortPath & "<br>" 
        s = s & "文件物理地址:" & f2.Path & "<br>" 
        s = s & "文件屬性:" & f2.Attributes & "<br>" 
        s = s & "文件大。 " & f2.size & "<br>" 
        s = s & "文件類型: " & f2.type & "<br>" 
        s = s & "文件創(chuàng)建時間: " & f2.DateCreated & "<br>" 
        s = s & "最近訪問時間: " & f2.DateLastAccessed & "<br>" 
        s = s & "最近修改時間: " & f2.DateLastModified  response.write(s) %> 
        其效果正如右鍵某文件,看到的具體屬性信息。 
        其中Attributes返回的數(shù)值“32”表示:(Archive)上次備份后已更改的文件?勺x寫。 
        其它值附錄如下:  
        Normal        0      普通文件。               沒有設(shè)置任何屬性。  
        ReadOnly      1      只讀文件。               可讀寫。  
        Hidden        2      隱藏文件。               可讀寫。  
        System        4      系統(tǒng)文件。               可讀寫。  
        Directory     16     文件夾或目錄。           只讀。  
        Archive       32     上次備份后已更改的文件。 可讀寫。  
        Alias         1024   鏈接或快捷方式。         只讀。  
        Compressed    2048   壓縮文件。               只讀。  
        二,file.move文件將指定的文件或文件夾從某位置移動到另一位置。其實該方法仍然屬于fso.GetFile后的一個應(yīng)用。 
        2,movefile.asp <%  whichfile=Server.MapPath("cnbruce.txt") 
        Set fso = CreateObject("Scripting.FileSystemObject") 
        Set f1 = fso.CreateTextFile(whichfile,true) 
        f1.Write ("This is a test.My Name is cnbruce.") 
        f1.Close  Set f2 = fso.GetFile(whichfile) 
        f2.Move "C:\" 
        %> <a href="C:\">查看下有沒有</a> 
        簡單的剪切粘貼的功能實現(xiàn)。 
        三,F(xiàn)ile.Copy 同樣屬于fso.GetFile后的一個應(yīng)用。就只是單純地拷貝文件到某位置。 
        3,copyfile.asp <% 
        whichfile=Server.MapPath("cnbruce.txt") 
        Set fso = CreateObject("Scripting.FileSystemObject") 
        Set f1 = fso.CreateTextFile(whichfile,true) 
        f1.Write ("This is a test.My Name is cnbruce.") 
        f1.Close Set f2 = fso.GetFile(whichfile) 
        f2.Copy "D:\" 
        %> <a href="D:\">查看下有沒有</a> 
        和本ASP頁面同在目錄下的cnbruce.txt文件依然存在。 
        四,file.Delete很顯然,就是直接刪除文件了。 
        4,delfile.asp <% whichfile=Server.MapPath("cnbruce.txt") 
        Set fso = CreateObject("Scripting.FileSystemObject") 
        Set f1 = fso.CreateTextFile(whichfile,true) 
        f1.Write ("This is a test.My Name is cnbruce.") 
        f1.Close Set f2 = fso.GetFile(whichfile) 
        f2.move "d:\"  Set f3 = fso.GetFile("d:\cnbruce.txt") 
        f3.delete  %> <a href="d:\">查看下是沒有該文件的</a> 
        當(dāng)然FSO還沒有結(jié)束,比如上傳文件,ASP轉(zhuǎn)HTML等都需要用到FSO。更精彩的依然是在后面。 

        ASP編程入門進階(十九):ASP技巧累加(二) 
          
        嚴(yán)格控制Session可以將不需要Session的內(nèi)容(比如幫助畫面,訪問者區(qū)域,等等)移動到關(guān)閉Session的獨立ASP應(yīng)用程序中。在基礎(chǔ)頁面上,可以給ASP一個指示,讓它不需要使用Session。將下面的代碼直接加入到ASP頁面的頭部:<%@EnableSessionState=False%> 
        在Web服務(wù)器上緩存經(jīng)常使用的數(shù)據(jù) 典型的情況是:ASP頁面從后臺存儲中取回數(shù)據(jù),然后以超文本標(biāo)記語言(HTML)的形式形成結(jié)果。不管數(shù)據(jù)庫的速度如何,從內(nèi)存中取回數(shù)據(jù)要比從后臺存儲設(shè)備中快得多。從本地硬盤讀取數(shù)據(jù)通常也非?臁K,提高性能可以通過緩存服務(wù)器上的數(shù)據(jù)來實現(xiàn),無論是將數(shù)據(jù)緩存在內(nèi)存中,或者本地硬盤中。緩存是經(jīng)典的“空間換時間”的折中方式。如果緩存得恰當(dāng),就可以看到顯著的性能提升。為了讓緩存有效,必須保證緩存數(shù)據(jù)是經(jīng)常要重用的,而且也是計算起來繁瑣的。裝滿陳舊數(shù)據(jù)的緩存是對內(nèi)存的浪費。 
          不經(jīng)常改變的數(shù)據(jù)是緩存的較好對象,因為不需要隨時考慮這些數(shù)據(jù)更新后的同步操作。組合框、參考表格、DHTML代碼、擴展標(biāo)記語言串、菜單以及站點配置變量(包括數(shù)據(jù)源名字,Internet協(xié)議地址IP以及Web路徑)都是很好的緩存對象。注意:要緩存數(shù)據(jù)表達式而不是數(shù)據(jù)本身。如果一個ASP頁面經(jīng)常變化并且很費力去緩存(比如整個產(chǎn)品目錄),就要考慮預(yù)產(chǎn)生HTML,而不是每次發(fā)生請求時再描述它。 
        在Application或Session對象中緩存經(jīng)常使用的數(shù)據(jù)ASP中的Application和Session對象是在內(nèi)存中緩存數(shù)據(jù)的便利容器。你可以將數(shù)據(jù)賦值給Application和Session對象,這些數(shù)據(jù)在HTTP調(diào)用期間將一直保持在內(nèi)存中。Session中的數(shù)據(jù)是為每一個用戶服務(wù)的,Application中的數(shù)據(jù)是所有用戶共享的。 
          何時需要在Application和Session中裝入數(shù)據(jù)?通常,當(dāng)應(yīng)用程序啟動或者會話開始時,數(shù)據(jù)就被裝入了。為了在這時裝入數(shù)據(jù),在Application OnStart()或者Session OnStart()中分別添加適當(dāng)?shù)拇a。這些函數(shù)位于文件Global.asa中,如果原來不存在,就添加上。也可以在數(shù)據(jù)首次需要的時候調(diào)入,在ASP頁面中添加代碼,檢查數(shù)據(jù)是否存在,如果沒有發(fā)現(xiàn),就調(diào)入它。這里有一個例子,它代表了被稱為“l(fā)azy evalution”的經(jīng)典性能處理技術(shù):直到需要,再去計算。  
        拷貝經(jīng)常使用的數(shù)據(jù)到腳本變量中在ASP中存取COM對象時,應(yīng)該拷貝經(jīng)常使用的對象數(shù)據(jù)到腳本變量中,這樣就減少了對COM對象的方法調(diào)用。這些調(diào)用要比存取腳本變量相對來說費時費力。當(dāng)存取Collection和Dictionary對象時,使用這項技巧也減少了昂貴的查找操作。通常,如果要不止一次地存取對象數(shù)據(jù),就應(yīng)將數(shù)據(jù)放入腳本變量中,對象數(shù)據(jù)主要也就是Request變量(表單和查詢字符串變量)。比如,站點要傳遞一個叫做UserID的查詢字符串變量,假設(shè)它將在一個特殊頁面被引用12次,那么不需要調(diào)用Request("UserID")12次,只要在ASP頁面的頭部分配給UserID一個變量,然后在頁面中使用它,這樣做就節(jié)省了11次COM方法的調(diào)用。 
        在任何可能時使用Server.Transfer,而不要用Response.Redirect 
        Response.Redirect告訴瀏覽器請求另一個不同的頁面,這常常用于引導(dǎo)用戶到登錄頁面或者出錯處理頁面。由于重定向強迫了一個新頁面請求,結(jié)果是瀏覽器必須要與Web服務(wù)器循環(huán)2次,并且Web服務(wù)器必須處理一個額外的請求。Server.Transfer執(zhí)行在同一服務(wù)器上的頁面?zhèn)鬏敚@將避免額外的瀏覽器-Web服務(wù)器的數(shù)據(jù)循環(huán),形成良好的系統(tǒng)性能,對于用戶也有較好的響應(yīng)時間。當(dāng)然Server.Transfer只支持相對路徑(即站內(nèi)使用)。 

        ASP編程入門進階(二十):ADO組件之顯示數(shù)據(jù)記錄  

        學(xué)習(xí)ASP的萬里長征就快到終點了:等把ASP的ADO組件搞定。當(dāng)然這也是最重要的一步,幾乎前面所有的學(xué)習(xí)都是為了這個最終的目的。OK,下面就來詳細(xì)系統(tǒng)地來一一掌握,步步為營,各個擊破。 
        一,擁有數(shù)據(jù)庫可以這么說:靜態(tài)頁面和動態(tài)頁面最大的區(qū)別就是采用了數(shù)據(jù)庫。其中運用操作數(shù)據(jù)庫主要是對數(shù)據(jù)庫內(nèi)容進行:顯示、插入、修改、更新、查詢和刪除。這些方法當(dāng)然也不是一口就能吃出來的,要慢慢感受咀嚼、理解消化。當(dāng)然首先很重要的便是先擁有數(shù)據(jù)庫了。 
         一般而言,我們所說的數(shù)據(jù)庫其實就是一個數(shù)據(jù)庫文件,該文件是由一些數(shù)據(jù)庫管理系統(tǒng)(DBMS)建立生成的。目前一般的DBMS也就是常用常聽說的ACCESS,SQLSERVER,MYSQL,ORACLE。當(dāng)然一般個人站點,小型企業(yè)采用ACCESS完全足夠;稍微大些的就采用同樣是Microsoft公司的SQL SERVER或者是MYSQL,值得注意的是MYSQL一般是和另外一種網(wǎng)絡(luò)編程語言PHP完美結(jié)合的。當(dāng)然更大型的就采用ORACLE了。呵呵,曾經(jīng)在學(xué)習(xí)PB時還運用到SYBASE數(shù)據(jù)庫,UNIX系統(tǒng)的Informix數(shù)據(jù)庫……DBMS簡直是多如牛毛-_-!話說過來,目前我們就直接使用ACCESS了:1,使用簡單;2,入門掌握容易;3,實在沒有比這個更適合初學(xué)的了。一切還得從實際操作開始。 
        1、打開ACCESS數(shù)據(jù)庫,選擇新建數(shù)據(jù)庫,將其命名為cnbruce.mdb,并保存到一專門文件夾database中   
        2、在新建的數(shù)據(jù)庫容器中雙擊“使用設(shè)計器創(chuàng)建表”,彈出的表1窗口中字段名稱輸入“cn_id”,數(shù)據(jù)類型選擇“自動編號”,并選擇上方工具欄中的鑰匙按鈕,將該字段設(shè)為主鍵。繼續(xù)輸入字段“cn_title”,數(shù)據(jù)類型選擇“文本”;NEXT輸入字段“cn_content”,數(shù)據(jù)類型選擇“備注”; 
        PS:備注和一般類型文本最大的區(qū)別就是備注允許插入的字段值相對要多些,這在插入一些較長文章的時候尤其重要。 
          仍然輸入字段“cn_author”,數(shù)據(jù)類型選擇“文本”;并且切換到下面“常規(guī)”中的“允許空字符串”選擇“是”。 
        PS:這表面允許cn_author字段的值可以是空的,這在當(dāng)提交表單,某些信息不填寫但要正確插入數(shù)據(jù)庫時,顯得很重要。 
        最后輸入字段“cn_time”,數(shù)據(jù)類型選擇“日期/時間”,繼續(xù)切換到“常規(guī)”中的“默認(rèn)值”輸入“now()”函數(shù),末了,我們將“表1”另存為“cnartile” 

        3,雙擊打開cnartile表,填寫第一行:“cn_title”輸入“test”,“cn_content”輸入“this is a test”,“cn_author”輸入“cnbruce”,時間已經(jīng)自動添加。完成!關(guān)閉表,關(guān)閉數(shù)據(jù)庫。 

        二,建立數(shù)據(jù)庫連接OK,數(shù)據(jù)庫已經(jīng)建立完畢,并且已經(jīng)填寫了一行信息內(nèi)容。那么現(xiàn)在需要的就是同過ASP將該行信息顯示出來。要想顯示,首先還是需要ASP與該數(shù)據(jù)庫文件建立連接,具體怎么建立?往下看。 
        1,conn.asp:主要起的是連接并打開某數(shù)據(jù)庫文件的功能。該文件建議單獨存在,并且位置是和存放數(shù)據(jù)庫的文件夾database處與同一物理層次。 
        <%  db_path = "database/cnbruce.mdb" 
        Set conn= Server.CreateObject("ADODB.Connection") 
        connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path)  conn.Open connstr %>  
        db_path = "database/cnbruce.mdb",不用說,就是將數(shù)據(jù)庫的相對路徑賦到一個變量上,以方便下面繼續(xù)調(diào)用。 
        Set conn= Server.CreateObject("ADODB.Connection"),和其它建立組件一樣,建立了一個ADO連接,并用一對象conn來接受。 
        connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path),很顯然就是連接字符串了,其包括打開數(shù)據(jù)庫的驅(qū)動方法OLEDB,和打開和哪個數(shù)據(jù)庫的連接(即數(shù)據(jù)庫的路徑)。 
        需要再次提醒的是:無論是FSO對文件、文件夾的操作還是ADO對數(shù)據(jù)庫的操作,對被操作文件的取得都是獲得的絕對的物理地址,一般情況之下,采用Server.MapPath方法相對較好。 
        conn.Open connstr最后對象conn通過連接字符串connstr打開了數(shù)據(jù)庫的連接。 
        三,顯示數(shù)據(jù)庫內(nèi)容 建立了數(shù)據(jù)庫,建立了和數(shù)據(jù)庫的連接,下面水到渠成地就是將數(shù)據(jù)庫中的內(nèi)容通過ASP顯示出來。 
        2,showit.asp <!--#include file="conn.asp" --> 
        <% Set rs = Server.CreateObject ("ADODB.Recordset") 
        sql = "Select * from cnarticle" 
        rs.Open sql,conn,1,1 %> <% 
        if rs.EOF and rs.BOF then 
           response.write ("暫時還沒有文章") 
        else   Do Until rs.EOF 
              response.write("文章標(biāo)題是:"& rs("cn_title")) 
              response.write("<br>文章作者是:"& rs("cn_author")) 
              response.write("<br>文章加入時間是:"& rs("cn_time")) 
              response.write("<br>文章內(nèi)容是:"& rs("cn_content")) 
              response.write("<hr>")      rs.MoveNext   Loop end if %> <% 
        rs.close  Set rs = Nothing conn.close  set conn=Nothing %> 
        簡單調(diào)試本頁,不出任何意外,相信一定能將數(shù)據(jù)庫中的信息顯示出來了。  下面就來具體一個一個解釋來理解沒行的含義: 
        1,<!--#include file="conn.asp" --> 沒有任何爭議,主要是調(diào)用conn.asp的所起的功效,這在解釋conn.asp文件的時候已經(jīng)明白。 
        2,Set rs = Server.CreateObject ("ADODB.Recordset") ADO組件除了Connection連接以外,還有Recordset綁定記錄集(相信用過DW做ASP的人現(xiàn)在開始有些重回故里的感覺了)當(dāng)然 rs 可以形象地想象成數(shù)據(jù)庫表中的某一行。 
        3,sql = "Select * from cnarticle" 標(biāo)準(zhǔn)的SQL結(jié)構(gòu)化查詢語言。很簡單:建立了數(shù)據(jù)庫連接,也綁定了記錄集,那具體需要哪些信息呢?也就是要篩選一些記錄集合了,不過當(dāng)前采用的是無任何條件,即可以提取所有。 
        4,rs.Open sql,conn,1,1 真正地打開通向數(shù)據(jù)庫中記錄集的大門,具體有關(guān)后面的參數(shù)可以從如下網(wǎng)址中獲得。 
        5,if rs.EOF and rs.BOF then 該語句里面涉及到了rs.EOF 和 rs.BOF 以及兩者的邏輯運算 and 。rs.EOF 表示到達數(shù)據(jù)庫表中的最后一行,rs.BOF 表示到達數(shù)據(jù)庫表中的第一行。整個語句可以理解為,如果當(dāng)前數(shù)據(jù)庫中的最后一行就是數(shù)據(jù)庫表中第一行,那么可以肯定:當(dāng)前數(shù)據(jù)庫表中沒有任何數(shù)據(jù)。 
        6,Do Until rs.EOF ...  
        rs.MoveNext  Loop 
        主要就是一個DO LOOP 循環(huán)語句了,其中循環(huán)的結(jié)束條件為:直到rs.EOF,即值得數(shù)據(jù)庫表的最后一行。那么在這些條件滿足的許可之內(nèi),就是來顯示具體的信息了。 
        每次循環(huán)只能顯示數(shù)據(jù)庫表中的一行,如果要繼續(xù)讀取下行,那么 rs.MoveNext 功能真是如此。 
        7,rs("cn_title")等等 主要就是具體顯示記錄集中的哪個特定字段的信息值了。很是簡單。 
        8,最后不要忘了釋放資源空間關(guān)閉記錄集連接,關(guān)閉數(shù)據(jù)庫連接。 
        四一些特殊條件 有沒有注意到,數(shù)據(jù)庫表信息的顯示一般是按照時間的先后排列的,也就經(jīng)常提到的按時間的升序排列。需要注意:按時間升序,并不一定每個數(shù)據(jù)庫表中都要有一個時間/日期類型的字段,只要存在一個自動編號的字段就可以了。因為該字段是永不重復(fù),并且是依次增大的。因此,按時間升序其實就是按自動編號中號碼數(shù)值的增加來進行排序的。 
        當(dāng)然,問題的關(guān)鍵來了,那就是要按照時間的降序排列,即始終從最新的內(nèi)容開始顯示。那具體需要哪些手術(shù)呢?很簡單,將連接字符串稍做修改。 
        由 sql = "Select * from cnarticle" 添加修改為 
        sql = "Select * from cnarticle order by cn_id desc"  
        其中 order by cn_id 即通過cn_id字段,desc 即降序了。 
        2,有是時候,只需要提取最前或者最新的幾條信息,那這個又具體如何操作呢?同樣還是連接字符串的修改由 sql = "Select * from cnarticle order by cn_id desc" 添加修改為 
        sql = "Select top 3 * from cnarticle order by cn_id desc"  
        其中 top 3 就表示提取最新的三條信息內(nèi)容了。 
         That’s All. 現(xiàn)在一個文章系統(tǒng)、新聞系統(tǒng)或者留言本顯示部分的精華內(nèi)容你已不費吹灰之力搞定。留下你的是:文章的格式可能顯示不對勁,比如回車、空格都不顯示了,那么你就還要學(xué)會處理接受的數(shù)據(jù)庫表的值(在ASP的幾個練習(xí)中提到的);文章不能老是打開數(shù)據(jù)庫輸入信息啊,那么你就要繼續(xù)學(xué)會如何用ASP插入數(shù)據(jù)到庫表;再有就是文章多了,一個頁面看是不是很麻煩?那么你還要學(xué)會分頁技術(shù)…… 
        要搞的太多了,后面我會詳細(xì)道來:) 

        ASP編程入門進階(二十):ADO組件之插入數(shù)據(jù)記錄 

        簡單的顯示記錄已經(jīng)掌握,現(xiàn)在需要的就是通過ASP將信息內(nèi)容插入到數(shù)據(jù)庫中。 
        一、擁有數(shù)據(jù)庫cnbruce.mdb 
        本數(shù)據(jù)庫的作用就是用來被插入數(shù)據(jù)的,可以直接采用上節(jié)中已經(jīng)建立的cnbruce.mdb文件,當(dāng)然連接打開數(shù)據(jù)庫的文件conn.asp也就順利引用了。 
        二、建立輸入插入信息的頁面平臺addit.html 
        本頁的主要作用是:顯示一些文本輸入框以用來提供輸入信息內(nèi)容提交數(shù)據(jù)庫。 
        1,addit.html 

        本頁其實很簡單,就是通過submit按鈕將表單的信息內(nèi)容提交到addit.asp頁面去處理。 
        三、建立處理接受數(shù)據(jù)并插入數(shù)據(jù)庫表的頁面程序addit.asp 
        2,addit.asp <!--#include file="conn.asp" --> <% 
        whattitle=request.form("title") 
        whoauthor=request.form("author") 
        whatcontent=request.form("content") %> <% 
        Set rs = Server.CreateObject ("ADODB.Recordset") 
        sql = "Select * from cnarticle" 
        rs.Open sql,conn,3,2 %> <% rs.addnew 
        rs("cn_title")=whattitle rs("cn_author")=whoauthor rs("cn_content")=whatcontent 
        rs.update %> 文章添加成功,<a href="showit.asp">瀏覽</a> <% rs.close  
        Set rs = Nothing conn.close  set conn=Nothing %>恩,接著就是來具體分析一下。 
        1,<!--#include file="conn.asp" --> 不用說,凡是要和數(shù)據(jù)庫有聯(lián)系的都要運用到該連接文件。 
        2,whattitle=request.form("title")之類 就是將上頁表單中接受過來的值賦到一變量上,方便下面程序的調(diào)用。 
        3,rs.Open sql,conn,3,2 注意參數(shù)和顯示數(shù)據(jù)庫時采用的參數(shù)的不同。 
        4,rs.addnew 很簡單也很顯眼的一個聲明:新建一個數(shù)據(jù)庫記錄集行。 
        5,rs("cn_title")=whattitle之類 即將接受的表單值對應(yīng)到相關(guān)字段中。 
        6,rs.update 只是值和數(shù)據(jù)庫字段的對應(yīng),完了后還要將對應(yīng)的值上傳提交到數(shù)據(jù)庫表中去。 
        7,插入后可以跳轉(zhuǎn)到showit.asp查看 需要說明,以后的ASP例題可能都是建立在前幾節(jié)內(nèi)容的基礎(chǔ)之上完成的。 
        8,釋放資源 是規(guī)矩,不要忘記。 
          那么,現(xiàn)在插入并顯示數(shù)據(jù)庫記錄,對你來說完全是小菜一碟了。大體框架搭建完畢,下面就是具體的細(xì)化了。其中包括:客戶端的表單檢測,防止用戶信息輸入的遺漏;當(dāng)然最好還是要加上服務(wù)器端的表單檢測,由于客戶端的某些原因(比如自行設(shè)計提交非檢測的頁面)基于安全考慮,一切還是依服務(wù)器端所接受信息為準(zhǔn)。那下面就繼續(xù)細(xì)化應(yīng)用下了。 
        1,客戶端檢測 其實就是通過簡單的腳本檢測,這在初學(xué)ASP提到腳本的時候說到,下面將再次重復(fù)。加強的addit.html 
        <script laguage="javascript"> 
        <!-- function form1_onsubmit() 
        { if (document.form1.title.value=="") 
            {       alert("請輸入文章標(biāo)題") 
              document.form1.title.focus() 
              return false      } 
        else if(document.form1.content.value=="") 
            {        alert("請輸入文章內(nèi)容") 
              document.form1.content.focus() 
              return false     } } --> </script> 
        <form action="addit.asp" method="post" name="form1" onsubmit="return form1_onsubmit()"> 
        Title:<input type="text" name="title"><br> 
        Author:<input type="text" name="author"><br> 
        Content:<br> 
        <textarea name="content" rows="8" cols="30"></textarea><br> 
        <input type="submit" value="Add"> 
        <input type="reset" value="Reset"> 
        </form> 
        2,服務(wù)器端檢測 有人也許會問,既然有了客戶端的檢測,那還有多個服務(wù)器端的檢測呢?原因很簡單,比如仿照HTML表單提交頁,自行設(shè)計一張去除了表單檢測的頁面。當(dāng)點擊提交,并且沒有任何信息時,到達服務(wù)器端如沒有任何防御則肯定會造成數(shù)據(jù)插入的失敗。 
        加強的addit.asp <!--#include file="conn.asp" -->  
        <% whattitle=trim(request.form("title")) 
        whoauthor=trim(request.form("author")) 
        whatcontent=trim(request.form("content")) %>  
        <%if whattitle="" then%> 
        <script language=vbs> 
        alert("請輸入文章標(biāo)題") 
        history.go(-1)</script> <%end if%> 
        <%if whatcontent="" then%> 
        <script language=vbs> 
        alert("請輸入文章標(biāo)題") 
        history.go(-1) </script> <%end if%> <% 
        Set rs = Server.CreateObject ("ADODB.Recordset") 
        sql = "Select * from cnarticle" 
        rs.Open sql,conn,3,2 %>  <% 
        rs.addnew 
        rs("cn_title")=whattitle 
        rs("cn_author")=whoauthor 
        rs("cn_content")=whatcontent 
        rs.update %> 
        文章添加成功,<a href="showit.asp">瀏覽</a> 
        <% rs.close  Set rs = Nothing conn.close  set conn=Nothing %> 
        可以看出,就是添加了如下類似的判斷!<%if whattitle="" then%> 
        <script language=vbs>alert("請輸入文章標(biāo)題") history.go(-1) </script> <%end if%> 
          很簡單,如果接受過來的信息為空,則彈出警告框,并且確認(rèn)后返回到上頁即addit.html了。當(dāng)然cn_author沒有設(shè)置檢測,因為當(dāng)初設(shè)計該字段的接受值是允許為空的。 
        OK,總結(jié)一下,插入記錄主要就是 rs.addnew  rs("cn_title")=whattitle  ... rs.update 
        很簡單,先聲明addnew,然后一一對應(yīng),再提交插入數(shù)據(jù)庫。這是一種插入數(shù)據(jù)庫的方法,下面來接觸了解一下另外一種。需要注意,結(jié)構(gòu)化的查詢語言也就是SQL語句能夠完成一些比較苛刻的數(shù)據(jù)庫操作。當(dāng)然,對于諸如提取、插入信息之流就更不在話下了。所以下面采用的插入記錄的方法就是直接采用SQL語法完成。 
        修改了的addit.asp 
        <!--#include file="conn.asp" --> <% 
        whattitle=request.form("title") 
        whoauthor=request.form("author") 
        whatcontent=request.form("content") %> <% 
        sql = "insert into cnarticle(cn_title,cn_author,cn_content) values(’ "&whattitle&" ’,’ "&whoauthor&" ’,’ "&whatcontent&" ’)" 
        conn.Execute(sql) %> 
        文章添加成功,<a href="showit.asp">瀏覽</a> 
        <% conn.close    set conn=Nothing %> 
        本程序中,你會發(fā)現(xiàn)只要一行的SQL語句,不需要建立Rescord記錄集行,不需要聲明addnew,不要執(zhí)行update。直接通過conn.Execute(sql)來完成。 
        當(dāng)然應(yīng)用此種方法,若必填字段接受值為空時,同樣能夠插入記錄。這和采用第一種會報 
        Microsoft JET Database Engine 錯誤 ’80040e21’  
        字段 ’xxx.xxx’ 不能是零長度的字符串。 具有很大的容錯性。是程序的可讀性還是方法的簡便高效率就任君選擇了。 

        ASP編程入門進階(二十一):ADO組件之分頁程序  

        應(yīng)該來說,學(xué)會了如何插入記錄,如何顯示記錄,那么現(xiàn)在簡單的完整的文章系統(tǒng)、新聞系統(tǒng)和留言系統(tǒng)不成問題。那接著下面的問題就是:隨著信息內(nèi)容的不段增加,單獨通過一張頁面顯示所有信息是不行也是很不理性的。所以,解決的辦法就是采用分頁技術(shù)。 
        1,rs.RecordCount 很顯然,RecordCount就是用來顯示數(shù)據(jù)庫表中一共多少條記錄的,也可以形象地說表中一共有多少行。經(jīng)常用在分頁中就是一共有N篇文章等總計的信息顯示。 
        2,rs.PageSize 
        rs.PageSize也就是一頁的大小,也就表示一張ASP頁可以顯示記錄的條數(shù)。值是自己定義的,比如經(jīng)常看到的每頁顯示N篇文章之類的信息。 
        3,rs.AbsolutePage 和 rs.pagecount 說到分頁,一定不能不提到 rs.AbsolutePage 。記錄集的AbsolutePage屬性最主要的作用就是決定著當(dāng)前顯示的是第幾頁。它的值是有依據(jù)的,指定了rs.PageSize,那么rs.pagecount的信息值就是rs.RecordCount和rs.PageSize整除結(jié)果。比如:總信息記錄rs.RecordCount共20條,每頁顯示條數(shù)rs.PageSize設(shè)為5條,那么頁數(shù)rs.pagecount數(shù)就是20/5=4頁次,而rs.AbsolutePage則就只能是第1頁,第2頁……第4頁。 
        說到現(xiàn)在,弄個具體程序來調(diào)試一下。繼續(xù)對showit.asp進行修改如下: 
        <!--#include file="conn.asp" --> 
        <% Set rs = Server.CreateObject ("ADODB.Recordset") 
        sql = "Select * from cnarticle order by cn_id desc" 
        rs.Open sql,conn,1,1 
        %>  <% page=request.querystring("page")  ’page值為接受值  
        rs.PageSize = 2 ’每頁顯示記錄數(shù) 
        rs.AbsolutePage = Page ’顯示當(dāng)前頁等于接收的頁數(shù) %> <%  
        For i = 1 to rs.PageSize ’利用for next 循環(huán)依次讀出當(dāng)前頁的記錄 
        if rs.EOF then     Exit For  end if  
        response.write("<br>文章內(nèi)容是:"& rs("cn_content")) 
        rs.MoveNext next%>  <%  
        rs.close  Set rs = Nothing  conn.close   set conn=nothing  %> 
        HERE,你調(diào)試的前提就是數(shù)據(jù)庫中的記錄相對要大于4條,這樣測試效果才明顯;還有測試的方法就是在showit.asp后面添加?page=1或者?page=2等調(diào)試觀察網(wǎng)頁顯示效果。 
        其實,說到底,顯示數(shù)據(jù)庫內(nèi)容就是 <%  For i = 1 to rs.PageSize 
        if rs.EOF then    Exit For   end if  
        response.write("<br>文章內(nèi)容是:"& rs("cn_content"))  rs.MoveNext next%> 
        起的作用,但想象一下:該程序應(yīng)該都只能顯示出2條信息(一直不變的2條信息)。但為什么加上?page=1和?page=2會顯示不同的結(jié)果呢?……那絕對就是rs.AbsolutePage的作用了。這個搞清楚,相信分頁的整體架構(gòu)就有點眉目了。 
        <!--#include file="conn.asp" --> <% 
        Set rs = Server.CreateObject ("ADODB.Recordset") 
        sql = "Select * from cnarticle" 
        rs.Open sql,conn,1,1 %> 
        <%filepath=request.servervariables("path_info")%> 
        <% page=request.querystring("page")  ’page值為接受值 
        rs.PageSize = 2 ’每頁顯示記錄數(shù) 
        if Not IsEmpty(page) then ’如果page已經(jīng)初始化... 
            if Not IsNumeric(page) then ’判斷page值是否為數(shù)字 
             page=1    else    Page = cint(page) ’接收page并化為數(shù)字型賦給page變量 
            end if       if Page > rs.PageCount then ’如果接收的頁數(shù)大于總頁數(shù) 
                rs.AbsolutePage = rs.PageCount ’設(shè)置當(dāng)前顯示頁等于最后頁         
            elseif Page <= 0 then ’如果page小于等于0 
                rs.AbsolutePage = 1 ’設(shè)置當(dāng)前顯示頁等于第一頁 
            else         rs.AbsolutePage = Page ’如果大于零,顯示當(dāng)前頁等于接收的頁數(shù)  
            end if else  rs.AbsolutePage=1 
        end if Page = rs.AbsolutePage%> <%  
        For i = 1 to rs.PageSize ’利用for next 循環(huán)依次讀出當(dāng)前頁的記錄 
        if rs.EOF then   Exit For   end if  
          response.write("文章標(biāo)題是:"& rs("cn_title")) 
          response.write("<br>文章作者是:"& rs("cn_author")) 
          response.write("<br>文章加入時間是:"& rs("cn_time")) 
          response.write("<br>文章內(nèi)容是:"& rs("cn_content")) 
          response.write("<hr>")   rs.MoveNext Next %> 
        <form action="<%=filepath%>" method="get"> 
        <!--首先保證總頁數(shù)不為1、不為0--> 
        <%if rs.pagecount<>1 and rs.pagecount<>0 then%> 
        <!--如果當(dāng)前頁數(shù)大于1,無論何時都應(yīng)顯示首頁和上一頁的連接--> 
        <%if page>1 then%>     [<a Href="<%=filepath%>?Page=<% = 1%>">首頁</a>] 
            [<a Href="<%=filepath%>?Page=<% = page -1 %>">上一頁</a>] 
        <!--如果當(dāng)前頁數(shù)大于1并且小于總頁面數(shù)時,顯示出尾頁和下一頁的連接--> 
            <%if page<rs.pagecount then %> 
            [<a Href="<%=filepath%>?Page=<% = page + 1%>">下一頁</a>] 
            [<a Href="<%=filepath%>?Page=<% = rs.PageCount%>">尾頁</a>] 
        <!--如果當(dāng)前頁數(shù)大于1并且仍大于或等于總頁面數(shù)時,不顯示出尾頁和下一頁的連接-->     <%else%>    [下一頁] [尾頁] 
            <%end if%> <!--否則,當(dāng)前頁數(shù)不大于1,則只顯示尾頁和下一頁的連接--> 
        <%else%>  [首頁] [上一頁] 
        [<a Href="<%=filepath%>?Page=<% = page + 1%>">下一頁</a>]  
        [<a Href="<%=filepath%>?Page=<% = rs.PageCount%>">尾頁</a>] 
        <%end if %> <!--最終,總頁數(shù)若為1、為0則沒有任何連接--> 
        <%else%>  [首頁] [上一頁] [下一頁] [尾頁] 
        <%end if%> [頁次:<font clor=red><b><%=page%></b></font>/<%=rs.PageCount%>] 
        [共<%=rs.RecordCount%>篇 <font color=red><b><%=rs.PageSize%></b></font>篇/頁] 
        轉(zhuǎn)到<input name="page" size=5 value="<%=page%>">頁 
        <input type="submit" value="Enter"> 
        </form> <% rs.close   Set rs = Nothing  conn.close  set conn=Nothing %> 
        長長的分頁代碼,搞懂是真不易,平臺引用起來還需要修改也是比較麻煩。能做成一個函數(shù),下次調(diào)用起來就很方便了。 
        <% function pagination(pagecount,pagesize,page,resultcount) 
               Dim query, a, x, temp 
               action = "http://" & Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("SCRIPT_NAME") 
               query = Split(Request.ServerVariables("QUERY_STRING"), "&") 
               For Each x In query            a = Split(x, "=") 
                   If StrComp(a(0), "page", vbTextCompare) <> 0 Then 
                       temp = temp & a(0) & "=" & a(1) & "&" 
                   End If        Next        
               Response.Write("<form method=get onsubmit=""document.location = ’" & action & "?" & temp & "Page=’+this.page.value;return false;"">")               
               if page<=1 then        Response.Write ("[首頁] [上一頁] ") 
               else       Response.Write("[<a href=" & action & "?" & temp & "Page=1>首頁</a>] ") 
                      Response.Write("[<a href=" & action & "?" & temp & "Page=" & (Page-1) & ">上一頁</a>] ") 
               end if       if page>=pagecount then 
                      Response.Write ("[下一頁] [尾頁]")               
               else    &nbs, p;  Response.Write("[<a href=" & action & "?" & temp & "Page=" & (Page+1) & ">下一頁</a>] ") 
                      Response.Write("[<a href=" & action & "?" & temp & "Page=" & pagecount & ">尾頁</a>]")                      
               end if Response.Write("[頁次:<font color=red>" & page & "</font>/" & pageCount)        
               Response.Write("] [共" & resultcount & "條 <font color=red>"& pagesize & "</font>條/頁]") 
               Response.Write(" 轉(zhuǎn)到" & "<input name=page size=4 value=" & page & ">" & "頁<input type=submit value=go>") End function %> 
        如要引用,則可以:<%call pagination(rs.PageCount,rs.pagesize,page,rs.RecordCount) %> 
        (完)

         
         網(wǎng)友評論
        暫無網(wǎng)友評論!

        發(fā)表評論
        昵稱*
        評論內(nèi)容*
        請選擇表情
        贊成
        思考
        驚奇
        隨便
        懷疑
        質(zhì)問
        反對
        疲勞
        無奈
         
        分類列表
        網(wǎng)絡(luò)
        Excel
        Windows
        Word
        Asp
        Html
        Java、JS
        安全
        DOS
        VB
        php
        手機

        返回專輯首頁

        国内精品一区二区三区不卡| 黑人video粗暴亚裔娇小| 精品一区中文字幕| 日日碰日日摸夜夜爽无码| 91日日夜夜美女| 欧美一区二区三区黄色| 妓女综合网99页| 欧美性xxxx狂欢老少配| 手机看片日韩日韩国产在线看 | 97se亚洲综合自在线| 国产精品亚洲А∨天堂免下载 | 国产乱子伦| 精品无码国产一区二区三| 99国产导航| 牛和人交xxxx欧美| 伊人av一区二区无码| 亚洲人成网站十八禁| 亚洲色狠久久| 亚洲成a无码免| 野花韩国视频在线观看免费播放大香区 | H无码中文字幕| 亚洲色就色成人综合网| 亚洲一区无码中文字幕乱码| 国产精品美女被遭强扒开双腿| 国产打屁股调教在线观看| 中国免费一级毛片| 尤物在线导航| 亚瑟在线无码| jk美女网站视频黄频色黄频色| 依依成人影视国产精品| 亚洲永久精品ww47永久入口| 亚洲无吗在线观看| 男女高潮免费观看无遮挡| 大秀免费色哟哟| 最新国产女同精品视频| 影音先锋av最新资源| 亚洲精品 国产 日韩| 四川老太婆逼毛茸茸bbw| av三级片网站| 色天天偷| 久草国产在线播放| 亚洲免费H动漫| 国产日日夜夜精品| 国产成人 AⅤ 国产在线小说 | 国产精品色吧国产精品| 美女裸体啪啪无遮挡免费观看| 日韩在线一区二区三区免费视频| 亚洲熟妇无码爱v在线观看| 午夜性999性久久久久| 久久久久久久久熟女| 亚洲AV无码成人黄网站在线播放| 00XX动态图| 五月天婷婷在线视频| 爱爱网址免费无码| 亚洲片手机在线视频| 无码加勒比一区二区三区| 2020国产精品熟女天天更新| 久久香蕉国产线看观看网站| 免费无码真人祼交视频网站| xp123国产自| 日本加勒比人妻中文字幕| 一本到视频在线播放| 国产裸拍裸体视频在线观看| 亚州国产午夜在线视频无| 国产美女精品视频线播放| 国产一区二区丁香婷婷| 在线观看刺激影院| 成人午夜精品无码区| 337p亚洲日本欧洲大胆| 国产m片在线| 亚洲人片在线观看天堂无码| 最爽男女激烈动态图| 久久精品国产精品亚洲人人| 中文字幕熟女| 免费精品视频在线| 国产高清狼人香蕉在线| 一本到高清视频不卡dvd| 久久精品黄色电影| 国产过膝袜剧情在线播放| 自偷自拍无码| 成a人v一区| 国产无遮挡无码视频在线观看| 动漫精品福利视频| 国产wwwvom在线播放| 2022最新无码国产在线观看| 亚洲熟女综合一区二区三区| 亚洲熟女天堂av| 成人大黄全免费网| 亚洲一区二区精品视频| 丰满少妇爽死你视频| 日日摸狠狠的摸夜夜摸| 大屁股av系列在线| 国产福利网站在线观看红一片| 自慰淫叫喷水在线观看| 自拍欧美人类综合在线| CaoPoron_超碰| 69视频在线精品国自产拍| 美女黄18以下禁止观看免费的| 吻戏激烈娇喘吃奶摸下| 久久HEZYO色综合| av无码免费无禁网站动漫| 97久久久久久久久精品| 国产熟黄bbw在线观看| 一区二区三区高清無碼| 日本xxxx一区| 国内精品伊人久久大香线焦| 360家庭偷拍盗摄| 无码国产成人久久| 久艾草在线精品视频在线观看| A级毛片免費看| 综合自拍亚洲综合图区高清| 久久久久亚洲Av片无码一区| 337P日本欧洲亚洲高清鲁鲁| 亚洲VA欧美VA人人爽色欲| 在线欧美sm一卡| 亚洲春色在线视频| 一道在线视频dvd| 国产精品视屏| 亚洲国产真实视频网站| 色综合91久久精品中文字幕 | 极品美女扒开粉嫩小泬免费看| 激情中文字幕| 亚洲午夜福利一级无码| caoporon草棚视频| 免费不卡人妻无码中出| 国产一区张柏芝| 日韩av无码中文一区二区三区| 黑人大屁股ⅩXXXX| 中文爆乳肉感大码在线| 亲胸揉胸膜下刺激娇喘天天视频| 天天摸夜夜添狠狠添高潮出免费| 国产茂密老女人的大黑p| yy亚洲人成电影网站色| 成?人?国产高清| 亚洲熟妇无码久久精品| 亚洲资源站中文| 亚洲日韩图片专区小说专区| 好大好深好猛好爽视频免费| 国产日韩亚洲欧美| 国产大屁股喷水| 国产亚洲一区二区三区啪| 一个色综合国产色综合| 又大又粗少妇出水小视频| 2019亚洲精品无码在线| 在线色日韩AV| 欧美人与动牲交免费观看| 免费人成视频x8x8老司机| 自慰喷水在线看| 欧洲无人区天空码头iv| 中文字幕有码人妻| 国产精品亚洲精品日韩已满| 人妻AV综合网| 亚洲成Aⅴ人的天堂在线观看女人 青草青草久热精品视频在线百度云 | 精品久久久无码中文字幕| 久久香蕉精| 国产在线视频无码专区免费| 丁香婷婷激情亚洲| 人人妻人人澡人人爽视频| 90后极品粉嫩小泬20p| 国产高清免费无码不卡视频| 中文一区二区三区亚洲欧美 | 午夜男女XX00动态图片| 色综合久久88一加勒比| 旡码精品毛片| 香蕉97超级碰碰碰免费公开| 白嫩无码人妻丰满熟妇啪啪| 午夜黄视频| 在线视频制服丝袜美腿| 亚洲欧美一区二区三区二厂| 国产福利小视频在线观看| 色天堂AV在线| 啦啦啦高清在线观看视频www| 五月天婷婷色综合| 97国产婷婷综合在线视频| 天天做天天爱夜夜爽毛片毛片| 好诱人的搜子好爽免费视频| 欧美高清一二三区| 又黄又爽的视频真人版| 无码麻豆| 图片区乱小说区电影区| 制服丝袜中文无码人妻| 青草青草久热精品视频国产4| 人妻无码免费一区二区三区 | 亚洲色永久域网站| 好大好爽h福利视频| 亚洲国产曰韩欧美精品| 超踫在线中文字幕| 2022国产黄色视频| 在线观看经典 欧美二区| 国模精品二区| 777米奇色狠狠狠888影视不卡| 亚洲国产成人AV网站| 爱情岛论坛永久网址首页| 国产久草五月天| 一本之道高清乱码狼人| 人与嘼av免费| 日日舔夜夜摸| 在线观看一级爆乳| 天天爽夜夜爽人人爽婷婷| 在线无码一区| 午夜韩国福利100| 蜜芽国产尤物av尤物在线看| 国产大秀视频在线一区二区| 又免费又黄又高潮的视频| 中文无码字幕| yw193c㎝国产永久在线| av丝袜在线无码| 丹麦大白屁股xxxxx| 67194熟妇在线观看| 最新在线伦费观看中文| 日日干日日插| 亚洲AV色精品| AV中文字幕在线视| 欧美在线高清视频一区 | 乱肉艳妇熟女免费视频| 亚洲最新无码AⅤAPP| 高清无吗一区二区三区| 人妻在线污| 曰本女人真人性高朝床叫视频| 在线观看AV高清无毒网站| 欧美高清亚洲欧美一区h| 尤物国产视频| 欧美综合自拍亚洲综合网| 国产欧美精品福利一区二区| 久久精品女人的天堂av| 婷婷五点尤物视频| 国内久久久久久精品肉蒲| 中文字幕一区二区在线播放| 成年女同av网站| 大屁股不卡一不卡二视频| 在线播放 国产无码 高清| 网友自拍区一区二区三区| 大胸美女午夜毛片一级45| 国产a∨国片精品白丝jk制服| 国产办公室秘书无码精品99| 压在卫生间上做的视频| 成·人免费午夜在线观看| 真实国产乱子伦在线视频不卡| 国产一区二区三区大学生| 亚洲 国产 制服 丝袜 一区| 免费a级毛片无码a∨蜜芽18禁| a级黑粗大硬长爽猛出猛进| av永久天堂一区二区三区| 亚洲va在线va天堂XX| 少妇爆乳无码专区网| 五月丁香六月狠狠爱综合| 最新地址国产在线| 中日无码精品一区二区三区| 久久精品国麻豆| 国产精品欧美亚洲日本综合| 18勿看免费大片1000拍拍| 亚洲日韩一区二区一无码| 胸喷奶水视频www网站| 四虎成人精品永久网站 | 欧美大屁股中文字幕在线四区| AAAAA级毛片免费看| 粉嫩白丝jk被啪到喷水| 国产精品亚洲二区在线观看 | 小寡妇一夜要了六次| 国产老肥熟xxxx| 亚洲一区二区无码影院| 日本午夜福利在线观看| 欧美牲交a欧美牲交aⅴ另类畅通观看| 不卡AV片免费在线观看| 一本久久a久久精品图片| 狠狠综合久久狠狠88亚洲| 内蒙古老熟女爽的大叫| 无码窉视频网| 色老汉免费网站免费视频| 亚洲激情四视频| CHINESE乱子伦XXXX| 一区二区黄色视频| 亚洲人成网站在线播放青春| 国产亚洲美女精品久久| 哟男哟女视频八区| ai杨幂被弄高潮在线观看| 欧美成人亚洲| 午夜又污又黄的视频在线观看| 中文字幕无线乱码人妻| 最新视频网站在线观看色多多| 国产精品777777| 超清丝袜国产自在线拍首页| 国产精品18久久久久久不卡| 日韩精精按摩| 中文有码中文无码中文剧情| 99re热视频精品免费观看| 爱爱无码视频| 少妇yy111111| 国产亚洲精品无码不卡| 国产日产欧美一区二区三区| 岛国精品一区免费视频在线观看 | 国产午夜无码片在线观看影视| 国产美女自卫慰| 在线观看 亚洲无码| 插色欧美精品| 啪啪无码人妻丰满熟妇| 亚洲精品不卡久久久久久| 亚洲66午夜福利网站| 日韩中文字幕无码| 国产最新在线分类视频| 爆乳喷水高潮视频| 亚洲女成熟女怡红院| 国产无码第一页| 亚洲中文字幕A∨| 91牛牛超碰caoporen国产| 色妞WWW精品免费视频| 日本无遮挡吸乳呻吟视频| 国产2020丝袜女王精品视频| 国产AN国产精品| 亚洲激情婷婷| 伊人网视频人成在线| 日韩精品欧美高清区| 亚洲欧美国产成人综合不卡| 亚洲青青草原高清| 爆乳美女潮喷免费视频| 免费又黄又硬又大爽日本| 超乳视频爆乳无码免费专区| 全肉浪妇禽老女人| 亚洲人成无码网www电影麻豆| 一级伦奷大片免费| 国产精品无码va久久电影| 一本久道综合在线无码人妻| 国产免费高清无需播放器| 波多野结衣无码一区二区三区在线| ww亚洲ww亚在线观看| 亚洲人成网站观看在线播放| 韩国产三级三级香港三级日本 | 男女猛烈无遮激烈太紧动| 真实灌醉高中生的国产| 极品精品娱乐成人盛宴| 亚洲另类丝袜综合网| 日韩无码电影| 国产不卡一区二区三区免费视频| 精品国产一区二区三区卡| 亚洲自拍一区国产| 精品无码久久久久国产一区二区 | 另类sM一区二区免费视频| 911精品国产91久久久久| 污黄色过膝袜视频在线观看| 日本少妇一二区| 2021年最新黄色网站在线观看| 初毛初精G 网站| 无码 人妻 在线 视频| 黄色网站丁香五月| iGAO为爱做激情| 潮喷av| 国产真实夫妇视频| 日韩精品无码免费视频三区| 50老熟女导航| 国产99视频精品免视看9| 把日出女人白浆免费视频| 午夜少妇性影院私人影院在线| 黑色丝袜无码中中文字幕| 亚洲就去吻婷婷| 国产96在线 | 亚洲| 又色又无遮挡的视频| 欧美最猛黑人xxxx黑人猛交| 国产又大又硬的免费视频| 午夜亚洲国产理论片二级| 国产成人亚洲综合| 哆哆啪Free国产在线| 亚洲无码专区视频在线观看| 厕所偷拍太清楚了10P| 国产开嫩苞在线播放视频| 国产A√无码专区| 国产啪精品视频网站免| 免费网站看v片在线18禁无码| 久久99精品久久久久久清纯| 人妻喷白浆无码系列| 污污网站网址在线观看日本黄 | 成年免费A级毛片高清| 久久精品国产99久久久香蕉| 中文字幕无码热在线视频| 国内私拍福利精品| 国产精品v欧美精品v日韩| 成 人免费 在线视频| 日韩精品 - igao视频网_为爱搞点激情!!!| 岛国Av无码免费无网站| 第四色色五月婷婷图片| 亚洲天堂洲激情片| 91在线看片超碰| 无码丝袜人妻| 伊人久久五月| 亚洲美女综合久久| 久久久久国色αv免费观看| h漫无码动漫av动漫在线播放| 伊人久久青青视频五月天激情| 国产AV嫩模福利| 亚洲精品综合第一国产综合| 免费看无码a视频| 99超碰人人模人人爽人人喊 | 国产精品永久免费导航| 舔舔日日夜夜| 奥田咲在线精品人妻| 丝袜长腿AV网站在线| 久久久久久精品免费免费直播成年| 特 级欧美视频AAAAAA| 亚洲精品国产精品国自产| 东京热 精品| 一级看片免费视频囗交| 亚洲人成网站免费999久久久| yy111111少妇影院免费无码| 亚洲国产成人久久99精品| 黑森林视频导航| 久久亚洲中文字幕精品一区四| 白洁一区二区三区中文字幕| 国产在线观看一区二区| 亚洲影院漂亮人妻| 国内精品一区二区大象| 国产一级毛片a午夜一级毛片| 国产中出AV在线| 99爱在线精品视频免费看| 2022av视频网| 精品欧美一区视频在线观看| XXXX日本欧美| 18禁黄无码免费网站| 网址你懂的在线观看日本| 亚洲熟女色十八| 成人无码α片在线观看不卡| 国产在线视频费| 最新无码国产AV| 伊人色综合网一区二区三区 | 久久久久无码国产精品| 日日摸狠狠的摸夜夜摸| 国产成人精品吹潮在线观看| 国产精品久久久免费视频| 中文字幕高潮波多野结衣| 全免费a级毛片免费看视频| 国产精品张柏芝久久| 毛片免费永久不卡视频观看| 粉嫩00大全无码在线看| 国产一区二区免费Av| 国产无码a| 国产日韩一区二区| 国产亚洲人成网站观看| 日本乱偷互换人妻中文字幕| 视频一区二区三区四区,久久免费视频 | 国产午夜精品一区二区三区不卡| 中国男同GayAv网站| 精品熟女少妇免费久久| 在线观看扣喷水漂亮18| 无码丰满熟妇在线无码播放| 久久露脸国语精品国产91| 又粗又大又黄又爽的免费视频| 最新国产精品第一页| 亚洲播放精品无码| 免费熟少妇性饥渴在线观看| 国产精品VA在线观看入口| 别揉我奶头啊嗯免费视频 | 国产精品一区二区久久精品| 1;美亚洲第一极品精品无码| 黄福利视频网站网址| h色在线观看网站| 在线网站18禁| 麻豆国产VA免费精品高清在线| 爱a久久片| 中文字幕在线看俺也色1| 伊人狠狠色综合网| 网友自拍亚洲| 亚洲色多多视频一区二区| 亚洲爱情精品一区| AV五月天强奸| 在线观看av手机网址| 草裙社区精品视频三区| 亚洲先锋中文色色影| 一本大道无码av天堂| 久久精品国亚洲A∨麻豆| 大黄国产精品永久免费| 不下载免费在线观看黄色网站| 亚洲熟妇色XXXXX亚洲| 国内自拍视频一区二区三区| 国产美女AV一区二区| 18禁的AV网站| 亚洲国产成人久久99精品| 国产偷窥熟女精品视频大全| 西西午夜大胆视频在线观看 | 久久九九精品国产免费看小说 | 无码天堂亚洲国产av麻豆| 亚洲高清AⅤ日本欧美视频| 亚洲少妇色AⅤ| 在线观看国产成人swag,| 久久不射影院| 少妇厨房愉情理伦片视频| 亚洲片十八禁污污污| 狼友视频永久在线| 中文毛片无遮挡高潮| 3d动漫精品福利在线看| 99麻豆制服丝袜视频| 无码影视不卡| 高跟丝袜无码一区二区| 日本三级欧美三级人妇视频黑白配| 日日摸夜夜添夜夜添视频| gogowww全球高清大胆视频| 国产成人高清精品亚洲| 精品国产AV无码久久久伦| 十八禁免费视频网站| 夜夜添夜夜添夜夜摸夜夜摸| 午夜大片爽爽爽免费影院| 中出的无码视频| 九九久久九九久久| 亚洲激情婷婷| 国产AⅤ一肉欲| 黄久久99黄| 中国女人18毛片一级视频| 国产日产韩国麻豆二区| 国产s免费视频| 在线观看AV永久免费| 亚洲妓女综合网995| 国产精品VA在线观看无码不卡| 好男人视频社区在线观看www| 99久久亚洲综合精品成人| 喷潮黄色视频手机板| 一级无码奶水在线观看网站| 免费黄色网站一区二区三区| 国产理伦在线| 国产精品十八禁在线观看| 亚洲兔女郎在线影院| av高h在线观看| 在线综合色| 男女肉粗暴进来120秒动态图| 超久新碰碰| 日韩AⅤ无码手机看| 亚洲一区二区三区乱码AⅤ| 国产污污污影院在线观看免费| JAPANESE睡觉侵犯| 国产欧美在线呦| 丝袜无码av| 无码人妻专区免费视频| 日韩免费在线精品视频| 福利在线不卡一区| 2021在线看黄v免费网站免费| 纯欲岛国片18禁在线免费| av高清在线观看韩国| 午夜福利av无码一区二区| 国产精品2019在线青青精品视| 99国产热视频在线观看首页| 亚洲综合图色40p| 欧美成人影院免费在线观看| 国产精品久久小视频| 日韩精品中文字幕一本一道| 在线白嫩| 国语自产偷拍精品视频偷拍| K6官方宅男第一导航| gogo人体大胆高清啪啪| 中国人妻互换视频网站| 国产免费又粗又猛又爽视频国产 | 好多水好硬好紧好爽视频下载| 人妻AV综合网| 亚洲欧美日韩综合一区| 亚洲无码一区在线播放| 公交车np粗暴h强j| 亚洲色大WWW永久网站| 亚洲精品系列欧美第一页| 黄色小视频高清免费在线观看| 一本一本久久a久久精品综合不卡 97色伦综合在线欧美视频 | 亚洲日韩三级片高清| 亚洲日韩精品欧美一区二区三区不卡| 国产成人精品亚洲2020| 香蕉午夜福利院| 曰批免费视频播放网站| igao在线播放 国产精品| 黄色网站免费在线看入口| 站长推荐高潮一级毛片| 亚洲国产成人AV毛片大全久久| aaaa性bbbb欧美| 好吊妞国产欧美日韩免费观看| 国产精品BBXX| 亚洲成av人片高潮喷水| 日本xxxx高清色视频在线播放| 亚州五十路伊人网| 高潮白浆喷液在线观看| 国产寡妇树林野战在线播放| OL美女国产AV| 成人亚洲爱情岛论坛在线观看| 妓女 一区二区三区四区 绝色| 免费无码一级成年片无限制| 中文字幕人妻中文AV不卡专区| 欧美综合视频在线| 52AV线在线精品观看| 国产精品亚洲欧美大片在线看| 尤物动漫视频网站入口| 国产日韩有码无码中文字幕| 超碰人人97在线| 亚洲国产成AV人天堂无码 | 夜鲁夜鲁很鲁在线视频 视频| 亚洲欧美成人另类激情| 超碰av一区二区| 中文字幕在线无码一区二区三区| 国产欧美亚洲精品第3页在线| 亚洲揄拍图片色区图片专区| 欧美日屁视频| 欧洲亚洲国产视频| 影音先锋亚洲AV资源网站| 搞AV一区二区水蜜桃| 2018天天躁夜夜躁狠狠躁| 亚洲无线码高清在线观看 | av无码一区| 天堂AV无码大芭蕉| 天天啪久久爱免费视频| 国产女与黑人在线精品| 欧美影院未满十八| 一本之在线视频免费| 国产欧美日韩精品久久| 久久婷婷五月综合色精品首页| h漫无码动漫av动漫在线播放| 国产乱人伦精品免费| 久久综合精品国产一区二区三区| 偷窥国产亚洲女爱视频在线| 真人高潮娇喘嗯啊~在线观看| 国产小屁孩cao大人免费| jizz日本免费在线观看| 国产第一页污| 亚洲熟妇无码AⅤ在线播放| 变态sm无码凌虐视频网站| 日韩毛片无码| 人妻少妇被猛烈进入中文字幕| 日本韩免费不卡在线中文字幕 | 国产杨幂AV在线播放| 加勒比久久综合网高清| 好男人www| 717yy电影夜夜福利| 国产亚洲精品第一综合另类| 国产高H视频在线观看| 亚洲av综合色区在线观看| 特级Av毛片免费观看| 久久精品国产2020观看福利| 日本丰满少妇高潮呻吟| 欧美一区二区三区免费| 99久久影院| 少妇中文字幕色| 在线影院a| 2020高清一道国产| 一个人看的WWW免费高清视频在| 国产片精品免费视频| 真人无码作爱免费视频网站| 国产成人啪精品视频免费网站| 日本系列亚洲系列精品| 精品久久久无码不卡| 亚洲成AV人影院| 在线观看 亚洲 欧美 日本| 精品BRAZZERS欧美教师| 色呦呦视频在线播放| 日本大乳高潮视频在线观看中文| www2021狠狠| 久久综合九色综合欧美98| 国产幺女在线视频| 午夜超碰| 免费a级毛片无码a∨蜜芽| 自慰流水喷白浆免费看看| 人妻丝袜av中文系列先锋影音 | 曰本AV不卡无码一区二区三区| 国产精品亚洲А∨天堂免下载| 国产三级手机在线| 中文字幕色婷婷在线精品中| 日本精品久久久| 激情婷婷麻豆| 亚洲永久精品ww3344| 把腿抬高我要添你下面动态图| 大人片视频免费1| 中出高潮流白浆视频| 精品老司机午夜福利在线| 亚洲免费观看黄色网| 2021最新黄色网站播放| 曰本a级毛片无卡免费视频| 亚洲码欧美码一区二区三区| 人人玩人人添人人澡mp4| 久久精品国产69国产精品亚洲 | 超a级毛片| 性色av无码无在线观看| 777视频精品在线| 亚洲欧洲日韩国产一区二区三区| 国产喷水白浆在线| 国产香蕉AV| 国产白丝在线| 同性恋视频男中文字幕| 偷拍精偷拍精品欧洲亚洲| 国产熟睡乱子伦视频在线播放| 91亚洲va在线va天堂va国产| 又黄又湿免费高清视频| 亚洲图欧美片色区| 亚洲自拍校园欧美日韩| 综合福利视频| 永久在线免费观看美女热比网站 | 性色AV网站在线观看| 中文字幕免费无码久| 伊人伊成久久人综合网777| 丰满岳下面水好多| 亚洲精品视频播放h| 色窝窝人体色www| らだ天堂√在线中文| 国产α片免费观看在线人| 麻豆国产尤物av尤物在线看| 精品一区二区无码av| 亚洲特级黄色视频| gv天堂gv无码男同在线观看| 高潮潮喷冒白浆视频| yy111111少妇影院里无码不卡| 97人妻在线免费看| 一本遥东京热无码| 18禁免费AV在线| 国产片婬乱一级吃奶毛片视频 | JiZZ一JiZZ自慰| 在线免费观看18禁| 白袜丝袜自慰喷水网站| 亚洲国产精品无码动态图| 重囗味sm在线观看无码视频| 国产裸体舞一区二区三区| 国产精品乱一区二区三区| 人妻无码视频一区二区三区| 国产 无码 日韩| 日韩AV网站在线观看| 99久久一区| 亚洲日韩AV在线波多野结衣 | 亚洲AA在线视频| 好爽…又高潮了十分钟试看 | 国产东北一级毛卡片免费观看| 精品久久久久久久久久久AⅤ| 亚洲色欲色欱www在线欧| 亚洲精品无码国模av| 午夜亚洲无码| 国产午夜亚洲精品国产成人| 人妻互换免费中文字幕| 极品尤物白丝自慰正在播放| 欧美大胆老熟妇乱子伦视频| 亚洲第一网站男人都懂2021| 国产综合一区二区在线观看| 久久久久免费经典视频| 丰满熟女一区二区视频| 高潮一进一出视频免费| 999在线视频一区二区三区| 在线观看人成视频中文字幕| 亚洲综合色色| 女教师AV网站国产| 波多野结衣20p_亚洲色| 变态老头下药强奷到爽电影| H 番肉动漫视频大全在线观看 | 日韩AV一区二区精品不卡| 在线观看免费H| 在线观看日本高清=区| yy111111少妇影院永久版| 在线观看理论片一级| 亚洲综合区丁香五月小说| 国产乡下三级全黄三级| 欧美粗大猛烈老熟妇| 日韩永久免费无码AV电影 | 国产色偷丝袜亚洲欧美| 老肥熟女四五十路| 亚洲人成网站www| 国产下药迷倒白嫩美女97| a级毛片在线观看| 尤物日韩在线| 亚洲美女ay亚洲美女Av| 成 人 色综合小说| 在线播放AV满18| 午夜视频免费入口| 国产欧美va天堂在线观看视频| 国产91亚洲一区在线观看| 高清视频一区二区三区| 国产三级中文字幕| 午夜精品久久久久久99热| 国产杨幂福利AV在线播放| 幺女幺女在线看国产毛片| 亚洲国产一区二区A毛片| 无码国产一区二区色欲| 国产91福利在线精品剧情尤物| 天天爱天天添天天上老师机| 爱人中美日韩毛片免费观看| av在线暗网无码| 国产精品桃色无码免费视频| 无码精品国产dvd在线观看9久| 人妻无码不卡中文字幕在线视频 | 中国屁股喷水视频| 欧美亚洲免费| 亚洲呦视频| 中文 国产 无码免费| 国产性大片黄在线观看在线放| 夜夜揉夜夜操| 天堂在线www| cao88888国产| 国产精品美女白嫩| 欧美中文有码字幕在线播放| 日韩欧美不卡视频| 国产亚洲美女精品久久久2020 | 亚洲AV无码乱码国产精品久久| j国产AV一区二区| 肏屄特黄视频| 亚洲精品无码福利观看| 国产男女猛烈无遮挡免费视频| 国产免费一级高清淫日本片| 国产精品无码高清不卡| 波多野结衣三级片一区二区三区| 色先锋av影音先锋在线| 亚洲香蕉无线免| 国语精品91自产拍在线观看18| 在线视频观看www…………| 中日韩亚洲国产综合| 棚户区娼妓xxxxbbw| 无码在线一区视频2022| 妓女,妓女影院,妓女影视网| H国产av无码| 日本视频又大又紧| 亚洲日韩精品成人AV| 67194少妇免费观看| AI杨幂高潮勃起喷水| 少妇的肥蝴蝶18p| 国产午夜福利红片| AV网站官方在线| 国产美女被遭强高潮动态图 | 裸体美女黄网站18禁| 97国产超碰一区二区三区| 日韩欧美国产综合字幕| 一级毛片满18| 久久精品黄色电影| 国产福利免费看黄片| 亚洲国产精品导航| 538免费视频| 2020天天爽夜夜爽人人爽| 欧美特级手机在线观看| 精品一区二区国产在线观看| 亚洲精品青草| 欧美激情一区二区三区四区| 亚洲精品国产一二三无码AV| 自慰网站亚洲女| 护士av永久在线观看| av婷婷网| 亚洲美女毛片儿| 久久男人天堂| 最新偷窥福利720视频| 在线免费日本| 步兵一区二区三区在线观看| 国产福利私拍视频精品| 亚洲欧洲日韩综合在线| 国产91富婆在线观看91| 亚洲国产成人精品福利在线观看 | 啊啊啊不要啊好爽好紧在线观看| 激情综合婷婷丁香五月尤物| 在线不卡亚洲中文字幕| 国内情侣露脸视频| 一本一本大道香蕉久在线精品| 韩国无遮挡无删减视频在线观看| 久久精品影视免费观看| 日本网站久久久| 亚洲AV自慰白浆喷水网站少妇| 超碰Av一区=区三区| 亚洲无码一区国产推油| 美女露出奶头还扒开尿口视频| 尤物高清无码在线观看| 超碰91在线看| 97久久久免费观看| 97影院在线理论| 影音先锋男人资源站| 亚洲精品国偷拍自产电影| 桃色国产| 白浆在线| 老太婆毛多BBwBBwBBwBBw播放xxxx| 黄色国产视频| 国产成人丝袜在线无码| 中文无码伦aV中文字幕在线| 黄黄18禁网站| 中文精品久久久久国产网站| 成年看片免费视频播放人在线| 干亚洲少妇| 午夜视频不卡| 国产专区青青草原亚洲| 中文字幕无码DVD| 妓女妓女影院妓女影库妓女网| 成·人免费午夜无码视频夜色| 亚洲欧洲精品成人久久曰影片| av在线免费福利| 免费黄色视频一区二区| 国产va在线观看免费| 亚洲免费影院香蕉| 美女视频黄频大全免费的| 国产人妇三级视频在线观看| 国产女主播一二三区丝袜美腿| 91久国产在线观看| 在线强奸九九国产字幕手机版| 免费无码又刺激高潮的视频| 亚洲av无码专区在线电影视色| 亚洲精品国产成人AV麻豆| 放荡的女老板bd在线观看| yy111111少妇手机在线观看| 国产在线大学生| 五月天久久久噜噜噜久久| 98色综合| 久久精品国产9久久综合| 世界一级毛片免费| 国产女明星A级在线| 成人拍拍拍无遮挡免费视频 | 人妻少妇精品久久| 澳门日韩无码| 亚洲最大的熟女水蜜桃av网站| 亚洲一区无码| 欧美啪啪一区二区| 又黄又刺激的视频,在线观看| 日日噜噜夜夜狠狠2021| 国产灌醉视频免费观看| 99视频精品全国免费| 一区二区三区午夜无码视频| 国产三级精品三级在专区| 关晓彤被调教出奶水的视频| 伊人久久综合97| 337p日本欧洲亚洲大胆色模| 色友国产精品| 午夜精品久久久久久久可搜索| 伊人色综合视频在线免费观看| 国产精品国产三级国产AV剧情| 一级毛片不收费的| 18禁止观看爆乳奶头网站| 97人人模人人喊直播| 久久综合综合久久98色| 三上悠亚一区二区| 特级婬片女子高清| 亚洲色欲色欲综合网图片| 中文字幕无码乱aⅴ免费| 亚洲人成AⅤ在线播放| WWW拍拍拍| 18勿进国产AV| www.999精品视频| 亚洲国产18p| 久久久久免费视频| 国产人澡人澡澡澡人碰视频| a网站-最新无码a∨在线观看| 被狗卡住国产在线| 15min摘花出血视频| 亚洲精品无播放器在线播放| 亚洲欧美久久一区二区| 正在播放熟妇群老熟妇456| 777全国免费黄色网站| 97一区二区在线精品视频| 粉嫩粉嫩的18在线观看| 成年女人喷潮视频免费观看 | Yw193爆乳| 国产91线观看| 在线看片日韩AV| www国产一级一区在线| 在线色av| 日韩Av妓女影院| 亚洲 中文 字幕永久免费| 制服丝袜第一页国产| 足丝伊人久久网| 中文字幕区一超清中文乱码字幕在线观看| 免费午夜无码视频在线观看| 无码少妇一级Av片在| 2022国产在线无码视频网站| 日本我要狠狠干| 又黄又爽又大又硬的免费视频| 国产女精品视频网站免费蜜芽| 中国少妇hb免费视频| 日韩全网av在线| 厨房人妻偷情啪啪| 国产XXXX做受视频| 国产无遮挡免费视频免费| 国产孕妇福利在线观看 | mm1313亚洲国产精品美女| 国产卡1卡2卡3麻豆精品免费| 国产精品女同学| 日韩精品一区二区三区中文精品 | 丁香婷婷色综合| 无套美女在线| 大秀免费色哟哟| 网址在线观看你懂的| 香港三级澳门三级人妇| 久久久久AV成人无码网站| 又黑又大无码在线观看| 79pao强力打造高清免费高| 76少妇精品导航| 未满十八免费网站禁止国产 | 国产精品无码aV永久免费| xxxx国产激情视频| 日韩无码高清| 一区二区三区熟女| 国产精品久久久久久影视| 日本高清www午色夜在线视频| 亚洲一区综合在线播放| 国产午夜无码视频免费网站| 曰批免费看| 91亚洲第一永久网站| 特级毛片a级毛片在线播放www| A无码| 国产在线观看丝袜视频| 国产综合久久久久久鬼色| 亚洲一区二区三区不卡视频| 国产沈樵AV剧情免费观看| 国产探花视频| 自慰大喷潮在线观看| 好紧好痛的视频| 国产不卡一区二区三区免费视| 玩弄少妇水真多真紧视频| 精品国产Aⅴ无码久久久社区| 无翼乌工口里番全色彩无遮拦 | 欧美日韩区1区2区3区| 西西人体大胆啪啪实拍| 性欧美videoesXXOO| 日本视频一区二区三区| 久久香蕉国产精品一区二区三| 日本三级在线观看中文字| 久久国产成人精品国产成人亚洲 | 亚洲欧美综合另类自拍| 国产肉丝袜美腿在线播放| 亚洲免费中文| 美女18禁大胸裸身网站| 国产 欧美 精品 蜜芽| 天天做天天大爽天天爱| 中文字幕一区二区在线播放| aⅴ成熟无码动漫网站| 国产尤物尤物在线看| 日韩在线一区二区三区观看| 亚洲欧美自拍制服另类图区| 国产欧美日韩精品综合| 国产三X级片| 女人的自慰免费网站| 天天做天天爱天天爽天天综合网| 久久青青草原伊人精品| 国产精品自产拍在线18禁| 久久伊人五月丁香狠狠色| 波多野结衣AV网站点击进入| 伊人大杳焦在线23| 中国美女被啪啪到高潮| 好大好黄好深视频在线观看| 女人张开腿让男人桶个爽| 人人插人人射| 亚欧洲毛片| 亚洲欧美中文字幕在线观看| 非洲人又粗又硬配种视频| 亚洲日韩欧美综合色另类小说 | ,综合网红福利一线天在线 | 亚洲 欧美 丝袜 中文 综合| 爆乳肉体大杂交soe646在线| 888福利站高清免费视频| 亚洲精品天干| 久久精品国产精品亚洲红杏| 久久机热这里只有精品首页| 国产黑色丝袜在线观看视频 | 婷婷激情五月在线| www.91尤物视频.| 18禁无码免费高黄肉网站| 波多野结衣系列无码精品| 成年视频免费拍拍| 9cao在线播放精品日韩| 日韩精品人妻系列无码专区免费| 在线亚洲v天堂a毛片| 欧美第九色| 无遮挡免费观看的污网站| 亚洲VA欧美VA人人爽色欲| 寂寞少妇中文字幕无码视频一| 在线看AV尤物| 2021精品久久久k8| 亚洲无码aⅴ在线视频观看| 亚洲中文字字幕AV影院| 全肉浪妇禽老女人| 人妻丰满AV无码区| 国产网红主播无码精品| 亚洲综合色88综合天堂| 亚洲一区二区三区成人网站| 亚洲无码午夜福利在线| 亚洲欧美性爱一区二区三区| 99国产精品2018视频全部| 又黄又爽又色网站| 又长又大又黑一进一出动态图| 好男人在线视频免费播放| 天堂无码| 加勒比人妻AV无码中文字幕| 色综合图区 10p| 精品国产成人| 男人女人免费啪啪无遮挡| 中文精品久久久久国产网| 一中文字幕日产乱码va| 亚洲熟妇10p| iGao在线视频免费播放麻豆| 他扒开我的内裤强吻着我的下面视频| 亚州精品无码久久久久av| 亚洲青青草原视频在线免费观看 | 18禁免费美女自慰网站| 老熟女免费精品视频| 欧美日韩无线在码不卡一区二区三区| 国产免费费无码一区二区三区| 97狠狠狠狼鲁亚洲综合网| 伊香蕉大综综综合久久| 一区二区三区亚洲视频| 日本无遮挡吸乳叫声视频| 国产美女被遭强| 国产老妇伦国产熟女老妇视频| 啊嗯干我在线观看| 搡女人真爽免费视频网站| 少妇一级无码av专区| 中国萝自慰网站| 少妇高潮无码自拍| 亚洲А∨天堂久久精品| 国产啪精品视频网站免费不卡| 国产丰满大乳奶水在线播放| 日本少妇湿影院| 最新精品卡一卡二| 扒女人两片毛茸茸黑森林| 可以在线看的h网站| 欧美成人影院亚洲综合图| 亚洲天天色欲| 四虎影库亚洲精品无码在线观看| 久久久久亚洲精品| 国产免国产免费| 国产专区青青草原亚洲| h福利国产精品小视频| 亚洲高清无在码在线观看| 国产精品极品美女自在线观看免费| 白嫩极品女粉嫩喷水视频的 | 久久国产精品亚洲一区二区| 亚洲免费m片在线观看| 国产午夜4k午夜福利网站| 在线国产一区二区三区| 大学生男女真的曰批视频| 大屁股肥熟女流白浆| 国产亚洲嫩草研究院久久| 亚洲免费AⅤ狼友视频| 无套内谢少妇毛片免费看看| 久久免费成年人黄色视频| 2022国产在线黄色网站| sm视频无码| 国产精品无码一区二区三区观看| 动漫精品亚洲一区二区三区| 理论喷水视频| 萌白酱一区二区在线观看| 极品三级精品在线观看| 95偷拍午夜Tv视频| 精品亚洲成a人在线观看青青| 丁香婷婷综合激情| H动漫精品网站导航| 91亚洲人成手机在线观看| 免费极品av一视觉盛宴| 女人自慰AV片天堂网| 800凹凸视频在线观看网址| 亚洲日本VA中文字幕久久| 午夜一级欧美片| 欧美人体一区二区三区视频 | swag蜜芽无码国产| 俺也去狠狠色综合电影网| 亚洲无码视屏在线免费观看| 国产91在线一区二区三区| 久久网站亚蕉| 国产午夜福利红一片| 色综久久综合桃花网| 玉米视频在线观看| 波多野结衣高清全集在线亚洲| 少妇福利水多多| 杨幂性XXXXHD真| 午夜韩国理伦免费播放| 亚洲日本韩国欧美在线一区| 国产幺女在线视频| 好黄好硬好爽免费视频天堂网| 久久久久精品免费视频不卡| 久久婷婷网站麻豆视频| 好爽…又一高潮了毛片视频一区| 美女裸体黄网站18禁| 亚洲区激情区无码区| 男人深夜影院无码观看| 亚洲AV无码专区国产乱码4se| 国产护士一级毛片| 2022av视频网站| 91国模精品| 中文字幕第一页在线无码一区二区| 亚洲裸体美女网站网址| 中文字幕人妻系列乱码| 成人爽A毛片免费软件| jk制服白丝啪啪网站| 办公室色诱在线观看无码| 免费国产交换配乱淫| 日本三级片网站| 亚洲国产一区二区A毛片| 久久国产AV一区二区水蜜桃| 亚州精品影院| 99精品国产在热2019一级毛片| 波多野结衣av一二三区| 中文字幕无码DVD| av鲁丝一区鲁丝二区鲁丝三区| 一本一本久久AA综合精品| 噜噜噜久久亚洲精品国产品91| 婷婷激情字目| 亚洲东京热风情无码播放| 制服丝袜 人妻自拍| 久草中文字| 一区二区三区高清在线观看| 亚洲综合欧美制服丝袜| 成人精品在线视频| 伊人爆乳在线观看| 国产成人精品吹潮在线观看| 黑人毛片一级| 国产成人综合亚洲av| 每天更新小啪啪拍视频99| 中日韩VA无码中文字幕| 男人无码视频在线观看| 人妻无码完整版| 亚洲一区二区三区免费看| 国产精品 动图 中文字幕| 又黄又爽又硬网站| 韩国激情高潮无遮挡hd| 24小时日本在线WWW免费的| 国产精品午夜福利不卡| 自在自线亚洲А∨天堂在线| 日本精品爱V| 亚洲嫩模爆喷白浆| 杨幂的精品三级在线观看| 午夜无遮挡怕怕怕免费视频| 人在线成免费视频性生大片免费观看| 久久国产精品一区二区| 欧美国产精品久久| 亚洲成A人V欧美综合天堂麻豆| 2022av无码视频| 亚州老头性战熟女群交| 一区二区三区精品视频| 99久久全裸视频| 色综合久久88色综合天天| 国产精品VA在线观看H| Chinese男学生打桩Gay| 特级xxxxx欧美| 国产精品美女白浆喷水| 欧美日韩国产综合视频在线看 | 亚洲av无码第一区二区三区| 中出无码一区| 18禁一进一出抽搐gif免费看| 中文字幕少妇AV| 亚洲精品无码专区电影| 男同Gay18禁免费网站| 午夜理论成人免费观看| 成人免费午夜福利片在线观看| 性欧美乱妇come| 爱v天堂在线观看| 538任你爽精品视频国产 | 69堂国产精品第一页在线| 久久网伊人| 亚洲精品色av网站| 日韩AV大高潮毛片| 夜夜看夜夜摸夜夜添| 最近免费中文字幕| 老司机视频网站| 亚洲热网| 又黄又爽的成人免费视频| 亚洲三级一区| 杨幂无码高清在线观看| 免费看女性自慰的网站| 国产精品午夜福利不卡| 国产国产成年年人免费看片| 99在线精品资源站| Jizz国产一区二区| 久久久久久久综合日本fuck| 久久96国产精品| 亚洲性爱无码av| 亚洲无码又爽又刺激| 亚洲欧美午夜福利| 成人久久电影| 免费观看性行为视频的网站| 国产亚洲精品自在久久VR| 一区二区在线播放视频| 影音先锋男人资源网无码| 69堂在线无码视频2020| 久久久99精品福利| 出差和岳梅开二度| 777电影院米奇888| 97se亚洲国产综合自在线抹茶| 晨晨国产在线观看网站| 91无码人妻一区二区三区| 无码在线色| 午夜福利网偷拍| 国产夫妻互换视频| 欧美大BBBB流白水| 精品熟女少妇免费久久| 国产永久精品一区二区污污| 波多野吉衣亚洲Av无码| 又黄又大又硬的免费网站| 国产美女被遭强高潮露开双腿| 久久亚洲精品国产精品小说| 中文字幕人妻系列人妻有码| 国产精品xxxxx色视频| 中文字幕v亚洲日本在线电影| 亚洲嫩草精品| 香港经典三级AⅤ在线看| 精美人妻与无码人妻| 国产精品亚洲专区无码破解版| 国产精品调教视频一区| 久久九九久| 午夜亚洲国产日本电影一区二区三区 | 大香线蕉伊人75网视频网站| 呦女视频精品八区| 国产AV无码专区亚洲AV桃花庵| 爆乳美女午夜福利视频精品| 高潮一进一出视频免费| 在线看你懂的亚洲| 国产婷婷综合丁香亚洲欧洲| 一本一道久久综合狠狠老| 作爱网址无码高清| 亚洲精品动漫区| 色婷婷四房| 国产三香港三级J| 国产精品成人无码视频| 极品尤物高潮潮喷在线视频| 尤物视频官网在线| 午夜爽爽爽男女免费观看影院| 无码午夜一级看片| 最新69国产成人精品免费视频 | 亚洲内谢在线| 老师好大乳好紧好深在线播放| 奇米色88欧美一区二区| 18禁黄网站禁片无遮挡观看| 久久www免费人成_看片下载| 国产在线打屁股调教网站| 92精品国产自产在线观看| 大尺度爱爱无遮观看免费| 国产精品夜色一区二区| 成 人色 网 站 欧美大片在线观看| 亚洲p对白| 67194熟妇在线现看路线1| 12周岁女全身裸在线播放免费| 性激烈的欧美三级视频| 国产午夜在线观看一片红| 欧美制服丝袜人妻另类| 亚州a√看网| 高潮白浆女免费观看| 国产精品亚洲精品日韩已满| 国产各种高潮视频| 久久人人爽人人爽人人片dvd | 亚洲日本在线视频每日更新| 亚洲欧美日本久久网站| 啊好粗受不了了视频| 欧美第一次开笣| 日韩精品无码一区二区三区久久久 | 大又大粗又爽又黄毛片| 1000又黄又爽的视频免费看| 极品少妇中文字幕| 浪潮av无码| 综合AV第1页| 国产在线精品新人| 2022国产免费黄色网站视频| 久久九九久精品国产综合| 久久精品女人天堂AV下载| 床震吃乳强吻扒内裤漫画| 国产精品日本一区二区三区在线| 全球AV导航在线观看| 欧美亚洲国产精品久久高清| 天天躁日日躁狠狠躁欧美| 日日舔夜夜摸| 日本激情一区二区三区| 人妻龙腾无码| 少妇饥渴偷公乱视频| 香蕉视频久久久| 黄色视频一区,二区,三区| AV换脸在线观看| 8x国产福利导航| AV无码精品在线观看| 大学生无套带白浆| 2021在线视频你懂得| jk白丝高潮喷水视频免费看 | 又又又爽又黄的美女网站 | 18禁又污又黄又爽的网站不卡| 亚洲成熟XXXX| 又爽又黄又无遮掩的免费网站| gay男男自慰免费播放 | 亚洲啊啊啊视频在线| 国产白丝喷水| 欧美日韩一区二区综合| 人妻龙腾无码| 夜夜高潮夜夜爽影院| 亚欧美闷骚院| av中文字幕潮喷人妻系列| 日韩AV手机在线观看蜜芽| 亚洲按摩在线播放| 吃奶揉捏奶头高潮在线观看| 波多野结衣国产| 日本不卡不码视频在线观看| 大学生无码日韩| 无遮高潮国产免费观看| 日本大乳高潮视频在线观看中文| 亚洲成av人片高潮喷水| 国内少妇自拍区免费视频| 亚洲AV无码国产综合专区| 午夜精品视频小蝌蚪在线观看| 久久少妇免费精品| 亚洲一级无码一区二区三区。| 依依成人亚洲视频| 亚瑟在线无码| 中国精品黄片| 日日摸日日爽爽歪歪| 欧美国产成人精品一区二区三区| 99视频精品全部观免费| 国产日韩未满十八禁止观看| 高中生第一次破处国产av| yy111111少妇影院中文字幕| 久久久亚洲欧洲日产国码是AV| 俄罗斯女女13破苞视频| 亚洲视頻4438| 人妻AV无码在| 国产剧情强姦玩弄丝袜脚| 亚洲无码国产精品免费| 呦导航国产在线| 国产精品又黄又爽又色视频| 日韩最新黄色网站| 亚洲欧美日韩一区| 人妻无码加勒比| 棚户区老熟女自拍视频| 亚洲综合久久一区二区| 久久俄罗斯精品播放| 午夜色大片在线观看免费| 日韩av色色网| 国产精品日韩无卡一区二区| 亚洲春色无码| 亚洲国产精品尤物yw在线| 一本加勒比HEZYO无码专区 | 日韩精品久久无码中文字幕| 极品粉嫩小泬20p图片| 国产最新进精品视频| 男女边摸边吃奶边做视频免费 | 99久久免费精品国产免费高清| 人禽杂交18禁小说| 亚洲天堂有码| 国产毛片高清一级国语| 性爱视频在线播放| 69式真人无码视频免费| √天堂网最新版在线中文一区| 亚洲成a人| 国产有码一区二区| 色多多成视频| 嗯啊哦视频在线观看网站| 久久久久久久久a| 无码精油按摩潮喷在线播放| 一区二区三区精品视频日本| 67194熟妇在线观看| 国产福利孕妇| 97久久超碰成人精品网页 | 厕所视频BBBWWW| 成人无码视频在线观看大全 | 精品久久人人妻人人做精品| 精品特色国产自在自亚洲| 国产日日夜夜精品| 真实国产乱子伦精品一区二区三区| 国产啪精品视频网站免费不卡 | 日韩在线直播天堂Av| A一级黄色网站| 1313国产午夜精品理论片| 手机在线观看Av网| 在线观看激情小视频免费| 亚洲日韩精品欧美一区二区 | 中国男同GayAv网站| 五月男女激情网| japanese50日本熟妇| 亚洲成AV人影院在线观看网| 东京热 精品| 99久久99久久国产| 2020av 天堂网| 嗯,嗯别揉我乳头在线视频| 久久亚洲日产国码av| 粉嫩白丝jk被啪到喷水| 日韩人妻无码一区二区三| 在线日韩欧美国产二区| av换脸手机在线| 国产精品黑色丝袜在线播放| 日日操夜夜添| 香个色成长视频在线观看免费| 精品韩国亚洲av| 好爽好硬视频激情四射啊啊啊啊| 狠狠躁夜夜躁人人爽天天30人| 久久人人爽人人双人一只人片aV| 男女爽爽午夜18禁影院| 国产精品嘿咻嘿咻网站视频| 无码人妻一区二区三区免费费| 超级碰碰青草免费视频| 风间由美 一区二区| 在线观看精品视频看看播放| 国产精品老女人精品视频| 国产精品女同一区二区| 宅男噜噜噜66网| 成人无码区在线观看| 嗯啊好大插我日韩在线视频| 亚洲成av人片达达兔| 中国人免费观看的视频在线| 亚洲高清无码8v在线视频| 精品国产亚洲AⅤ麻豆| 无码国产外流| 海量AV不卡高清| 国产大全乱伦不卡中文字幕电影网| 国产美女一区二区在线观看| 国产无码视频一区| 正在播放欧美女同一区二区| 中国破外女出血毛片免费| 精品国精品国产自在久| 国产私拍写真福利写真| 欧美大BBBB流白水| 亚洲少妇性爱视频| 爱情岛论坛网站十八禁| 好爽好紧好大的免费观看| 免费午夜爽爽爽WWW视频十八禁 | va不卡一区二区三区得| 日韩人妻无码精品无码中文字幕| 99re6在线视频精品免费| 日韩精品无码 一本二本三本| 国内揄拍国内精品少妇| 欧美牲交a欧美牲交aⅴ另类畅通观看 | 被一群男人玩得嗷嗷叫小说| 亚洲欧美成人a∨| 亚洲Av曰韩精品久久久久| av一区二区三区在线观看| 按摩福利视频网址| 在线观看片免费观看不卡| 免费又爽又大又高潮视频| 一级a做片性视频每天噜噜| 精品国产免费久久久久久| AV 手机天堂| 又黑又大无码在线观看| 粉嫩一级免费毛卡片| 国产成人av性色在线影院| 亚洲AV日韩AV不卡在线观看| WWW欧美激情| 中国又粗又大又爽的毛片| 27XXOO动态图178期试看| 如狼似虎的熟妇14p| 国内永久福利在线视频| AV天堂免费网| AⅤ无码专区东京热| 国产乱子伦| 亚洲精品无码动态图| 成人国产一区| 在线精品视频一区二区三四 | 国产歌舞一区二区| 亚洲日韩国产精品不卡一区在线| 亚洲尤物视频在线观看| 国产精品无码aV永久免费| 中文字幕色婷婷| 中文无码11p| 久久不卡一区二区三区| 中国精品少妇hd| 不卡人妻无码H视频| 亚洲国产精品嫩草影院在线观看| AⅤ无码精品视频| 日韩特级AAAA片| 在线理论三级午夜电影| h色网站在线观看| 公共女沟厕高清偷拍| 国产在线jyzzjyzz免费| 亚洲日本VA午夜在线电影| 中文字幕第2页| 黄在线看片免费人成视频不收费| 国产专区女高中生第一次在线| 亚洲二区在线观看| 在线无码华人| 被拉到野外强要好爽| 亚洲成av人无码综合在线| 午夜国产小视频| 一本大道道香蕉a高清| 波多野结衣高清免费不卡av| 8x视频免费在线观看| 52AV我爱AⅤ一区二区三区| 99久久成人| 又硬又水多又坚少妇18p| 亚洲色欲色欲WWW在线看小说| 很黄很爽的视频网站| 一本大道AV网站| 动漫在线无码一区| 国产特级婬片免费看| 国产青年GAY同男视频迅雷下载| 国产一区二区三区小说| 亚洲精品国产肉丝袜久久| 国产亚洲三级片免费看| 久久综合久久综合久久综合久久综合| 国产在线视欧美亚综合青| 中文精品久久久久国产| 一区二区午夜福利试看| 东北妇女不戴套对白视频| 当众露出奶头玩弄h视频| 欧美黑人性暴力猛交喷水| 有机ZZ国产精品视频| 一级女人自慰大片| h黄免费观看在线视频| 国产精品闺蜜在线| 免费无遮挡无码视频在线观看 | 2022av在线视频| 国产走光合集视频一区| 18女下部被啪到流水视频| 白丝护士高潮喷水网站| 嗯啊嗯啊黑人在线视频| 337p西西人体大胆搬开下体| 亚洲无码爱| 欧美人成在线视频| 女同事醉酒被迷奷系列在线观看| 三级黄色网站| 老子影院午夜伦不卡| 91偷拍老熟女| 美女自慰黄网站| 亚洲综合在线电影二| 极品尤物在线十八禁| 久久人人爽人人片AV欢迎您| 亚洲性爱一区| 大臿蕉香蕉大视频99| 熟女啪啪Av免费| 中国一级毛片视频免费看| 亚洲精选自拍不卡| AV高潮喷水出白浆| 曰本无码人妻丰满熟妇啪啪| 欧美综合自拍亚洲综合百度| 丁香五月亚洲中文字幕| 一本久道综合在线无码88| 亚洲色欧美另类| 成人精品日本亚洲777| 18禁黄无遮挡网站免费| 亚洲国产精品尤物YW在线观看| 精品少妇精品久久久| 国产午夜无码片在线观看影视| 日韩系列第一页| h动漫尤物视频| 尤物白浆在线观看| 18勿入自慰网站免费永久| 少妇高潮视频在线观看| 欧美色色999| 又粗又硬又长的的免费视频| 爆乳闺蜜在线观看| 一级黄色特级片| 波多野结衣天堂网| 久久五十路av| 国产精品无码久久av不卡| 国产国语一区二区三区| 免费xvideoa在线视频入口| 午夜福利国产成人无码| 在线观看你懂| 国产美女直冒白浆免费视频| 综合国产精品私拍国产在线| 久久免费视频无需播放器| 亚洲成av人一区二区密柚| 日本不卡网站免费在线观看| 久久综合97色| 丰满人妻连续中出中文字幕在线| 国产成人久久精品一区二区三区| 国产精品三区不卡| 国产不卡a高清视频浪潮情侣| 动漫专区自拍亚洲| 一本二本韩国黄片视频| 亚洲国产精品久久久久久网站| haodiaocao妞这里只有精品| 午夜性999性久久久久| 大屁股无码人妻视频| 日韩不卡一二三区| 自卫喷水在线| 荡女精品| 2020国自产拍国产小视频| 一本一道波多野结衣av无码| 色费女人18毛片A级毛片视频| 久久网站免费观看| 美女裸胸又黄的网站| 亚洲人成线无码7777| 亚洲无码精品片| 中文字幕天堂网| 全亚洲最大的偷拍网| 亚洲a免费在线观看| 人人妻人人澡人人爽欧美一区九九| 亚洲欧美一区三上悠| 激情中文丁香激情综合| 伊人亚洲国产卡通| 无码人妻丰满熟妇区网站| 亚洲av成人午夜电影在线观看| 色午夜影院的| 久久久久精品黑人与日本人| 在线看日本十八禁免费网站| AV人妻无码不卡手机在线| 久久99国产精品久久99蜜桃| 69堂福利精品| 禁止18点击进入在线看片尤物| 国产老师精品视频| 毛片一级精油按摩无码| 插入无码在线免费看| 熟女国产福利| 国产在线第一区二区三区| 粉嫩metart女人下部| 2021国产在线精品网站| 九九九免费观看视频| 永久免费毛片免费| 最新永久无码AV网址亚洲| 亚洲欧美国产精品专区久久| 热久久免费费视频| 1024国产精品永久免费| 国产人成午夜免视频网站| 国产免费网址看AV片| 妓女妓女影院妓女影库妓女网| 大尺度视频网站无码| 综合色区亚洲熟女妇p| AV天堂啪最新地址| 久久久久久国产精品MV| 午夜tv视频免费国产区4| 国内美女直播流白浆| 亚洲av无码一区东京热| 十八禁无码白丝袜免费| 一区二区三区aⅴ无码| 亚洲熟女偷拍| 亚洲中文无码av永久不收费| 久久AV免费观看| 亚洲高清国产拍精品青青草原| 欧美男男gv免费网站观看| 国产大全国际久久亚洲精品视频| 国产污污污免费网站入口| 无码专区丝袜在线播放| 一级在线黄色毛片| 久久久久久久久久久精品| 久久99精品国产麻豆蜜芽| 99久视频一区视频二区视频上去| 18成年免费视频又爽又黄| 婷婷激情久久丁香综合伊人| 国产午夜福利免费视频网站| 好紧好浪我好爽AV| 久久网站苍井空免费av片| 九七超碰| 11周岁女全身裸自慰网站免费| 久久五十路av| 国产色视频一区二区三区| 中文字幕,日韩欧美一区二区| 99护士自拍高潮在线| 么公的好大好硬好深好爽视频| 国产超短裙丝袜在线观看| 成 人动漫a v 免费观看| 好爽好黄好大我要喷水了视频| 亚洲熟妇无码AⅤ在线播放| 国产美女啪啪啪| 直接看不卡无码免费视频| 国产精品ⅴA在线观看H| 狠狠躁夜夜躁人人爽天天| 亚洲情a成黄在线观看| 久久综合九色欧美综合狠狠不卡 | 1024手机在线看片| 国产乱理伦片在线观看| 小浪货腿打开水真多视频| 亚洲综合一区无码精品| 免费少妇精品毛片| 两女女百合互慰av赤裸无遮挡| 中文教师高清无码| 亚洲黄色网站观看视频 | 成 人 网 站 免费 AV| 中日欧美韩国在线观看| 国产肉丝袜在线视频一区| 久久久精品少妇| 高清丰满少妇被爆白浆视频| 精品国模一区二区| 国产成人精品吹潮在线观看| 又大又粗又又爽a毛片| 波多野结衣av不卡中文| 97人妻中文字幕总站| 国产aⅴ丝袜旗袍无码麻豆| 国产成a人片在线观看视频下载| 无码毛片一区二区三区视频| 久久a免费视频| 亚洲欧美a| 亚洲黄色在线网站| 久久国产一区二区日韩Av| 午夜免费福利视频| 成人免费毛片一区二区三区| 精品国产第一页动漫| 制服丝袜AV专区| 手机在线播放的AV| 在线手机AV 网站| 高潮视频免费网站| 大香伊蕉国产网站| 久久制服丝袜中文字幕亚洲| 国产福利小电影| 国产在线视精品在一区二区| 日本护士吞精囗交视频荔枝| 嗯啊嗯啊不要午夜免费福利视频| 久久亚洲道色婷婷| 午夜福利深夜xx00动态视频| 国产女人三级AV| 亚洲gv网址在线| 2020天天狠天天透天干天天| 高H免费观看视频网站| 尤物视频网站免费| 天天玩夜夜玩夜夜叫视频| 曰批女人爽的视频| 亚洲白嫩美女在线| 国产美女喷蓄高潮| 国产在线日韩| 精品一区二区三区无码免费视频| 国产干逼视频| 色网在线观看| 中国产无码一区二区三区| 亚洲午夜激情视频| 在线的人妻毛片| 亚洲无线码在线一区观看| 一本大道无码国产在线 | 日韩精品观看| 91福利社区在线观看| 一本色综合久久| 免费在线国产一区二区三区精品 | mm131美女做爽爽爱视频| 无套白浆农妇大屁股| 国产2022免费视频| 午夜视频久久网站| 又大又粗又长外国一级| 天然素人初次拍AV在线| 一区国产传媒国产精品| 麻豆久久婷婷五月综合国产AV| 狼友av永久网站免费观看| 亚洲激情视频图片| 伊人狠狠色丁香综合尤物| 中文字幕一区二区三区精品| 国产麻豆媒一区一区二区三区| 百合av一区二区三区| 永久免费不卡在线观看黄网站| 欧美熟妇乱子伦xx视频| 国产女主播在线视频一区| 国产日韩欧美久久久精品图片| 国产高清精品一区二区三区| 777琪琪电影网午夜理论片| 最新福利视频午夜| 青草久久久国产线免费| 伊人久久青青草综合网| 久久精品国产福利国产琪琪| 欧美破处大片| 中国高清在线看尤物| 亚洲色国产AV天堂| 99精品视频一区在线视频免费观看 | 在线看国产一区二区三区| 97精品久久久久中文字幕| 一本一道波多野结衣av无码| AV无码精选| AV影院无码| 黄色视频免费二区| 欧美人妻aⅴ中文字幕| 永久免费AV无码网站国产岛国| 国产精品图片视频| 大香伊蕉最新视频| 中国农村河南妇女BBW| 亚洲欧美你懂的| 岛国在线永久免费视频| 少妇无码一区二区二三区| 人妻少妇被猛烈进入中文字幕 | 中文字幕男人的天堂在线观看| 中国大屁股HDXXXX| ⅹxⅹ茸茸黃色視頻,| 少妇高潮太爽了在线播放| 免费午夜在线视频| 国产欧美精品一区二区三区| 爱爱网站无码视频免费| 无码精油按摩潮喷在线播放| 在线丝袜麻豆国产欧美激情| 亚洲精品美女网站久久m| 国产精品久久影院| 日本护士吞精囗交在线| 色多多看片导航| 久久国产精品偷任你爽任你| 久久精品中文字幕无码| av无码东京热亚洲男人的天堂| 国产AV无码专区亚洲AV极速版| 永久免费提供强奷乱码中文字幕| 亚洲欧美成a人视频在线观看 | 国产高清无套内谢| 婷婷色国产精品视频一区| 日韩一级精品视频在线观看| 贵州少妇一级毛片| 亚洲真爱av午夜片| 精品福利视频搜索| 张柏芝 欧美 一区 二区| 中文字幕日韩欧美一区二区三区| 少妇夜夜春夜夜爽试看| 久久久亚洲经典视频| 打香蕉av在线| 亚洲播放精品无码| 午夜无遮挡男女啪啪免费软件| 久久精品国内少妇| 国产精品 女教师| 男女日批视频免费看| 91系列在线观看免费| 久久综合亚洲色社区| 亚洲欧洲日产码手机avt天堂| 国产高跟丝袜脚交视频| 中出老熟女中文字幕| 97人人爱| 黄色小视频在线观看| av天堂毛片| 中文字幕无码区一区二区| 国产欧美日韩在线观看一区二区| 亚州欧美日韩一区二区三区在线| 亚洲成a人片免费在线观看中文| 久久久久久久精品女人毛片| 中文字字幕人妻中文| 成a无码| 国产第一页污| 国产免费人成视频xvdeos| 熟女无套高潮内谢吼叫| 久久精品欧美日日躁| 污黄啪啪网18以下勿进45分钟| 国产风韵忧存丰满大屁股| yyy111111理论片| 亚洲成Aⅴ人的天堂在线观看女人 青草青草久热精品视频在线百度云 | 国产精品一区二区久久精品涩爱 | 国产视频A级片| 亚洲欧美精品伊人久久| 热久久国产最新地址获取| 午夜亚洲AⅤ无码高潮片天美传媒| 18禁真人床震无遮挡α片| 狼友视频在线播放职业色| 18极品美女福利在线观看| 天堂在线观看AV| 九九热这里有精品| 亚洲无码自拍强奸中文字幕| 黄在线看片免费人成视频| 初音在线国产| 爽爽在线看片免人成视频播放 | 亚洲欧洲精品在线| 国产精品毛片app| 边做边叫床视频播放| 2021自拍偷在线精品自拍偷| 亚洲成AV人影院| 白丝jk高潮喷射在线观看| 国产精品自产拍在线观看动漫| 亚洲日韩精品欧美一区二区| 曰批视频免费看40分钟| 爆乳美女午夜福利视频精品| 亚洲成av人片在线观看不卡| 在线亚洲男人深夜影院| AV片国产在线观看不卡| 国产精品天干天干| 亚洲无码黄片| h高潮娇喘抽搐视频| 欧美a级毛欧美1级a大片免费播放 啊灬轻点灬视频在线观看 | aⅴ看片不卡| 久久国产品野战| 亚洲综合国产精品无码一区二区| 一级特黄aa大黄毛片| 日韩精品在线h| 亚洲国产精品久久电影欧美| 外国小屁孩cao大人免费| 国产偷国产偷亚洲高清人 | 国产良妇出轨视频在线| 亚洲国产一区二区在线电影| 中文AV英文无码| 丁香五月缴情在线中文视频| 日本护士吞精囗交图| 日美欧韩一区二去三区| 亚洲无码涩网| 怡红院亚洲第一综合久久| 国产男女男免费视频软件| 无码人妻精品丰满熟妇区| 人妻丝袜乱经典系列| 曰本一道本高清aⅴ不卡视频| 丝袜屈辱日韩国产| 国产手机在线一级免费视频| 黄页网站免费高清在线观看| 亚洲日韩AV动态图| 亚洲无码色视频| 成·人免费午夜无码视频蜜芽| 白丝袜网站在线观看| 伊人久久青青视频五月天激情| 在线亚洲97se亚洲综合在线| 国产美女一级A级毛片| 久久麻豆国产精品| 青青热久免费精品视频在线播放| AV黄片在线| 4p天堂在线免费观看| 最新亚洲AV日韩AV一区二区三| 精品人妻无码一区二区在线影院| 国产情侣高潮露脸| 国产免费一区二区三区VR| 无码少妇一级AV片在线观看| 日日摸夜夜添夜夜添无码| metart精品嫩模asspics| igao国产精品| 大屁股色视频在线观看| 粗了大了整进去好爽视频| 久久高潮久久久久久| 超黄视频在线看禁18| AV天堂手机福利网| 嘿咻嘿咻免费区在线播放| 亚洲最大黄色网站在线免费观看视频| 狠狠涩尤物| 777尤物精选在线观看| 亚洲AV无码一区二区三区人奶水| 午夜福利精品亚洲不卡DY888| 亚洲αv在线精品糸列| 亚洲AV无码精品狠狠爱| 色噜噜最新网| 一个人看的www免费视频在线观看 存在非法字符,请返回更换! | av另类少妇| 中文字幕专区高清在线观看| 久热亚洲视频| 性国产牲交XXXXX视频| 自拍偷拍一区二区三区日本23| 国产va免费高清在线观看| 亚洲第一无码人成影院| 亚洲天堂小视频| 日本精品一区二区三区在线| 国精品无码一区二区三区在线| 车车好快的车车污真人网站| 自拍偷拍导航| 美女自慰爆浆在线观看| 欧美性爱另类亚洲二区| 东北女人毛多水多视频| 国产午夜亚洲精品不卡| 毛都没有就被开了苞在线电影| 91久久愉拍愉拍国产一区调| 国产午夜福利在线机视频| XXXXX在线尤物| 中国av白嫩丰满人妻无码| 国产超薄白丝袜在线观看| 新免费观看包含亚洲有码| 中国国产成人久久| 成片一卡二卡三卡破解版| 亚洲av无码专区青青草原| 人妻龙腾无码| 呦男呦女视频精品导航| 无码人妻一区二区三区四区av | AV高潮在线免费观看| 超喷潮AV网| yy111111少妇影院免费无码| 岳的下面又大又黑又肥| 免费看少妇作爱视频| 40岁成熟女人牲交片| h动漫无遮挡成本人h视频| 国产成人一区二区三区影院| 又大又硬又黄的免费视频,| 2021在线视频你懂得| 国产成人久久久久精品| 亚洲va韩国va欧美va| 极品 在线 视频 大陆 国产| 精品中文字幕有码?屁网站免费| 国产尤物精品193| 2020亚洲免费无码| 中出熟女俱乐部| 免费无遮挡禁18污污网站| 亚洲无aV码在线中文字幕| 熟女性高潮视频网站 | 成 人 h 动 漫3d在线播放| 亚洲一二三区久久五月天婷婷| chinese熟妇与小伙子mature| 国产一精品一aV一免费| 永远免费的啪啪免费观看高潮| 野草社区在线高清视频在线放映| 亚洲婷婷网| 久久夜色精品国产亚洲| 小草在线资源视频免费观看| av在线麻豆动画| 熟女av五十路俱乐部网站| 办公室揉着她两个硕大的乳球| 波多野结衣无码电影一区二区在线播放| 在线视频美女日韩一区| 午夜小视频免费观看| 老司机在线天堂免费看av| 日本网站在线看| 成人a毛片免费观看网站| 国产激情久久| 国产h在线| 九九99精品视频| 少妇被粗大的猛进出| 国产亚洲无码高清视频| a在线观看v视频| 日日摸夜夜添无码| 国产一区二区三区不卡观| 麻豆精品新a v视频中文字幕 | 下面喷水了好爽视频| 亚洲男人的天堂在线观看2020| 97超碰国产精品无码| 屁屁影院国产| 91超碰caoporon最新网站| 久久精品女人天堂aaa| 丝袜 亚洲 另类 欧美 变态| 941国产高清资源在线观看| 无码囯产精品一区二区免费| 在线天一天看片视频免费观看| 亚洲精品资源在线| 成Av在线免费观看| 日韩免费A视频| 亚洲熟妇久久| 久久SE精品一区二区| 亚洲强奸无码| 久久综合九色综合网站| 欧美成人色| 同性男男黄h片免费网站| AV无码永久免费网站| 男女猛烈无遮激烈太紧动态图| 亚洲av片在线观看| 《五十路》久久| 亚洲综合av永久无码精品一区二区| 网址在线观看你懂的| 久久久久亚洲精品影视| 中文字幕a视频直播| 亚洲AV无码成人精品区网页| 成熟女人网站| 国产成人AV无码精品| 亚洲中文精品久久久久久| 国产麻豆一精品一av一免费| AV性色在线| 久久综合av色老头免费观看| 曰本一道本高清aⅴ不卡视频| 加勒比中文字幕在线播放| 亚洲影院欧美| 娇妻互换享受高潮| 好深好爽办公室做视频| 凹凸视频在线亚洲天堂在线视频| 国产极品视觉盛宴在线观看| 亚洲av永久无码青青草原| 精品国产国产综合精品| 国产无遮挡吸奶头视频免费| 亚洲欧美日产国产| 亚洲成AV人不卡无码| 亚洲日韩中文第一精品| 人妻无码一区二区视频| 日韩国产亚洲欧美中国V| 丁香五月开心综合在线| 国产自产视频在线观看香蕉| 伊人色综合AV| 人妻少妇精品久久久久久| 影音先锋国内自拍| 欧美视频九九一区二区| 久久女人天堂| av边做边流奶水无码| 亚洲精品国产精品乱码在线观看| 看美女少妇裸体视频| 嫩草研究院久久久精品| 作爱全过程无码免费| 中文字幕在线欧美日韩制服| 免费无码毛片一区二区| 日韩精品一区二区三区中文精品| 狠狠地综合| 亚洲AV男人的天堂在线观看| 午夜福利网站免费| 最新无码av| 九九99久久精品综合| 精品视频黄色网站| 丰满少好被猛烈进入高清播放| 亚洲欧美一区男男| 久久天天躁狠狠躁夜夜免费观看| 99久久这里只精品国产99RE| 天堂网www在线资源网| TD天堂网www在线资源| 丝袜无码中文字幕在线手机| 国产AV 第一页| 性爱视频免费大陆| 亚洲nAV成人无码一区在线观看| 又黄又硬又色又湿视频网| 亚洲国内精品久久| 裸妇厨房风流在线观看| 嫩草研究所av| 亚洲又黄又刺激| 和少妇中文字幕| 亚洲AV永久无码精品表情包 | 正在播放亚洲无码中文| 正在播放国产强啪| 天天天天做夜夜夜夜做| 国产真实初高中生在线| 产亚洲综合久久系列| 夜夜摸夜夜添夜夜添破| A片_在线播放| 软萌小仙女jk自慰吹潮| 又粗又大又长视频国产| 国产欧美日韩综合福利| 少妇无码一区二区三区免费 | 日韩 av 导航 人妻| 亚洲一区导航| 啊不要别舔我高潮了啊视频在线观看| A级黄色视频无码的| 亚洲东京色一区二区三区| 在线观看美女不摭挡毛片| 欧美亚洲综合在线| 最?好看最新中文字幕2019最新資訊 | 国内自拍视频一区二区三区| 亚洲丝袜无码高清| 一本色道国产在线观看二区| 丰满少妇BD正在播放| 国产91 对白在线播放九色 | 我不卡亚洲一本| 中文有码vs无码人妻麻豆| 56pao免费在线观看| 91极品国产尤物| 大尺度摸胸吸奶视频网站| 国产白嫩漂亮的大学美女| 中文字幕欧美日韩一区二区三区| 四库影院永久国产精品| 幺女网站国产| 亚洲AV无码一区二区一二区教师| 9久久精品视香蕉蕉| 91熟妇| 狼友av永久网站免费观看| 肉欲在线天堂| 被强到爽的邻居人妻完整版| 国产vr精品专区| 9丨老司机福利在线视频| 日韩人妻无码精品久久不卡| 91麻精品国产自产| 亚洲免费影院香蕉| 国产肥熟女视频一区二区三区| 猛进猛出gif动态图| 美国黄片一区二区三区| 亚欧成人中文字幕一区| 姉欧美日韩国产精品777| 被公侵犯人妻少妇一区二区三区| 日韩精品免费在线观看| 8x成年视频在线观看| 最新亚洲人无码播放网站| 最新亚洲AV日韩AV二区| www日韩| 欧美牲交黑粗硬大| 亚洲日韩AV在线波多野结衣| 一级伦奷视频无遮挡| av网址手机在线| JAPANESEHD国产在线看分类| 在线亚洲综合11p| 一本色道无码道在线观| 欧美亚洲另类精品第一页| 好深好大视频国产| 久久精品丝袜不卡| 国产精品无码天堂2021| 国产夜夜福利电影| 蝌蚪视频在线国产| 自慰高潮免费在线观看| 亚洲欧洲中文高清| 超踫在线中文字幕| 久久久久久AV无码免费网站下载| 在线 欧美 中文 亚洲 精品| 亚洲最大色大成网站www国产| av合综无码中文字幕| 久久这里精品免费人妖| h成年动漫在线播放| 国产 亚洲 制服 无码 中文| 青青国产精品| 欧美性爱男人天堂| 久久福利新地址| 18禁止爆乳美女高潮喷水| 亚洲高清情侣网站| 爽爽婬人综合网网站| 无码Av在线一区二区三区| 亚洲国产精品无码久久一区二区| 97影院九七理论片| 18禁真人床震无遮挡α片| 丁香激色综合网| www亚洲一二三区| 国产美女清纯呻吟在线观看| 亚洲精品乱码白浆高清久久久久久| 欧美一级人与嘼视频免费播放| 中出高潮流白浆视频| 男女啪激烈高潮喷水动态图| 精品国产一区二区三区| 无遮挡十八禁在线视频国产制服网站| 国产va免费精品观看| 亚州AV永久无码天堂| 国产精品 久久久| 国产色大成网站| AV一区二区三区无码| 国产免费一区二区三区| 色综合另类小说图片区| GOGO全球人体亚洲高清大胆| av一本久道久久综合久久鬼色| 无遮挡免费观看的污网站| 欧美日韩国产视频二区| 国产日产av| 精品一区二区三卡四卡网站| 午夜福利男女XX00视频免费区| 美女裸体18禁免费网站| 免费20分钟超爽视频| 国产 日韩 另类 视频一区| 8090碰在线视频| 无码四区| jk白丝自慰播放器| 亚洲综合网址| 国产亚洲精品美女久久久m| 18以下勿进色禁网站大全视频| 中文字幕无码av正片av| 亚洲日韩激情无码一区| 污污在线观看国产黑丝| 草棚caoporon入口| 国产一级牲交片高潮免费| 久操无码伊人| 青榴A免费在线视频| 干亚洲少妇| 国内精品自线在拍精品| 杨幂无码高清在线观看| 亚洲综合一区国产精品| 经典国产乱子伦精品视频| 正在播放老熟女高潮| 国产免费11P| 国产做无码视频在线观看4388| 亚洲黄色视频图片| 亚洲精品国产摄像头| 天天天爱狼狼狼色| 亚洲男人天堂2020| 久久国产品野战| 大屁股夹得好紧 好爽视频里| 老熟女性奴视频| 免费无码又爽又刺激又高潮的视频| 人妻无码免费一区二区三区| 久久精品国产99久久美女 | 最近更新中文字幕2019视频| 亚洲中文字幕无码不卡电影| 亚洲小说图区综合在线| 亚洲乱色伦图片区小说| 亚洲乳大丰满中文字幕| 2022最新自拍视频在线观看| 娇喘视频大全在线| 国产免费啪啪| 国产女人乱子对白av片| iGAO视频网免费观看| www久久播免费视频| 国产无遮挡高潮| 337p日本欧洲亚洲大胆色噜噜| 色999欧美日韩| 亚洲最新版无码AV| 亚洲天堂少妇88| 亚洲最大在线精品| 孕妇国产一级aV片免费观看| 人人人澡人人人妻人人人少妇| caopon超碰最新| 成 人 漫画 av 在 线 免费| 天天爽爽夜夜爽爽精品视频| 亚洲性色永久网址| 久久香蕉综合色一综合色88| 中文字幕无线码一区3dr| 超污黄色网站| 欧美人体视频一区二区| 午夜视频免费入口| 韩国AV免费在线观看| 欧美俄罗斯xxxx性视频| 最新国产女同视频| 国产第一页污| 不卡人妻中文字幕| heyzo无码专区| 国产欧美久久久久久精品一区二区| 日韩一区二区在线免费观看| 欧美性受xxxx黑人xyx性爽 | 久久网站免费观看| 亚洲阿v天堂视频在线观看| wwwxxxx色免费| 国产 欧美?亚洲?日韩视频| av不卡最新无码专区| CHINESE男独自宿舍白袜自慰| 国产精品777777| 亚洲国产成人精品无码一区二区| 午夜福利精品视频免费看| 欧美成版人版在线播放| 8888四色奇米在线观看| 亚洲A色在线视频| 国产2018大屁股福利| 亚洲啪啪色图| Japanese中文无码在线| 超碰91在线蜜月| 日韩一二三无码专区| 永久无码在线观看| av免费在线观看国产| 手机在线播放的AV| 国产美女AV在线免费观看| 波多野结衣AV免费一二区| yw193国产在线观看| 在线青草香蕉在线播放| 放荡少妇一区| 老司机午夜视频十八福利首页| 超碰三级| 毛片在线区| 激情另类小说区图片区视频区| 日本护士色XXXXX| 久久久久放荡闺蜜| 国产精品亚洲а∨天堂2021 | z0z0z0女人极品另类zozo| 亚洲高清精品50路| 97中文字幕| 99在线观看一区二区三区| 亚洲一区二区三区免费看| 免费视频A级毛片免费视频| 日韩永久免费无码AV电影| 2021国产最新无码精品| 欧美性大战XXXXX久久久| 亚洲AV综合色区手机无码一区| 久久精品国产亚洲7777| 69天堂在线视频| A级理论视频| 性高久久久特级| 国产欧美日韩伦中文| 特级淫片女子高清视频国产片| 亚洲欧洲性AV| 免费时看午夜福利免费| 麻豆国产AV床下闺蜜| 穿丁字内裤带着震蛋出门小说| 成人国产精品免费视频| 白丝羞羞视频在线看| 秋霞鲁丝无码一区二区三区黄| 午夜福利青春青草久久| 亚洲av乱码一区二区三区林ゆな| 亚洲国产综合精品中文第一区 | 国产打屁股在线播放91| 无遮挡又黄又刺激的视频在线观看| 午夜福利青春青草久久| 3Dh版动漫视频在线观看| 国产一区二区怡红院| AV性天堂高清在线观看| 成年男女视频免费网站有哪些| 草莓视频免费在线观看| MM131美女黄的久久免费视频| 337p日本欧洲亚洲大胆艺术图| 国产原创精品巨作无遮挡| 婷婷 欧美性爱| 曰本www在线视频| 亚洲最大的激情4438五月| 国产女人喷浆在线观看| 岛国AV一区二区在线| 国产午夜福利精品无码| 亚洲av产在线精品亚洲第一站| 国产自慰在线| 亚洲毛片www网在线| 国产精选污视频在线观看| 爆乳放荡的女医生bd在线观看| 无码A∨高潮抽搐流白浆| 2019亚洲精品无码在线| 亚洲无码动漫强奸在线播放| 四虎永久免费一级毛片| 国产成人无码影片在线观看| 亚洲精品无码永久在线观看| 日本系列亚洲系列精品| 动漫在线无码一区| av免费在线播放网址| 一级毛片无遮挡直接看| 粗大挺进尤物人妻| 124区啪啪免费视频| 69av,中文字幕在线观看| 国产 亚洲 制服 无码 中文| 制服丝袜无码在线视频| 亚洲av日韩av无码尤物| 欧美成人精品三级网站| 午夜一级AV大片| 另类,国产丝袜美女| 国产粉嫩美女| 700AV第一福利在线导航| 558aatv一区二区三区| 中出老熟女中文字幕| 国产欧美日韩在线精品| 日本大综合色| 国产福利暗网禁哟在线| 韩国v欧美v亚洲v日本v| 在线精品96| 精品国产电影免费在线观看| 手机AV在线天堂观看网站| 亚洲精品tv久久久久久久久久| 日韩中文字幕dvd在线| 男人j捅女人p| 人妻喷白浆无码系列| 国产成人精品男人的天堂网站| 亚洲爱爱网| 亚洲AV秘 无码一区二区三区久| 伊人无码高清在线视频| 别揉我奶头~嗯~啊~在线视频| 狼友国产福利在线| 无码影视不卡| 亚洲欧美日本A∨天堂| 又爽又大又光又色的午夜视频| 不卡日本免费一级视频| 成 人 黄 色 网 站 在 线 观 看| 亚洲高清视频在线观看你懂| 国产男女猛烈无遮挡免费视频| 单身午夜福利小电影| 午夜毛片视频| 亚洲AV日韩AV综合在线观看| 无码欧精品亚洲日韩一区夜夜嗨| AV人妻天堂社区| a午夜国产一级黄片| 18禁高免费无码| 婷婷四房播播图| 亚洲乱码字幕无线观看| 69影院精品性视频| 乱肉合集乱500篇小说丹丹| 亚洲欧美中文字幕日韩一区二区| 国产超薄肉色丝袜的网站| 国产BD在线播放视频二区| 五十路熟女中出| 久久96国产精品| 初中小仙女白丝自慰jk| 欧美成人免费影片日本| 欧美成人3d肉动漫在线视频观看| 国产私拍福利精品综合| AV天堂永久在线观看| 尤物视频com| 日本人成精品视频在线| 爽死你个荡货粗暴| 亚洲国产91在线| 中文人妻无码一区二区三区| 麻豆av剧情无码| 国產成人av| 黑森林尤物精品∧v导航| 白丝被操喷水| 日本α片无遮挡在线观看| 国产自产在线| 国产精品成人麻豆专区| 丝袜 亚洲 另类 欧美 变态| yy111111电影院少妇无码| 亚洲一级毛片视频| 久久综合少妇12p| 国产极品美女做到高潮视频| 色www永久免费看| 欧美你懂的在线观看| 免费A级毛片无码A| 亚洲熟妇AV一区| 亚洲超碰97无码中文字幕| 亚洲精品m在线观看| 69天堂视频网| 97se亚洲国产综合自在线观看| 首页国产亚洲小说图片 | 2019午夜福利不卡片在线| 黑人巨茎大战欧美白妇| 国产东北露脸精品视频| 超碰91免费在线| av鲁丝一区二区| 毛片在线网址| 伊人天堂色综合网| 久久免费看少妇免费观看| 午夜热门精品一区二区| 欧洲毛片免费观看| 大屁股无码人妻| 十八禁美女裸体网站| a久久久然精品| AV不卡一区二区| 久久99热只有频精品6狠狠| 88国产精品视频一区二区三区| 欧美日韩国产一区| 日韩无码日韩黄色网站| 岛国国产在线观看网站| 调教套上奶牛榨乳器喷奶水| 亚洲aⅴ一区二区三区| 国产欧美亚洲精品a| 尤物高清无码在线观看| 18禁日本黄无遮挡网站| 99se精品视频在线播放| 就去吻综合网| 精品 综合 在线 日韩| 一起看国产高清无码 | 久久电影网午夜鲁丝片伦| 2022最新在线观看视频美女资源网址 | 丰满少妇熟妇人妻p| 好紧,好滑,好大好硬视频。| 日韩欧美不卡1卡2卡| 无罩看奶禁18| 日韩激情无码免费毛片| 深夜国产成人福利在线观看女同| 中国人妻无码视频网站 | 2020精品国产自在现线看| 亚洲一区欧洲一区| 久久精品无码网| 4p天堂在线免费观看| 国产白浆免费视频| 2021年国内精品久久久久精品 | 天堂在线毛片| 2022AV高清视频在线不卡顿| 日本道DVD中文字幕专区| 任我爽精品视频在线播放| 亚洲精品5555在线| 水蜜桃av无码| 综合图区亚洲10p| 妺妺窝人体色WWW乳香阁| 中日韩无码av免费| 美女全裸黄色网址| 盗撮AV在线| 免费人成视频xvideos在线看| 日本免费网站在线观看网址大全| VA天堂ⅤA在线VA无码| 亚洲综合在线另类色区奇米777| 尤物污网站在线看| 国产AV巨作精品原创| 久久天堂色| 亚洲无码视频71| 综合图区亚洲10p| 十八禁美女网站| 亚洲AV无码一区二区三区ba| 67194熟妇在线现看路线1| 一区二区操久久| 一区在线男男| 日本按摩女高潮喷水视频| 黑人与日本人妻中文字幕| 成年日韩片AV在线网站医生| 国产黑色丝袜在线15| 裸体美女黄网站18禁| 在线无码一区| 18Gay国产小鲜肉网站| 国产丝袜拍偷超清在线| 国产成人在线视频| 人妻少妇久久| 最新国产99热这里只有精品| 美女又黄又爽又色的视频| AV网页手机在线观看| 一个人在线观看的无码| 日日麻批永久免费视频播放 | 国产乱子伦视频大全亚琴影院| 国产亚洲情侣一区二区无| 亚洲无码被操视频| 2022AV国产精品| 亚洲又黄又刺激| 成av人无码| 波多野结衣国产精品| 国产风韵犹存丰满大屁股| 毛片无遮挡| 精品欧美成人高清在线观看| 艹乳在线视频| 狠狠做久久深爱婷婷97| 2021国产最新无码精品| 更新每日日日夜夜| 精品国产白嫩导航| aaaaa级少妇高潮大片| 一级无码啪啪| 欧洲永久免费视频在线播放| 久久久精品久久久久特色影视| 狼友最新在线观看视频| 在线最新短片福利| 国产女做a精品免费视频| 先の欲求不満な人妻在线674| 久久久一区=区三区| xxxx 日本视频| 中文字幕av无码不卡| jizz16欧美精品| 久久亚洲精品无α√| AV在线亚洲一区二区| 国产人成无码视频在线| 久久99国产精品久久99| 亚洲人成综合| 日本丰满护士爆乳xxxx| 国产精品免费看久久久| 久久不卡一区二区三区| 在线免费av| 人人玩人人添人人澡mp4| 色激情综合| 无码av动态图| 777米奇色8888狠狠俺去啦| 韩国精品一区| 工口全彩肉肉无遮挡彩色无码| 国产精品久久久久精品麻豆| 欧美亚洲综合在线| 黄色网站在线观看十八| 新妺妺窝人体色www| 无码在线丝袜| 国产熟女凹凸视频| 免费网站永久在线播放| 亚洲精品无码鲁网午夜| 亚洲欧美综合专区精品| 久久精品呦女| 亚洲中文字幕成人无码| 国产射里面吞精高潮在线播放| 国产美女被遭高潮免费| 中文无码官网| 吉泽明步在线二区三区高清| 国产A区二区三区| 亚洲人妻中出| 性色开放主播在线直播| 国产Av白丝| av无码孕妇网址| 被干到高潮视频| 丝袜足午夜福利丝袜在线观看| 性国产牲交XXXXX视频| 特级xxxxx欧美| 波多野结av衣东京热无码专区| yw亚洲欧美日韩在线| 色综合伊人丁香五月桃花婷婷| 久久精品女人18国产水多毛片| 嗯~我要~好爽免费视频| 2021AV天堂在线| 永久免费毛片在线播放| 韩国三级大全久久网站| 精品成在人线av无码免费看| 理论片福利片在线观看| 手机在线播放AV满18| 一区二区三区午夜无码视频| 国产盗摄免费视频大全| 人妻丰满熟妇AV无码区乱| 狼色在线播放一区二区精品视频| 亚洲综合香蕉中文网| 2022av无码视频| 日日夜夜狠狠操操| 日韩破处| 爆乳大码肉感熟女视频| 久久久久久综合岛国免费观看| 超清欧美高潮喷水| 996热精品视频在线观看| 五十路熟女中出| Chinese白袜Gay男男国产| 亚洲无马不卡| 日韩无码丝抹| 日本喷水抽搐高潮视频| 521国产精品视频| 亚洲日韩精品成人AV| 中文字幕不卡人妻在线| 6080yy国产一级毛片| 国产曰批免费视频播放免费看| 超碰免费电影91| 萌白酱国产一区在线网址播放| 国产精品欧洲专区无码| 亚洲婷婷日韩AV| 午夜黄视频| 无遮挡污到肉里的动漫片视频| 十八禁真人免费视频| 超碰免费无码| 羞羞影院午夜男女爽爽| 中文字幕无码免费久久9一区| 131国内美女爱做视频免费| 99综合久久| 极品午夜福利视频| 婷婷丁香五月激情综合在线| 18禁裸露啪啪网站免费漫画 | 制服自慰在线观看| 大学生午夜视频| 亚洲av一二三区成人影片| 综合久久997| gogo人体自慰av无码| 国产依依视频在线| 久在线精品视频线观看| 免费全部高H视频无码sm| 欧美18XXOO视频在线| Japanese无码中文字幕open线| 都市激情 在线 亚洲 国产| 91黄在线观看国产亚洲| 999国内精品永久免费视| 国产在线精品一区二区高清不卡| 亚洲综合久久久888| 手机看片欧美日韩| 尤物白浆在线观看| 精品无码一区二区在线蜜桃| 娇喘高潮视频在线免费观看| 日韩电影一区二区| 国产天堂毛片| 日本三级欧美三级人妇视频| 大屁股少妇—无码专区 精品| 精品国产最大调教网站| H罩杯爆乳交在线观看| 久久不良视频| papa无码| 久久久r精品66| 亚洲精品无码专区| 亚洲色蜜桃网| 亚洲精品无码你懂的|