返回   青蛙论坛 » IT论坛 » 操作系统类
用户名
密码
帮助 会员 日历 标记论坛为已读

回复
 
主题工具 显示模式
旧 04-05-2005, 14:41   #1
chyangwa
蝌蚪-小毛驴
 
chyangwa的头像
 
注册日期: Nov 2000
来自: 上海
帖子: 8,285
精华: 6
Actrive Server Page

Actrive Server Page

Actrive Server Page技术是什么

我们常常说,ASP并不是一种语言,尽管看起来ASP的代码是以脚本的形式出现。Microsoft把ASP定义为一个脚本语言执行的环境。在这个执行的环境里,ASP技术的脚本语言可以是两种,一种是VBScript,另外一种是Jscript。这两种在默认的情况下是被ASP支持的。

当然,你也可以使用其他的脚本语言,你要做的仅仅是安装上这种语言的ActiveX scripting。

举个例子来说,你非常的善于使用Perl语言,那么你就可以使用PerlScript进行ASP的开发。除了要做一些简单的基本设置,你不需要用其他的工具就可以非常方便的使用ASP技术来进行网站的开发。

因为ASP脚本是严格的按照ASCII文件格式的,所以完全不需要任何其他特殊的工具就可以设计你的ASP页。但是有一点就是,我们在开始设计自己的ASP页之前,要运行一个可以支持ASP技术的服务器,使得我们可以浏览ASP页面。换句话说,你不能试图打开一个浏览器就可以直接读取一个ASP内容,到你的本地HTML页面里。

那么究竟ASP可以运行在哪些服务器环境呢?有:Windows NT, 95, and 98,运行Internet Information Server (IIS)或者Personal Web Server (PWS)。其中在IIS 4 (NT Option Pack 4)中包含了最新的ASP技术的版本。

如果你使用的是NT Server,那么你需要安装NT Option Pack 4并且在你的系统里启动IIS。

如果你使用的是NT工作站,或者Windows 95/98的操作系统,那么你需要的是安装一个Personal Web Server,它是一个在技术上相对简易的IIS。但是,它已经完全可以使你在自己的机器上离线运行ASP。

即使你在WEB服务方面完全没有经验,放心,PWS仍然是非常容易去使用的。安装一个PWS你将会得到一个基础的127.1.1.1/ 站点进行测试。如果你使用的是non-NT这样的操作系统,可以点击下面的链接Windows NT Option Pack,下载补丁包。



迈出第二步:解析Actrive Server Page代码



在HTML语言里,标示一个标签是用尖括号,在ASP语言里其实没有什么不同,唯一的区别仅仅是使用<% %>来表示一个ASP的脚本语言的开始和结尾。ASP的代码可以出现在一个HTML页的任何位置。具体来讲,就是,一段ASP的代码可以出现在一个HTML的标签的前面,也可以出现在一个标签的里面。总之,ASP 和HTML被紧紧地相互嵌套在了一起。

当你在工作中使用数据库的时候,其实你完全可以通过一段HTML的代码,创造一个模版,然后把数据库中一系列的的记录格式化、结构化的表现在一个页面里。并且对记录的操作,例如删除、添加也完全可以通过ASP的脚本来实现。也就是说我们可以通过ASP技术完成对数据库的操作。

ASP可以让我们写很少的代码就可以实现对数据库数据的操作,另外,通过ASP技术可以让我们的静态HTML页面动态的反应数据库最新的数据信息。

VBScript是ASP脚本的默认语言。如果你想使用其他的语言,那么你需要去说明它。方法是在你的ASP代码的最上面加上一行:

<%@LANGUAGE=ScriptingLanguage%>

VBScript是一种非常容易学习的语言,一旦你开始用这门VBScript去开发,你就会越发的发现它的语法以及逻辑是非常容易上手的。


迈出第三步:初看Actrive Server Page的动态性


ASP对象让你的服务器和浏览器互相影响,你会例行公事的在ASP脚本中使用一个或者多个对象。你不用安装任何东西来使用它们,但是你必须要记住打开或者关闭它们。

ASP组件和ASP对象不同,它是ActiveX控制和ASP接口让普通进程单一化。一些普通的使用对象和组件就在这个下面定义。

对象

请求对象
请求对象让你通过一个HTTP请求接收信息。你可以使用请求对象分析编码URL,从一个表格中访问信息并且读取cookies、客户认证和HTTP头文件。
响应对象
响应对象是你将信息发送给用户的关键。你可以输出到屏幕、引导到下一页并且创建一个使用相应对象的cookies。
应用对象
执行的Web服务器是一个应用程序。使用应用对象,你可以控制开始或关闭程序相关的特性,同时存储应该被应用程序访问的信息。
服务器对象
服务器对象让你执行例程函数,比如映射一个虚拟路径到物理上并创造一个组件例图。
会议对象
使用会议对象,你可以存储和每个访问你站点用户相关的信息。
组件

广告转换器
广告转换器是为你的标题广告建立一个交付系统的流线进程。在一个分开的文件中,你可以存储关于标题的信息。组件就会在每次页面下载的时候随机地选择标题。
浏览器能力
浏览器组件让你确定用户使用什么浏览器和浏览器支持什么性能。
协作数据对象(CDO)
利用IIS SMTP服务器,CDO让你可以发送和接受电子邮件。有了CDO,你可以提交一个表单不需要依赖Perl脚本和CGI。
内容连接
这个是一个手动对象,它创建一个线性或者连续的路径到你的站点或者站点的一部分。你可以包含一个简单的文本来列出文件的适当顺序。你可以将next和previous连接添加到你的页面,使你的页面更加容易连接。
内容转换器
如果你需要喷射内容,这个是非常好的组件。它非常好使用并且它可以让你添加动态内容到任何页面而不需要使用一个数据库。在分开的文本文件中,你存储了HTML代码的知识块,它们交替的放入页面的空格。内容转换器会在页面每次再下载的时候显示一个知识块。
数据库访问
使用这个组件,你可以让数据库写组件到浏览器屏幕并创建或者更新存在的数据库文件。
第三方组件
还有很多第三方组件,有收费和不收费的,都可以被ASP利用。如果你运行你自己的饿服务器,你可以按意愿安装组件,注册一个.dll通常是安装的扩展,因此,一个组件可以是一个时间的拯救者。你可以省下不少时间来检查是否组件存在并可以用手操作工作。
如果你的站点由一个ISP做主机,你可以安装你自己的组件或者让他们自己安装,因此,你可以检查你的ISP的支持团队。

上一页 | 下一页

迈出第四步:亲身尝试Actrive Server Page


和大多数的语言脚本一样,学习ASP最好的方法就是亲身尝试ASP,使用你自己的系统安装PWS或者IIS。你可以边学习边在你自己的服务器上测试ASP组件和函数。为了方便学习,我们已经编译了一些操作脚本让你感受一下ASP的力量和灵活性并帮助你构建你的VBScripting字汇。

学习ASP你可以通过浏览其他网站的源代码来进行。事实上,你页面的ASP部分可以在内容被写到屏幕前进行。所以,你可以在你的页面上这么写:

<% Response.Write "Your name is" & strName %>

当你浏览这个页面的代码的时候你将看到(如果你的名字是"Jane."):

Your name is Jane

你的页面可能会包含大量的脚本部分或者总计脚本,但是你从浏览代码的命令中看到的只是HTML代码,它被发送作为.asp页面的输出。

Hello World

现在我们来看看Hello World这个脚本,在ASP的编辑器中复制下面的代码,命名为a.asp,在浏览起中打开。

<HTML>
<HEAD>
<TITLE>Hello World Sample</TITLE>
</HEAD>
<BODY>
<% Response.Write "Hello World" %>
</BODY>
</HTML>

在ASP脚本的中间写着Hello World,它将显示在屏幕上。

祝贺你的用户

Hello World样本使用我们提供的信息。通过相同的方式,你可以使用内置的VB脚本函数访问一些信息,比如数据和时间。比如,你不用将当前的时间放到任何页面,它会自动装载到你的页面中:

It is now <%= Time %>.

你可以选择时间显示的样式和语境。只要ASP部分包含,本地的服务器就会将它书写到屏幕中。

是否选择范例测试可以被使用更进一步的增强这个例子,或者,是否你想要了解一些关于box的一些内容,你可以使用时间作为变量来测试以便更改背景颜色,字体颜色,欢迎语言甚至确定哪个页面被显示。

上一页 | 下一页

迈出第五步:再看Actrive Server Page代码



定义变量

在VB脚本中,你不必定义变量或者象在其他脚本语言中明确的定义他们的类型。一个变量在你第一次使用的时候存在。但是,这个特性让你的代码广泛的存在打字稿中。如果你在代码中错误的定义一个变量名,那么一个新的变量将被创建。你的脚本可能不能正常的工作,而你也有可能不能意识到这个错误。

在你使用变量的时候,你要养成定义他们的习惯,例如:

<%Dim IntUserID%>

IntUserID现在可以使用了。为了另外一个安全网,使用Option Explicit。如果你打开Option Explicit,你将会在使用变量的任何时候发出错误的信号。这个听起来很乏味,但是当你的脚本发生错误的时候,他可以给你一些线索,否则你要艰难的找出错误出在哪里。

为了使用Option Explicit,将下面的内容作为你脚本的第一行内容:

<% Option Explicit %>

如果你想要看看当你忘记定义了变量的时候会发生什么状况,可以运行下面这点代码:

<% Option Explicit %>
<:% strName = Request.Form("Name") %>

因为strName变量 (Dim strName) 没有被定义,你将会看到发生下面这些错误:

Microsoft VBScript runtime error '800a01f4'
Variable is undefined: 'strName'
/e/oe-test.asp, line 10

使用Len

你可以使用Len(string)函数来确定文本的串的长度:

<%
IntString = "This is a Simple Sentence."
IntStringLength = Len(IntString)
Response.Write "There are " & IntStringLength & " characters (including spaces) in the sentence shown below:"
Response.Write "" & IntString & ""
%>

如果你想知道Len是如何手动工作,你可以想想你要求用户输入他们的五位数字代码或者三位PIN的形式。使用Len,你效验是否输入了足够的数字。

使用Trim

很多时候,一个串在开始或者结束的时候有一个多余的空格,如果你不修整它,你可能会担心浪费时间到这些变量上。

<% strName = Request.Form("Name")
strCheckName = "Amy Cowen"
If strName = strCheckName THEN
Response.Write "Success! The names matched."
Else
Response.Write "Sorry. The names do not match."
End if
%>

如果strName的值是" Amy Cowen", 其中的空格是我不慎输入到文本框中的,然后测试两个变量是否一样,结果不是,因为"Amy Cowen"不是" Amy Cowen"

你可以通过Trim来修剪字符串左边或右边的空格:

<% strComments = Request.Form("Comments")
strComments = Trim(strComments)
%>

假定用户已经输入:

" I am having problems installing the software I downloaded. "

通过Trim修整后,将会删除多余的空格,只留下下面的内容:

"I am having problems installing the software I downloaded."

现在,回到我们的" Amy Cowen"例子,如果我添加了下面的脚本,我们就会成功:

strName = Trim(strName)

在右边修整,使用Rtrim(string);在左边修整,使用Ltrim(string)。

转换

当你开始使用和VB差不多的语言的时候,你会犯一些简单的错误,比如比较整型的512和串512。如果你认识到前一个512和后一个512是不一样的,你可以想想为什么给出的脚本不能正常工作。

假想一下,你传送一个文件的ID到ASP脚本中,使用Request.QueryString,你会确定这个文件的ID就是用户想要编辑的。你需要从数据库中为记录输入一些信息并将它们显示在屏幕上。数据库中的ID和整型差不多,特别地,如果你在那个区域使用了AutoNumber性能。你输入的ID事实上是一个串。因此,这两个永远不可能匹配除非你转换成相同的类型。

Request.QueryString

使用FileSystemObject, 你可以测试一个文本—比如, *.html, *.asp, *.inc., *.gif—或者目录的存在。如果文件存在,你可以想要一连串的时间发生。如果文件不存在,你可能需要其他的事件发生,使用下面的代码:
<%
sPath="/profiles/" & strFileName & ".asp"
sFile=Server.MapPath(sPath)
Set fe=Server.CreateObject("Scripting.FileSystemObject")
if fe.FileExists(sFile) THEN
'do something
Response.Write "Yeah! I found it!."
Response.Write "You can access that file by "
Response.Write "<A HREF=""" & sPath & """>Clicking Here</A>."
else
'do something
Response.Write "Sorry. The requested file does not exist."
end if
%>

为了简单的测试你这个文件,添加脚本到最上面:

strFileName = "name"
' First assign the name of a file you have to this variable.
' strFileName holds just the name, not the extension or the path.
' Make sure you change the path for sPath to the virtual directory your file is in
' Run the script.
' Then come back and change the strFileName variable to the name of a file
' you do NOT have.
' Run the script.

改变被输入的代码为一个整型是非常容易的并且可以让你以后的工作变得容易一点,样本的格式是这样的:

<%
dim intUserID intUserID = Request.QueryString("userID")
intUserID = CInt(intUserID)
' intUserID is now an integer.
%>

你同样也可以注释你的ASP代码并使用它们。

注释代码

在ASP中,一个脚本在它被发送到浏览器之前就被执行,所以,你不需要使用普通的HTML注释标签来从旧的浏览器隐藏脚本。事实上,你的脚本不会在HTML源中显示,因为那个源代码被浏览器交出去了,所以,旧的浏览器不会突然的发射任何代码到屏幕上。

你可能想要注释来注释你的ASP脚本,在VB脚本中,你可以使用省略符来记录注释:

<%
currentdate = now

' make sure you use quotation marks around the HTML code
' the & serves to concatenate the string

Response.Write "Today is: " & currentdate & "<BR>"
%>

在ASP脚本中使用//来表示注释

使用包含

如果以前你使用过.shtml文件,你可能已经熟悉了包含的工作过程,如果没有,我们将一步一步告诉你如何使用。

一个包含是容量,它存储在一个单独的文件中。在标准的HTML中,包含通常使用.inc扩展。在ASP中,你使用.asp,.txt或者.inc扩展名。接着你将调用文件到HTML代码中。当HTML文件被发送,包含文件从特殊文件中出来并直接写到屏幕上作为HTML的内容。因此,如果你做一个视图源代码,你看到的显示页面和你输入的是一样的效果。

对于一个普通的HTML来说,当为站点创建一个模版的时候,它会节省很多的时间。头部,页脚和导航元素是显示在你大量页面中的一部分。当你使用包含的时候,你就要输入文件一次并在需要的时候调用它。这有几个优点:

更新内容的时候,你只需要更新一个文件。
包含meat是从HTML页面中隔离的,所以任何人想对内容做出修改都可以避免弄乱脚本。
你的核心HTML文件更小和更实用。
在ASP中,包含是无价的。你可以一遍又一遍的使用脚本,甚至一些时候可以象一个连接串那么简单的存储在包含中,并且,它可以在不可利用的页面删除。

为了使用包含文件,你使用这些格式的任意一个:

<!-- #INCLUDE FILE="filename.inc" -->

或者

<!-- #INCLUDE VIRTUAL="/filename.inc" -->

文件引用包含使用了相关的路径。VIRTUAL引用一个绝对的路径到相关的服务器上。如果你想移动目录和文件,最简单的方法就是默认使用VIRTUAL,这样在后来你就不会遇到一些意想不到的错误。另外一方面,当你测试文件的时候,你需要利用文件,因为他依靠你如何设置的个人服务器。

在标准的HTML中,你一般都给你的包含文件使用.inc后缀。在ASP中,你能使用.asp。这个可以防止你的文件可以轻易的别他人打开并阅读。

上一页 | 下一页

迈出第六步:本次专题ASP学习的最终目标


ASP有一个最重要的功能,就是它可以让你非常轻松地连接数据库。通常都是和一个Access或者一个SQL数据库相连。因为Access是最容易起步的,同时,在你的机器上也许已经都装有Access了,所以,在下面的例子中,我们都将使用Access来做例子。一旦你学习了ASP和Access数据库连接的核心技术方法,当你开始使用SQL server的时候,你就会发现,两者所需要的关键技术是基本相同的。

当你要连接数据库的时候,你需要在服务器上将这个数据库打开。你可以通过使用数据源名(DSN)或者通过在你的脚本语言中直接使用一个DSN-less连接的方法来连接和打开数据库。

创建一个数据源名(DSN)

你可以通过在控制面板中给你的数据库建立一个系统DSN来使你的数据库可以在ASP中连接使用。你可以在你的本地计算机上建立若干个DSN,每个DSN对应你使用的不同的数据库。在建立完DSN之后,你就可以在你的本地服务器上测试你的页面了。如果你的网站是由

ISP提供服务的,并且这个ISP支持ASP,那么很有可能它就会提供一个GUI接口,来给你的数据库创建一个DSN。

在Windows 95/98/NT中,打开控制面板(开始菜单->设置->控制面板),双击ODBC进入。
选择系统DSN,点击Add。
选择“Microsoft Access Driver”,点击结束。
填写数据源名。这是你给你的数据库起的名字,所以和一个alias是同样的操作。
在数据库选择中点击选择按钮,浏览系统中你创建的Access数据库所存放的位置。
点击OK
现在,新的DSN现在就会在系统DSN中显示,并且可以在你的本地服务器上使用了。

连接数据库

让我们建立一个DSN-less连接,并且看看是如何连接数据库的。当你创建一个DSN的时候,你就已经存储了关于这个数据库的一些信息,所以你不需要在每次需要使用一些信息的时候重复它们,这些信息如:数据库类型、名称、存放地点和可选性、用户和密码。

要创建一个DSN-less连接,你就需要提供同样的信息。下面这个例子就显示了如何给一个叫products的数据库建立一个DSN-less连接:

<%
StrConnect = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\db\products.mdb"
Set objConn = Server.CreateObject ("ADODB.Connection")
objConn.OpenStrConnect
%>

第二行定义了数据库的驱动和物理路径。为了要使用一个DSN-less连接,你就需要知道实际的文件存放地点(绝对路径)。Server.MapPath给任何一个使用主机服务的人提供了一个简单的工作环境来查找出那些难于查到的实际访问路径。

如果我们已经建立了一个系统DSN,并命名为products,则连接码应该为:

<%
Set objConn = Server.CreateObject ("ADODB.Connection")
objConn.Open "products"
%>

现在,数据库就已经打开了,那么你可以做些什么呢?第一件事情当然就是阅读数据库中的一系列记录,并将它们放到你的页面中去。但是,在这之前,你需要一个recordset。

Recordset

一个recordset是存储在特殊数据库表上的所有信息。所以,当你打开这个recordset的时候,表中所有的行和列的内容都是可访问的。你需要打开这个recordeset,正如你需要打开数据库连接一样。它们的命令是相似的:

Set objRec = Server.CreateObject ("ADODB.Recordset")
objRec.Open "downloadable", strConnect, 0,1,2

这个语句就创建了一个名为downloadable表的recordset(objRec),这个表在products数据库的strConnect中定义。使用Recordset open, 我们就可以循环浏览这个表,并且可以将它的所有内容都显示到屏幕上。或者,我们可以测试特定字段的内容,也可以只将我们关注的内容写到屏幕上去。

每一列代表一个字段。所以,如果数据库表如下所示:

Product ID SKU Name File
1 PR12345 Product A install_a.exe
2 PR12346 Product B install_b.exe

那么,我们就有如下字段的内容:ProductID, SKU, Name, 和File。你的表很可能会有许多额外的字段内容,可能包含很多东西,如价格或者是产品(商品)描述。但是这个示意图可以给你提供最基本的数据库表的概念。


填写recordset内容

使用recordset是非常容易的一件事情。如果你想要循环浏览数据库,并将所有的信息都打印到屏幕上显示,你可以按照下面来操作:

While NOT objRec.EOF
' says to do this as long as we haven't reached the end of the file
Response.WriteobjRec("ProductID") & ", "
Response.WriteobjRec("SKU") & ", "
Response.WriteobjRec("Name") & ", "
Response.WriteobjRec("File") & "<BR>"
objRec.MoveNext
Wend;

即使你没有如此使用过loop,你仍然可以通过阅读这个代码来将信息写到comma-delimited字符串里,并且当数据库表中创建了一个新行的时候,就重新创建一个新的行,来记录表中的那一行。你可以使用同样的方法将数据写到HTML表格中去。通过使用Response.Write添加你的TABLE标签,需要记住以下几点:

你的HTML 标签和引号中的内容。
如果你的标签或者内容使用了引号,注意使用双引号:<FONT SIZE=""+2"">
使用&来连接变量和HTML/内容信息
选择recordset中的字段

假设我们的products数据库同样包含一个叫OS的字段,假设这个字段是一个平台分界符。同样,让我们假设存储在这个字段的数据只能是如下的数据:Windows NT, Windows 95, Windows 98, Windows, Mac, Unix, 或者 Linux。

下面,我们就可以确认我们需要将哪个字段打印到屏幕上,而要忽略哪些那些字段。或者,我们可以选择哪些字段用一种格式,而另外的字段用其它的格式,如,使用不同的颜色。

使用一个简单的If...,循环就可以给我们提供更多的数据库控制权利。首先让我们来打印有关Windows NT产品的记录:

<TABLE BORDER=0 WIDTH=600>

<TR><TD COLSPAN=4 ALIGN=CENTER><FONT SIZE="+1"<<B>Windows NT Products</B></FONT></TD></TR>

<%
While NOT objRec.EOF

If objRec("OS") = "Windows NT" THEN ' specifies the criteria

Response.Write "<TR><TD BGCOLOR=""#FFFF66"">" & objRec("ProductID") & "</TD>"
Response.Write "<TD>" & objRec("SKU") & "</TD>"
Response.Write "<TD>" & objRec("Name") & "</TD>"
Response.Write "<TD>" & objRec("File") & "</TD></TR>"

end if
objRec.MoveNext
Wend

%>
</TABLE>

添加一个记录

一旦你开始使用recordset和ASP了,你就会十分希望能够通过网络将数据添加到数据库中去。添加内容是非常重要的,如,当你需要你的网页浏览者留下它们的观点和看法,或者,当你想要进行管理更新的时候。

下面的代码打开了一个recordset,这个recordset是有关一个有着书本和它们作者名字的数据库表格。你可能曾经看到过这个,但是这次,最后三个说明书定义的指针类型是不同的:adOpenStatic, adLockOptimistic, adCmdTable:

<% ' database connection already made; code not shown here
Set objRec = Server.CreateObject ("ADODB.Recordset")
objRec.Open "books", bookdb, adOpenStatic, adLockOptimistic, adCmdTable
%>

(如果你没有使用adovbs.inc的复制文件,第三行应该为:objRec.Open "books", bookdb, 3,3,2)

recordset现在就准备好接收数据了,你只需要告诉它添加什么。在这个情况下,假设我们从表格中取出变量:strBookTitle和strBookAuthor。我们的table, books有两个字段,称作Title 和 Author,所以我们可以通过使用下面的语句来添加一个新的记录:

<%
objRec.AddNew
ObjRec("Title") = strBookTitle
objRec("Author") = strBookAuthor
objRec.Update
%>

strBookTitle和strBookAuthor代表值,通常被用户访问。如果你只是想测试add功能,你可以给title和author添加一个变量――只是需要记住使用引号。在你第一次使用它的时候,你可能会立即打开你的数据库,以确保更新的发生。

Recordset类型

在显示的objRec.Open例子中,你会发现在末尾有0,1,2的字样。这些数字代表不同的指针类型。你是用的类型依赖于你将使用它来干什么。例如,如果你不需要修改或增加任何的记录,你可以使用一个Lock类型。而当你计划要修改或者更新数据库的时候,你所选择的类型就会不同。

0,1,2 实际上代表:

adOpenForwardOnly, adLockReadOnly, adCmdTable

当然,如果在你的服务器上已经有了adovbs.inc的备份,那么,你也可以不使用数字,直接使用这些单词。adovbs.inc 包括了这三个常量和其它常量的一个列表。

上一页
chyangwa离线中   回复时引用此帖
回复


主题工具
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭
论坛跳转



所有的时间均为北京时间。 现在的时间是 00:47.


NewvBB Core 1.1 Final - vBulletin v3.0.3
中文化与插件制作 NewVBB.com™ 2024。
友情连接        
摩托车.上海.中国        
         
         
         
         
         

上海市通信管理局
沪ICP备010502
沪ICP备05000578号