程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP基礎知識 >> ASP常用其它的組件

ASP常用其它的組件

編輯:ASP基礎知識

    當你用 ASP 編寫服務器端應用程序時,必須依靠 ActiveX組件來強大 Web應用程序的功能,譬如:你需要連接數據庫,對數據庫進行在線操作等等。

  上兩篇中給大家介紹了 AD Rotator、 Database Access等組件的使用方法,今天我們接著來看看其它的一些 ASP 常用組件。

  一、 Browser Capabilities

  眾所周知組件,並不是所有浏覽器都支持現今 Internet 技術的方方面面。有一些特性,某些浏覽器支持而另一些浏覽器卻不支持,如 :

   ActiveX 控件、影像流、動態 HTML、 Flash 以及腳本程序等。使用 ASP 的Browser Capabilities 組件,就能夠設計“智能”的 Web頁,以適合浏覽器性能的格式呈現內容。 Browser Capabilities組件能夠創建一個 BrowserType對象,該對象提供帶有客戶端網絡浏覽器的功能說明的用戶腳本。該組件之所以能識別客戶浏覽器的版本等信息,主要是因為當客戶浏覽器向服務器發送頁面請求時,會自動發送一個User Agent HTTP 標題,該標題是一個聲明浏覽器及其版本的 ASCII字符串。 Browser Capabilities 組件將 User Agent 映射到在文件 Browscap.ini中所注明的浏覽器 , 並通過 BrowserType對象的屬性來識別客戶浏覽器。若該對象在 browscap.ini文件中找不到與該標題匹配的項,那麼將使用默認的浏覽器屬性。若該對象既未找到匹配項且browscap.ini文件中也未指定默認的浏覽器設置,則它將每個屬性都設為字符串 "UNKNOWN"。在默認情況下, browscap.ini 文件被存放WINDOWSSYSTEMINERSRV( 如果是 95/98+PWS4) 或 NTSYSTEM32INERSRV( 如果是 NT)目錄中,你可以自己編輯這個文本文件,以添加自己的屬性或者根據最新發布的浏覽器版本的更新文件來修改該文件。請看以下checkCookie() 過程,使用 BrowserCap 對象的 Cookie屬性來判斷客戶端浏覽器是否支持 Cookie,並返回信息 :

< %

  Sub checkCookie()

  Set BrowserCap=Server.CreateObject("MSWC.BrowserType")

  if BrowserCap.Cookie=True then

  response.write "你的浏覽器支持 Cookie!"

  else

  response.write "對不起,你所使用的浏覽器不支持 Cookie!"

  end if

  end Sub

  %>

  有關 Browser Capabilities組件的詳細信息,百度上面很多。

  二、 File Access

  組件如果你的網齡足夠大的話,你一定見過“恐龍時代”的 CGI留言簿,那是 WEB 留言簿最早的雛形。那時候在基於 Internet 的WEB應用程序中連接服務器後端數據庫還十分困難,因此留言簿中的歷史信息並不是同如今一樣存儲在後端數據庫中。那麼這些數據究竟是保存在哪裡的呢?答案就是“文本文件”,CGI程序可以將從客戶端接收的信息寫進一個存放在服務器端的文本文件中,該文件可以是HTML 文件或 TXT 等文件,這樣就使得程序員們可以不通過同數據庫連接就可以將客戶信息保存下來,但是寫此類CGI 程序甚是煩瑣,下面列出了一個此類程序的最簡單的樣本 :

   #!/usr/local/bin/perl

  # Perl Location one your server

  print "Content-type: text/plain ";

  if($ENV{'REQUEST_METHOD'}eq"POST"){

  read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});

  }elsif($ENV{'REQUEST_METHOD'}eq"GET"){

  $buffer=$ENV{'QUERY_STIRNG'};

  }

  @pairs=split(/&/,$buffer);

  foreach $pair(@pairs){

  ($name,$value)=split(/=/,$pair);

  $value=~tr/+//;

  $value=~s/%([a-f A-F 0-9][a-f A-f 0-9])/pack("C",hex($1))/eg;

  $FORM{$name}=$value;}

  $file_name="guestbook.txt";#File name

  #具體內容

  open(FILE,">>$file_name")||die "打開文件錯誤";

  print FILE "記錄時間":$date ";

  print FILE "姓名":$FORM{'name'}";

  print FILE "單位":$FORM{'company'} ";

  print FILE "電話":$FORM{'phone'}

  print FILE "地址":$FORM{'address'} ";

  print FILE "郵編":$FORM{'zip'}

  print FILE "郵件地址":$FORM{'email'} ";

  print FILE "返回意見":$FORM{'content'}

  close (FILE)

  大家可以感覺到,與 ASP 相比此類 CGI程序的可讀性和易操作性都較差。那麼你一定想問 ASP 是否也能直接在服務器上寫文件呢?答案當然是肯定的。但是聰明的朋友可能會想到,既然 ASP 同 WEB 數據庫的連接如此便捷,我們又何需再將客戶信息寫在文本文件中呢, ASP 的這個功能豈不是畫蛇添足?的確,對於那些我們常見的留言簿、 BBS 等 WEB應用程序而言,無論是在程序的執行效率還是易用性上,我們都不可能再用寫文本文件來替代數據庫,但是在某些WEB 應用領域裡寫文本文件既是一種規范也是一種相對數據庫而較便捷的方法。如果你對NT 較熟悉的話,你一定知道 NT 具有非常強大的安全機制,它可以將幾乎所有的服務器操作和連接的信息自動保存在一個後綴名為 .log 的文件中,其實這種技術也完全可以被運用在 WEB上,用來記錄一些的客戶登陸信息。下面的這段程序正是利用 ASP讀寫文本文件的特性,在一個 WEB BBS程序中創建自動記錄每個用戶發言記錄的功能。

  < %

  Set fs = CreateObject("Scripting.FileSystemObject")

  ForReading = 1

  '以只讀模式打開文件。不能對此文件進行寫操作。

  ForAppending = 8

  '打開文件並在文件末尾進行寫操作。

  TristateUseDefault = -2

  TristateTrue = -1

  TristateFalse = 0

  '-----------寫入系統log開始--------

  servermap=server.MapPath("bslog\")

  '映射系統物理路徑

  temp=servermap&"\"&year(date)&month(date)&"\"

  '獲取系統物理路徑和時間,並以此作為log文件存放的物理路徑

  if Not fs.FolderExists(temp) then

  fs.CreateFolder(temp)

  end if

  '檢測是否存在文件夾,否則自動創建

  dim syslog

  dim tempname

  tempname=date

  syslog=temp&tempname&".log"

  '文件名為e:bslog月份月日.log

  li=user&"&"&Now&"&"&Request.ServerVariables("REMOTE_ADDR")&"&"&tempfile&"&"&letter&"&"&title

  'log文件記錄的格式為:用戶名&發信時間&用戶ip&文件路徑&信區&信件標題

  if fs.FileExists(syslog) then

  Set ss = fs.OpenTextFile(syslog,ForAppending,true)

  else

  set ss = fs.CreateTextFile(syslog,ForWriting,false)

  end if

  '檢測log文件是否存在,如果存在則追加文件內容,反之則直接寫文件

  ss.WriteLine(li)

  ss.Close

  '-----------log文件寫入結束---------

  %>

  如果你沒有完全看懂上面的這段程序,就請聽作者慢慢道來。 File Access組件提供了可用來訪問計算機文件系統的方法和屬性。我們可以使用 File Access 組件創建 FileSystemObject 對象,以上程序的第一句就是利用File Access 組件創建了一個名為 fs的對象實例。在對象被創建後,你可以通過它訪問文件,該對象沒有屬性,它唯一的意義就是創建、打開或讀寫文本文件。

      FileSystemObject對象有兩種最常用的方法,一種用來創建文件,另一種是用來打開並讀寫文本文件。

  CreateTextFile 方法獲得你指定的文件名並創建該文件,它返回一個TextStream 對象,你可以用該對象在文件被創建後操作該文件,

  CreateTextFile 方法的語法如下 :

  Set objTextStream=FileSystemObject.CreateTextFile(Filename,[Overwrite],[Unicode])

  下面給大家解釋一下 CreateTextFile 方法的參數

  1、 Filename

  包含文件路徑名的字符串,可以是文件的全路徑名,包括驅動器名和目錄名,或者也可以只是文件名,如果只包含文件名的話,文件將被創建在站點的根目錄下。

  2、 Overwrite 布爾量,設置成 False 時可以防止 FileSystemObject對象在創建一個新文件時刪除已存在的文件,該參數是可選的,如果沒有賦值系統默認為true,具有相同文件名的已有文件會被刪掉。

  3、Unicode 可選參數。布爾值指明是否以 Unicode 或ASCII文件格式創建文件。如果以 Unicode 文件格式創建文件,則該值為 True;如果以ASCII 文件格式創建文件,則該值為 False。如果省略此部分,則假定創建ASCII 文件。

  在前面的程序中用 set ss=fs.CreateTextFile(syslog,ForWriting,false)來在 log文件不存在的情況下創建文件並對文件進行寫操作,這裡的“ForWriting”表示寫文件。與 CreateTextFile 方法不同, OpenTextFile方法用來獲得你指定的文件名並打開該文件,利用它所帶的參數我們可以對文件進行各種不同的操作,和CreateTextFile 方法一樣, OpenTextFile 方法返回一個 TextStream對象,使得你可以在文件被打開後操作該文件。 OpenTextFile方法的語法如下 :

  Set

  objTextStream=FileSystemObject.OpenTextFile(Filename,[Iomode],[Create],[Format])

  參數說明如下 :

  1、 Filename 必須的變量,同 CreateTextFile 的 filename

  2、 Iomode 可選的常量,取值為下列兩個常數之一 ForReading 或

  ForAppending,如果 mode 為 1,文件以只讀方式打開,如果為 8,則文件以追加的方式打開。

  3、Create

  可選的布爾量,指定如果你想打開的文件不存在是做什麼操作,如果其值為True,當文件不存在時就自動創建一個空的文件。如果為 False,就會在文件沒找到時產生一個出錯信息,其默認值是False,建議將其設為 True,以避免在打開文件時檢查是否出錯。

  4、 Format 可選值,可以選擇三種 Tristate值分別指定文件的格式, -2、 -1、和 0 分別對應於系統缺省、 unicode和 ASCII。

  在打開或創建了文本文件後,就得到一個 TextStream對象,該對象有一個光標,就好象是在字處理程序中的光標一樣,指出接下來要敲入的字符將出現的位置,它同時也指出你要讀取的字符的位置。不能通過CreatObject 來創建一個 TextStream 對象,得到 TextStream 對象的唯一方法是如前所述的用 FileSystemObject對象打開一個存在的文本文件或者創建一個新的文件。

  下面列出了 TextStream 對象的屬性和方法

  TextStream.AtEndOfLine

  只讀布爾量,當光標在當前行的末尾時,其值為 true,反之則為 false

  TextStream.AtEndOfStream

  只讀布爾量,如果光標在流的末尾時,其值為 true,否則為 false

  TextStream.Column

  只讀的整數,統計從行首到當前光標位置之間的字符數

  TextStream.Line

  只讀的整數,指明光標所在行在整個文件中的行號

  TextStream.close() 關閉流以及對應的文本文件

  TextStream.read(Num)

  指定從光標的當前位置開始從文本文件中讀取一定數目的字符

  TextStream.readall() 將整個流讀入一個字符串中

  TextStream.readline() 將一整行的字符讀入一個字符串中

  TextStream.write(text) 將一個字符串寫入流中

  TextStream.writeline() 將一個文本串寫入流中

  TextStream.skip(Num)

  在流中,將光標的位置移動一定數目的字符串長度

  TextStream.skiplines() 在流中,將光標移動一定數目的行數

  TextStream.writeblank 將一定數目的空行寫入流中

  lines(num)

  相信大家現在已經可以感覺到 ASP File Access組件的強大功能了,其實它遠不僅僅可以寫一些 log文件,通過它你甚至可以毫不費力的遠程自動更新你的網站,你只要把固定格式的文本文件傳送到遠端的服務器上,通過 File Access 組件讀取文件,並自動生成全新 HTML頁面即可,而不必再辛辛苦苦地一個一個地更新 HTML文件。如果你有興趣,你完全可以用 ASP 的File Access組件寫一個自己的全自動 HTML 生成器,充分享受維護網站的超前輕松感。

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved