标题标题  显示论坛会员列表名单  搜索论坛搜索  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.1885 seconds.

 
保养品
保养品, Skin Care
www.elady.tw
美材批发
美材, Cosmetic
www.elady.tw/beauty_org
保养品批发
名牌保养品、保养品批发
gb.perfume.com.tw/skincare
饰品批发
饰品、饰品批发
gb.perfume.com.tw/ornament