asp3高级编程(十一)
前面的部分已经研究了ASP的一些内置对象。对象主要是请求、响应、会话和应用程序对象。ASP中另一个更重要的对象是服务器对象。
服务器对象提供了一种扩展的ASP页面的功能通过一个实例和使用其他外部对象和组件,在服务器端脚本。事实上,很多人认为这个对象是ASP的普及的主要因素。服务对象的引入是非常重要的,这意味着ASP没有提供所有人需要的属性,它可以调用其他应用程序和组件来完成指定的工作。
这正好与建筑组成的一个独立对象应用的总体目标,而不是建立一个庞大的计划,通常可以在硬盘空间,通常被视做一切。不仅在计算机的世界里,全世界对组件和即插即用的概念发展。如今,当一辆车电视机坏了,一个技术员或工程师可能会把有缺陷的部件和插入一个新的组件,所以工作车辆维修人员或电视维修人员也成为面向对象。
然而,IIS还支持许多传统的使用外部对象和与服务器环境交互的方式。这些方法并不是真正的ASP组件,但是它们通常非常有用,并且通过一些服务器对象的新特性与ASP进行了良好的集成,本章将简要回顾这些传统方法,然后详细介绍ASP服务器对象。
本章的主要内容如下:
传统的服务器端包含背景知识和(SSI)指令的用法。
服务器对象完成的任务和与SSI的比较。
如何使用服务器对象实例、外部组件和应用程序。
如何使用服务器对象执行封装的脚本或其他ASP页面。
如何使用服务器对象来管理脚本中出现的错误。
如何使用服务器对象完成与HTML或HTTP兼容的格式转换。
服务器对象是误差在ASP页面处理过程的一部分,这是在IIS 5和ASP 3的新内容。本章描述了对象的作品。因为有单独的一章(第七章)关于调试和错误处理的所有问题,因此本章简单论述了错误处理方法和有限的过程直接参与服务对象。
4.1动态页面中服务器端的处理
就服务器端处理而言,ASP是一种相对较新的动态网页生成技术,动态页面意味着什么它不考虑一会儿客户端相关功能的进步,也不讨论客户端脚本、java小程序,动态HTML或ActiveX控件。这里的动态页面是响应客户端请求的服务器页面,并根据每个页面的情况可能。
举个简单的例子,创建一个页面只包含当前日期和时间。你的每一次请求的页面,一个不同的值显示,因为日期和时间取决于服务器的时钟,或在资源提供的日期和时间(例如,一个独立的服务器或从互联网标准钟)。事实上,动态网页的过程远比这复杂的多。他们可能会显示数据库记录或邮件在邮件服务器的总结的当前值,服务器不仅读一个无形的HTML页面,它是重要的,或文本文件在磁盘上,但也给他们的客户,我们必须完成一些工作来创建这个页面。
因特网服务器应用程序编程接口
第一章介绍了创建动态页面的几种方法,传统的技术是使用与Web服务器的接口,称为Internet服务器应用编程接口(Internet服务器应用程序接口)。
ISAPI可以用来执行其他应用程序。这些应用程序读取客户端请求的值,通过C语言风格的stdin和stdout的数据流功能创建Web服务器的响应,ISAPI应用程序必须做的事情全是写的文字和相应的结果页面,通过输出功能输出到Web服务器的HTML。事实上,在ASP动态链接库真的更多的是面向对象的。
运行IIS的ISAPI应用和脚本解释器从它开始,它提供了一个特殊的翻译的动态链接库,提供另一种方式来访问服务器的请求和响应,尽管有一定的限制。它是通过服务器端包含指令实现的,这是因为他们是在服务器上执行,并且结果是包含在响应发送到客户端,这个功能是实现在IIS通过动态链接库命名ssinc.dll.by默认IIS映射文件扩展名为任何网页。Shtml。Shtm,或者,STM的动态链接库,打开默认网站属性对话框,点击应用程序设置看到这个映射配置按钮,如图4-1所示。
图4-1应用程序配置对话框
这样,这些映射文件扩展名的页面将被发送到ssinc.dll处理。因此,执行所有的服务器端的报表中包含的网页,并将结果(如果有)到服务器的响应,即插入网页,客户端接收。
因为这些文件被映射到ssinc.dll文件映射到ASP动态链接库(ASP。DLL),在这些网页上所有的ASP代码将被发送到客户端根据原始状态。客户机将能够看到这些脚本。然而,在ASP 3版本中,以及稍后讨论服务器对象的执行和传输方法时,有一种方法可以避免这种情况。
4.2服务器端包含指令
你能用服务器端(SSI)语句(或指令)做什么其实不多,除非你打算创建可执行文件,运行在Web服务器和访问ISAPI通过stdin和stdout的功能。这意味着他们可以用C,C++,或其他语言(如Delphi),但VB是不合适的。另外,那些可以使用SSI指令可以达到同样的效果在ASP。在许多方面,IIS的SSI功能对原来的网站和网页,使用这些功能向下兼容。
然而,有时您可能希望在站点上使用SSI而不是ASP。在IIS 5中,服务器端的指令比以前更容易集成到远程站点的ASP页面中。它们非常有用,特别是作为执行操作系统命令或原始CGI应用程序的一种方式。
这是一个#包括指令这些指令,已使用ASP的一些时间,以及在SSI页面。事实上,这也带来了很多的ASP开发者不要混淆传统的Web开发背景。
4.2.1难以置信的ASP #包括指令
在ASP页面中,您可以使用#包括插入另一个文件中的内容到当前页面的指令:
这个指令读取所有文件的内容并将其插入到页面的线。这是插入HTML段落的一个非常有用的技术,可以重复使用。这个指令也可以用来插入代码段。例如,如果一个包含多个脚本函数文件(或只是一行脚本代码)是同时在几个页面,它可以插入到每个页面需要用#包括指令。
通过从内容中分离的脚本,该页面提供一个作文水平。这意味着,如果剧本被修改,当用户打开页面,脚本的修改将自动反映在每一页包含该文件。一个简单的方法是插入一个包含信息服务器的特定文件,所以另一个服务器的网站转移并不意味着所有的网页必须编辑原始服务器(包括明显的例子是数据库连接字符串或指定完整的URL服务器名称或链接),这可以大大降低维护成本。
例如,你可以使用以下的内容作为一个包含文件,命名为connect.inc:
strconnect = =,=文件服务器;数据库;SQL Server驱动= { };_
UID =用户名;密码= secretpassword
%>
然后您可以在任何页面上使用此文件:
…
strtheconnectionstring = strconnect从包含文件
…
%>
另一种情况下,使用包含文件,有些内容需要在指定的时间间隔进行修改。例如,一列书目列表显示在Web站点的主deverloper。它包含了一个表,它提供了所有的封面,标题和按钮,如图4-2所示。
图4-2显示书目列表的网页
HTML和本表的文本保存在一个单独的文件,这是一个单独的#在首页包括声明。当一个新的书被添加到基于网页的数据库,文本文件再根据数据库和写入文本文件的磁盘创建。
这种技术大大减少了Web服务器和数据库服务器的工作量,并对站点的访问者作出快速响应。
1。包含文件和ASP
的#指示包括在ASP使用的页面,即网页,ASP文件的扩展名,无法处理像一个真正的SSI指令。这只是一个特殊的指令,ASP能够认识和分析syntax.ssinc.dll是直接用于SSI #执行包括指令。然而,这一页,这是由相应的文件内容替换,由#解释包括指令通过ASP。
这意味着ASP不控制操作的#进行包括指令。例如,您可以测试下面的代码:
这不会工作
strincludeurl =请求的形式(文件名)。
%>
…
Ssinc.dll将找到的文件的名称,而不被发现,那么这段代码将不工作。
2。包含文件的安全性。
如果不包含可执行脚本,则Web服务器上的ASP网页不能通过IIS的Web服务程序下载到客户端,但也有人发现了偶尔的安全漏洞,例如著名的美元数据问题。所有在NTFS格式化磁盘上保存Web内容的Web服务器都有相应的问题,IIS 5中已经解决了这个问题。
$数据问题的产生是因为在Windows NTFS驱动器的所有文件都有一个默认值,该文件的内容,它是通过文件名加上后缀:data.adding美元到ASP一页的URL结束会打乱IIS脚本映射关系,并允许服务器不过程所包含的脚本,而不是页面,IIS 4或更早的版本,有一种方法来解决这个问题,或者只是添加一些映射迫使IIS执行网页正常,即增加映射。ASP::::一美元的数据。美元的数据,它们都指向asp.dll文件。
包含文件的扩展名一般是公司or.txt.if你找到一个路径和文件包含网站上的文件名,你可以通过键入包含该文件不执行它的ASP网页浏览器的地址栏中的URL下载包文件。为了防止这种情况,特别是当一个文件包含敏感信息,如数据库连接字符串,可以包含文件to.asp.in这种情况下的扩展,如果你想下载一个包含文件,它将首先被送往ASP,ASP将执行所有脚本代码文件和发送结果只有在包含文件中定义的。一个连接字符串如下:
strconnect = =,=文件服务器;数据库;SQL Server驱动= { };_
UID =用户名;密码= secretpassword
响应。写vbcrlf输出一个回车符
%>
客户端只能接受一个返回字符,而不是脚本代码,因为该文件已由服务器上的ASP执行。如果不包含回车符,浏览器将挂起并等待响应。这不是我们的问题,因为我们真的不打算允许用户直接访问文件。
IIS 5和Windows的访问控制列表
在IIS 5中,微软改变了Web服务器和操作系统访问服务器端包含文件的方式。
在早期版本的IIS,当ssinc.dll负载虚拟URL(而不是使用虚拟文件名文件名= =)位置包含一个文件,将绕过Windows本身的安全检查和忽视任何安全设置并存储在列表中的文件。现在,在IIS 5的帐户运行,目前ASP或SSI网页必须设置在Windows访问控制列表的文件和目录的权限(ACL)一致。如果不一致,SSI指令会失败。
4.2.2服务器端包含一个指令汇总
除了对#包括声明进行了讨论,有五的服务器端的指令包含在IIS。(记住,除了#包括,这些语句不能在ASP网页执行)。这些服务器端包含指令和指令如表4-1所示:
表4-1服务器端包含指令和指令
指令
解释
#包括
将指定文件的内容插入到将发送给客户机的响应流中,并替换指令:
该指令将文件内容的usefulbits.inc到响应。这个文件可以描述相结合的相对或绝对路径的文件名,如文件= .. myscr.inc.by脚本使用的虚拟财产,虚拟的相对或绝对路径可以用来描述它,例如:
#配置
在随后的数据、时间和文件大小的指令中使用的文本格式,以及返回给客户机的一般SSI错误信息:
将SSI错误信息内容设置为SSI处理错误。
设置格式的日期和时间由随后的SSI指令返回。本例设置格式样式:星期六,141999八月10:34:50。一列标志可用于字符串格式附录C中给出
设置文件的大小单位,随后的IIS返回的指令。这套单位字节。可sizefmt值是缩写,表明计算值返回千字节大小(KB)到文件的大小
#回声
将HTTP环境变量的值插入到发送给客户机的响应流中,并替换指令:
将正在执行指令的服务器的名称写入Web页面。
# exec
执行一个程序或一个服务器shell命令,例如:
CGI程序,命名为MyApp.exe,允许你通过查询字符串,和程序执行在一个单独的记忆。
开始具体的操作系统命令解释器(CMD .exe)和执行命令IISRESET /停止。 / C表示,当命令结束时,命令解释程序也完成了。使用CMD添加以下注册表项:
hkey_local_machine 系统 / / W3SVC CurrentControlSet /服务
/ / ssienablecmddirective参数
设定值是1,和WWW服务开始和CMD标志是允许使用的# EXEC指令。该值为0,并禁止和防止未经使用。
# flastmod
将修改后的文件在指定文件上的日期和时间插入到发送给客户机的响应流中,并替换指令。
例如:
像#包括指令,你也可以使用虚拟路径的定义文件,如:
虚拟= / / usefulbits.inc mysite
或
虚拟= / / usefulbits.inc此位..
# fsize
将指定文件的大小插入发送给客户机的响应流中,并替换指令:
像#包括指令、虚拟路径也可以被用来定义文件,如:
虚拟= / / usefulbits.inc mysite
或
虚拟= / / usefulbits.inc此位..
1.iisreset实用程序
通过IIS 5 iisreset.exe提供了新的工具。作为一个命令行工具,如果用来执行本帐户具有管理员的权限,可以控制网络服务器在本地或网络计算机上运行是非常有用的,它可以用来停止或启动的正确顺序显示所有服务,服务的状态,重新启动服务器,并允许或禁止服务管理。例如:
IISRESET重启 / / / rebootonerror超时:30
这将停止并重新启动正确的顺序在所有的互联网服务,如果服务不能停止或重新启动在指定的超时时间(30秒),服务器将重新启动了开关,可用于CMD #回波SSI指令使页面无法访问匿名,并要求用户提供详细的帐户对管理员权限的目标服务器的有效帐户。本实用新型和现有的命令开关充分说明在附录C
2.net停止和启动命令
如果用于执行实用程序的帐户具有管理员的权限,可以管理任何服务的服务器上,即运行,它可以是局部或从其他计算机。虽然不提倡使用网络服务程序(如WWW、FTP服务),它是停止开始其他服务的功能非常有用。事实上,net命令也可以用于其他一系列相关的网络命令。
语法是:
{开始} service_name |停网
例如,在微软索引服务可以停止和启动的命令停止和启动cisvc cisvc。你可以用命令式#回波SSI指令使页面无法访问匿名,并要求用户提供与目标服务器上的管理员权限的账户细节。这样的一个例子以后会看到的。
在Windows 2000的帮助文件,你可以找到所有的选项和net命令的完整列表开关。从开始菜单中选择帮助项目,并查找netcommands在帮助窗口的索引页。