標題標題  顯示論壇會員列表名單  搜索論壇搜索  HelpHelp
  注冊注冊  登入登入
ASP教學區
 DoReMe : ASP教學區
主題 話題: 第二十章 提供站點導航 回復發表新主題
作者
貼子內容 << Prev Topic下一個主題 >>
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 10:51上午 | IP記錄 引用 bibi

本章主要介紹兩種在Active Server Pages中用到的ActiveX組件,第一部分,你將學會怎樣使用內容連接組件,這個組件使得你的站點導航更加輕鬆。第二部分 則是一個詳細的使用該組件的例子,你會學會用它建立一個簡單的新聞組,最後,你會學會使用許可檢查組件,這個組件僅僅當用戶被授 權時顯示能夠訪問的頁面連接。
Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 10:51上午 | IP記錄 引用 bibi

內容連接組件

當你需要連接相當數量的頁面為訪問者提供導航時,該組件相當實用;例如,使用該組件連接一個在線教程,一個新聞組等等,下一部分 就是創建新聞組的實例應用。一般來說,進行大量主頁連接,你需要在每一個頁面上加入相應連接信息,而內容連接組件則可以大大簡化 這個過程。利用這個組件,你完全可以在一個頁面內創建很多頁面列表,而且利用這個組件的方法就可以在這個頁面內顯示相應連接的內 容。

 

內容連接組件有以下這些方法:(其中 Content Linking File是包含這些連接文件的一 個文本文件。

■GetListCount(Content Linking File)顯示組件中包含的連接的文件數目。

■GetListIndex(Content Linking File)顯示當前頁在這些連接文件中的前後位置。

■GetNextDescription(Content Linking File)顯示連接文件中下一個的描述。

■GetNextURL(Content Linking File)顯示連接文件中的下一個文件的URL地址。

■GetNthDescription(Content Linking File, Number)顯示連接文件中指定位置的文件描 述。

■GetNthURL(Content Linking File, Number)顯示連接文件中指定位置的文件URL地 址。

■GetPreviousDescription(Content Linking File) 顯示連接文件中前一個文件的描述。

■GetPreviousURL(Content Linking File) 顯示連接文件中前一個文件的URL地址。

 

例如:假設你需要創建一個一步一步的網上烘麵團培訓,你按照順序創建了有步驟的介紹文件,現在看內容連接組件如何運做。


首先,你需要創建一個 Content Linking File。這是用文本編輯器就可以完成的普通 文本文件。下面是這個文件的內容:

/pasta/grabpot.asp
 從櫥櫃中取出面盤
 
/pasta/boilwater.asp
 在盤中燒上一些開水
 
/pasta/openbox.asp
 打開放麵團的盒子
 
/pasta/dumpcontents.asp
 將麵團倒入面盆
 
/pasta/wait.asp
 等上10分鐘
 
/pasta/home.asp
 返回主頁
 

 

當你建立這個文件後,存儲完畢記住它的名字,(這裡面假設是pasta.txt)。

 

這個文件有兩列,第一列是文件的URL地址(無論是asp文件還是其他的什麼諸如html文件或者甚至是pl文件以及cfm文件 都可以),第二列是文件的描述,這兩列必須用tab鍵來分隔而不能是空格鍵。否則該組件就無法正確識別區分。

 

注意

該文件就是純文本,任何什麼粗體,斜體之類的格式將被忽略。

 

當你創建了這個文本文件後,你就可以使用內容連接組件來製作自己的導航主頁了。你也許需要在一個頁面中顯示這些步驟,那麼可以根 據下面這個例子進行:

 

<HTML>

<HEAD><TITLE>主頁</TITLE></HEAD>

<BODY>

<h2>歡迎進入邁至科ASP教程示例之站點導航</h2>

<%

Set mylinks=Server.CreateObject(「MSWC.NextLink」)

%>

<%

製作烘麵團有<%=mylinks.GetListCount(「pasta.txt」) %>個步驟:

<OL>

<%

For I=1 to mylinks.GetListCount(「pasta.txt」)-1

%>

<LI><A Href=」<%=mylinks.GetNthURL(「pasta.txt」,i) %>」>

<%=mylinks.GetNthDescription(「pasta.txt」,I) %></A>

<%

NEXT

%>

</OL>

</BODY>

</HTML>

 

那麼這就是利用該組件創建事例並應用的一個實例,該事例在頁面範圍內賦給變量mylinks。下面是顯示結果(圖20.1):

 圖20.1 網上烘麵團培訓

 

這裡面使用了三種方法:

■首先,GetListCount()方法從pasta文本文件中接受記錄條目數。無論什麼時候你創建了內容連接組件的事例並使 用其方法時,你必須傳遞這個記錄內容連接文件的文本文件名稱,這個例子中,調用方法是mylinks.GetListCount (「pasta.txt」)

■第二個是GetNthURL()方法,用來在文本文件中接受指定位置的記錄的URL地址,那麼出現在循環中就是將連接依次指向 每一個文件的URL地址。

■第三個GetNthDescription()方法,和GetNthURL方法十分類似,只不過接受的信息不是URL地址而是 其描述,即Tab鍵後面那部分對於某個文件的解釋性文字,也是上面例子的顯示結果中顯示的字段。

 

那麼利用一個簡單的循環就可以將這些連接依次顯示,而且可以限定最後一個『返回主頁』不要顯示,最後一個的用途就是在分頁上進行 主頁返回。

 

對於每一個步驟的頁面,其餘的那些方法就變得十分有用,參見下面這個BoilWater.asp的例子:

 

<HTML>

<HEAD><TITLE>第二步</TITLE></HEAD>

<BODY>

<H2>第二步:燒些水</h2>

在盆裡略微燒些開水。

<hr>

<%

Set mylinks=Server.CreateObject(「MSWC.NextLink」)

IF mylinks.GetListIndex(「pasta.txt」)>1 THEN

%>

<a href=」<%=mylinks.GetPreviousURL(「Paste.txt」)%>」>

前一步</a>

<% END IF

IF mylinks.GetListIndex(「pasta.txt」)<mylinks.GetListCount(「p asta.txt」)-1 THEN

%>

<a href=」<%=mylinks.GetNextURL(「Paste.txt」)%>」>

後一步</a>

<% END IF %>

<br>

<a href=」<%=mylinks.GetNthURL(「pasta.txt」,mylinks.GetListCou nt(「pasta.txt」)) %>」>

返回主頁

</a>

</body>

</html>

 

上面這種調用方法在在線教程中就非常常用,其中判斷自己的頁面在連接文件中的位置用GetListIndex()方法,然後根據 自己的位置利用兩個IF語句確定是否存在前頁和後頁。再進行向前和向後的連接。這裡面一個是向前的GetPreviousURL ()方法,一個是向後的GetNextURL()方法,最後作一個返回主頁的連接,利用GetNthURL,因為pasta.t xt的最後一個記錄就是返回主頁。

 

提醒一下,對於不同的頁面,GetNextURL()方法和GetPrevious()方法調用的是不同的,這樣在做大規模在線 教程時就可以省去很多麻煩,只要寫好一個目錄的Txt文件,很多位置問題完全可以根據這些方法自己確定。同時注意判斷,因為如果 發現GetPreviousURL()已經無法獲取(到頭了),那麼就會出錯。

 

另外,如果你當前的文件不在那個指定所有文件列表的txt文本中(通常是你的拼寫錯誤造成的),那麼GetPreviousUR L()方法會指向文本文件中的第一個記錄,而GetNextURL()方法則會指向最後一個。

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 10:52上午 | IP記錄 引用 bibi

內容連接組件實例應用

這部分是創建一個簡單的討論組的實例應用,用戶在這裡可以讀取他人文章以及發表新的文章。

 

注意

對於這些很有代表性的實例,如果用戶希望在線進行使用和測試以加深理解,建議訪問http://www.aspsite.com


下面是一個特別簡單的用戶討論組的範例,如果你希望也有這麼一個討論組,那麼所有的程序放到你的服務器上就可以了(當然前提是你 的服務器支持Active Server Pages)

創建這麼一個討論組,你只需要以下四個文件:

■發佈文章頁:這個頁面用來發佈文章

■文件包含頁:用於用戶讀取文章,將發佈的文章文件包容在該文件中。

■新項目處理頁:將發佈的文章進行保存並且更新組件連接所用的文本文件。

■討論組主頁:顯示所有信息,提供發佈文章的入口。

 

發佈文章頁

提供用戶發佈新消息的頁面,這其實只是一個普通的HTML頁,利用了HTML的Form進行文章填寫,其中名字為subject 的文本框是標題攔。

例20.1 post.cfm腳本

 

<HTML>

<HEAD><TITLE>文章發佈頁</TITLE></HEAD>

<BODY>

<h2>發佈一個新消息</h2>

<form method=post action=」newitem.asp」>

主題:<input type=text name=subject size=50 maxlength=50>

<br>

<textarea name=Posting cols=60 rows=10wrap=」Virtual」></textarea>

<p>

<input type=Reset value=」清除」>

<input type=Submit Value=」發佈信息」>

</Form>

</Body>

</Html>

 

文件包容頁

每一個信息頁顯示時都應當包括前一篇和後一篇,同時還要有一個回主頁的連接,這樣信息頁就必須用文件包容方式,這些連接顯示顯然 是自動更新的,那麼更新過程在下一個頁面介紹中,這個頁面介紹是如何動態顯示。腳本如下:

例20.2:news.inc腳本

 

<hr>

<%

Set mylinks=Server.CreateObject(「MSWC.NextLink」)

IF mylinks.GetListIndex(「news.txt」)>1 THEN

%>

<a Href=」<%=mylinks.GetPreviousURL(「news.txt」) %>」>

前一篇文章</a>

<% End IF %>

<a Href=」<%=mylinks.GetNextURL(「news.txt」) %>」>

後一篇文章</a>

<p>

<a href=」news.asp」>返回主頁</a>

 

顯示結果應當無須贅述,有興趣的讀者可以自行瀏覽http://www.aspsite.com

 

新項目處理頁

當用戶發表完一個新消息後,就進入了新項目處理頁,這個頁面看上去很簡單,但是處理工作最為複雜。


這個頁面動態生成新的Active Server Pages文件,(天那,你知道這意味著什麼?!) 當用戶發表了新的消息,那麼這個消息就存在一個文本文件中,不過,這裡面的文本文件不是一般意義的純文本,而是Active Server Pages文件。這個新的項目的依據的信息就是從HTML的FORM中接受到的。


同時該asp文件也將內容連接組件所依據的文本文件進行更新,主要是為新的消息創建一個對應的記錄。因此達到動態的即時更新的效 果。

 

下面的例子腳本明顯比以前的長,當然,對於專業製作人士,這其實算不上什麼。不過現在作為教程,我們會對每一部分詳細解釋。

例20.3新項目處理頁

 

<%

『創建這個發表內容

TheSubj=Server.cfmLEncode(「Request.Form(「subject」))

If TheSubj =」」 THEN TheSubj=」無標題」

ThePost=」<HTML><HEAD><TITLE>」&TheSubj& amp;」</TITLE></HEAD><BODY>」

ThePost=ThePost&」發表日期:」&NOW&」<Hr>」

ThePost=ThePost&Server.cfmLEncode(「Request.Form(「Posting 」))

ThePost=ThePost&」<!-- #INCLUDE VIRTUAL=」」new.inc」」 -->」

ThePost=ThePost&」</BODY></HTML>」

 

『創建一個新的文件名(不重名)

Set mylinks=Server.CreateObject(「MSWC.NextLink」)

TheName=」item」&mylinks.GetlistCount(「news.txt」)+1&」. asp」

TheNamePath=Server.Mypath(TheName)

 

『保存該發表內容到文件中

Set MyFileObj=Server.CreateObject(「Scripting.FileSystemObject」)

Set MyOutStream=MyFileObj.CreatTextFile(TheNamePath)

MyOutStream.Write ThePost

MyOutStream.Close

 

『對內容連接組件所需文本文件的更新

TheNews=Server.MyPath(」news.txt」)

Set MyNews=MyFileObj.OpenTextFile(TheNews,8,TRUE)

MyNews.WriteLine TheName&vbTab&TheSubj

MyNews.Close

%>

 

<HTML>

<HEAD><TITLE>新的項目</TITLE></HEAD>

<BODY>

<h2>謝謝發表文章</h2>

<a href=」news.asp」>返回主頁</a>

</Body>

</HTML>

 

在本頁中,創建了一個叫做ThePost的變量用來記載這個Active Server Page的內容, 在這裡面,整個Active Server Page作為一個很長的字符串來處理,下面仔細看一下 這個字符串的生成過程:

 

『創建這個發表內容

TheSubj=Server.cfmLEncode(「Request.Form(「subject」))

If TheSubj =」」 THEN TheSubj=」無標題」

ThePost=」<HTML><HEAD><TITLE>」&TheSubj& amp;」</TITLE></HEAD><BODY>」

ThePost=ThePost&」發表日期:」&NOW&」<Hr>」

ThePost=ThePost&Server.cfmLEncode(「Request.Form(「Posting 」))

ThePost=ThePost&」<!-- #INCLUDE VIRTUAL=」」new.inc」」 -->」

ThePost=ThePost&」</BODY></HTML>」

 

這個Active Server Page文件不僅包括了Form中傳遞過來的信息,還包括了日期信息 以及News.inc的一段用於動態顯示的腳本。

 

注意

對於引號在字符串中的賦值是採用連著兩遍的引號輸入來進行的,即,在字串賦值中兩個連著的引號相當於一個引號。例如,將MySt ring賦值為下面這個字段

我說:」你好」

那麼賦值語句為MyString=」我說:」」你好」」」

不過,對於中文輸入法的雙字節引號,不需要這樣處理。

 

腳本的下一部分是給這個active Server Page起一個不重複的名字,你當然不希望新 的消息覆蓋以前的,因此在存儲該文件之前必須首先進行不重複的文件名的生成:再看這段腳本:

 

『創建一個新的文件名(不重名)

Set mylinks=Server.CreateObject(「MSWC.NextLink」)

TheName=」item」&mylinks.GetlistCount(「news.txt」)+1&」. asp」

TheNamePath=Server.Mypath(TheName)

 

由於使用了內容連接組件的Count屬性,就可以通過從文本文件中的記錄數目來命名以保證不會有重複了,這裡文件名分別為ite m1.asp,item2.asp,item3.asp等等,每一個信息對應一個不同的名稱,不過,提醒注意的是,如果從new s.txt中刪除了一些信息,那麼文件命名重複的現象就會發生,因為這只是簡單示例,所以沒有做這些考慮處理。

 

第三部分腳本是將將生成的ThsPost字符串以生成的TheNamePath路徑名存入硬盤,這裡面顯然用到了FileSys temObject()方法來進行處理,那麼詳細的這種處理的介紹參見上一章。腳本如下:

 

『保存該發表內容到文件中

Set MyFileObj=Server.CreateObject(「Scripting.FileSystemObject」)

Set MyOutStream=MyFileObj.CreatTextFile(TheNamePath)

MyOutStream.Write ThePost

MyOutStream.Close

 

最後部分是更新News.txt文件,該文件被內容連接組件用來檢索信息,下面是這個更新部分的腳本:

 

『對內容連接組件所需文本文件的更新

TheNews=Server.MyPath(」news.txt」)

Set MyNews=MyFileObj.OpenTextFile(TheNews,8,TRUE)

MyNews.WriteLine TheName&vbTab&TheSubj

MyNews.Close

%>

 

如果該news.txt不存在,那麼系統會自動創建這個文件,因此當討論組中發表了第一個文件,系統就會創建這個news.tx t。

 

請注意這裡面用到了VBScript的vbtab常量,這個常量就是tab鍵的作用,那麼該news.txt必須用tab鍵進行 URL地址和描述的分隔是上一章中介紹過的。

 

討論組主頁

最後當然要創建討論組的主頁,這個頁面就是顯示各個信息的標題並提供連接,以及提供發表新文章的入口連接,下面是這個頁面的全部 腳本:

例子:20.4討論組主頁

 

<%

『創建內容連接組件

Set mylinks=Server.CreateObject(「MSWC.NextLink」)

%>

<HTML>

<HEAD><TITLE>討論組主頁</TITLE></HEAD>

 

<BODY>

發佈信息數:<%=Mylinks.GetListCount(「news.txt」) %>

<hr>

[<a href=」post.cfm」> 發佈新文章</a>]

<UL>

<%

『顯示信息列表

For i=1 to mylinks.GetListCount(「news.txt」)

%>

<LI>

<a href=」<%=mylinks.GetNthURL(「news.txt」,i)%>」>

<%=mylinks.GetNthDescription(「news.txt」,i)%></a>

<%

next

%>

</ul>

</body>

</html>

 

很容易理解,這個頁面就是首先創建一個內容連接組件的事例,然後根據news.txt去判斷連接文件的數目並顯示,連接post .cfm沒什麼可以解釋的,然後根據連接文件的數目進行For …Next循環,將其描述顯示出來並且連接相應URL地址。

那麼這麼一個例子對於創建討論組很具有代表性,讀者甚至可以直接利用這裡面提供的腳本來製作自己的討論組,當然,這個討論組主要 是教學性質,過於簡化,下面部分討論怎樣擴展其功能。

 

討論組示例功能拓展

這個簡單的討論組顯然只能應用於小規模的範圍,幾個知交好友建立聯繫網站,互通聲息還可以,一旦文章增加,很多問題解決不了,比 如說,有人同時進行文章發佈嘗試,這個內容連接組件就沒有考慮這種問題。利用諸如SQL Server這樣的數據 庫來創建討論組就可以大大增強其功能應用,當然,這需要ActiveX Data對象,( 本書第22章將進行詳細介紹),和內容連接組件不同的是,數據庫進行大量信息的存儲和讀取將更加有效。

 

不過,這個內容連接組件的示例還是可以使你瞭解怎樣對一定數量的文件連接進行有效的處理,這個組件所完成的動態頁面更新是一個優 秀的的站點負責人應當學會的。

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 10:52上午 | IP記錄 引用 bibi

使用許可檢查組件

許可檢查組件用來顯示那些用戶可以被授權訪問的頁面連接,這個組件只有一個屬性,叫做HasAcess,當用戶進入某個頁面,該 屬性返回值True,如果用戶無法進入或者不存在,該屬性返回值為False。下面是使用這個組件的一個示例:

 

<%

Set Permit=Server.CreateObject(「MSWC.PermissionChecker」)

%>

<HTML>

<HEAD><TITLE>邁至科網絡ASP教程之許可檢查組件示例</TITLE>&l t;/HEAD>

<BODY>

<%

If Permit.HasAcess(「Destory.asp」)

THEN

%>

<A href=」Destory.asp」>

點擊這裡刪除硬盤所有文件

</a>

<%

Else

%>

你無法進行這種操作

<% End IF %>

</BODY>

</HTML>

 

注意

該組件不是微軟的公務軟件,不過,最新的IIS版本已經包括了,那麼你還可以從www.microsoft.com/iis中進行下載。

 

這個例子中,這個連接只能允許有權限的人進行操作,沒有權限的則看不到這個連接。

什麼時候涉及到用戶的授權訪問,這取決於WindowsNT的安全性,當WindowsNT設置為NTFS文件系統,那麼每一個 文件都有一組許可屬性,你可以將文件讀寫權限與一個特定組的用戶相聯繫。

 

注意

記住瀏覽器允許你以密碼框方式進入需要基本認證的頁面。

 

具體操作是右鍵文件名,選擇Properity,然後點Security表,選擇Permission鈕,這時就可以將該文件與 特定的用戶或者用戶組聯繫起來,設置相應讀寫權限(圖20.2)。


有兩種方法強制用戶在你的網站中進行註冊登錄,第一種是利用Internet Service Manager來設置安全認證模式,當密碼安全認證此創建後,你就可以強制匿名用戶進行登錄,默認情況下,所有匿名用戶使用同樣 的帳號,即IUSER_你的電腦名,假如你的電腦叫做magic,那麼所有匿名用戶的帳號都是IUSER_magic。

 

你還可以在特定頁面強制用戶進行登錄,這樣你可以限定IUSER_magic這樣的匿名用戶的使用範圍,並甄別出其中存在的管理 人員。當用戶進入某個頁面,則彈出密碼對話框,強制訪問者登錄然後利用許可檢查組件進行身份甄別。

 圖20.2 用Windows NT 設置文件權限

 

下面是利用腳本實現的一個示例:

 

<%

LOGON=Request.ServerVariables(「LOGON_USER」)

IF LOGON =」」 OR ISNULL(LOGON) OR ISEMPTY(LOGON) THEN

Response.Status= 「401 Unauthorized」

Response.End

END IF

Set Permit=Server.CreateObject(「MSWC.PermissionChecker」)

%>

<HTML>

<HEAD><TITLE>邁至科網絡ASP教程之許可檢查組件示例</TITLE>&l t;/HEAD>

<BODY>

<%

If Permit.HasAcess(「Destory.asp」)

THEN

%>

<A href=」Destory.asp」>

點擊這裡刪除硬盤所有文件

</a>

<%

Else

%>

你無法進行這種操作

<% End IF %>

</BODY>

</HTML>

 

這個例子只有最前面的幾行和前面例子不同,Request.Status在前面的第14章有關小節中有所介紹。這個ASP執行時 會首先彈出密碼對話框,然後檢驗用戶身份,在根據這個身份利用許可檢查組件顯示相應內容。

 

例如:你的網站可以設置多名管理人員,每個人的授權範圍可能不近相同,那麼對於進行相應操作的文件自然可以設置為相應用戶讀寫執 行權限,這樣根據許可檢查組件就可以正確的『對號入座』,防止越權行為的發生。

 

總結

這章主要介紹了兩種ActiveX組件,一種是內容連接組件,其中的示例是一個簡單的討論組,另外一個是權限檢查組件來決定授權 用

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 

如果你想回復的話你必須首先 login
如果你還沒有注冊的話你必須首先 注冊

  回復發表新主題
顯示可打印的頁面 顯示可打印的頁面

論壇跳轉
不能 張貼新論題在這個討論版
不能 回應論題在這個討論版
不能 刪除你的發言在這個討論版
不能 編輯你的發言在這個討論版
不能 新增投票標題在這個討論版
不能 在這個討論版投票

Edit by doreme Forums version 2004
Welcome ©2001-2004 doreme Guide

This page was generated in 0.1870 seconds.

 
保養品
保養品, Skin Care
www.elady.tw
美材批發
美材, Cosmetic
www.elady.tw/beauty_org
保養品批發
名牌保養品、保養品批發
gb.perfume.com.tw/skincare
飾品批發
飾品、飾品批發
gb.perfume.com.tw/ornament