|
SSI指令为用户提供在Web服务器处理之前将一个文件的内容插入到另一个文件的方法。ASP只使用这一机制的#include指令。要在.asp文件中插入一个文件,使用下面的语法: <!--#include virtual | file =\"filename\"--> virtual和file关键字指示用来包含该文件的路径的类型,filename是您想包含的文件的路径和名称。 被包含文件不要求专门的文件扩展名;但是,为被包含文件赋予.inc扩展名以便和其他类型文件相区分是一个良好的编程习惯。
使用Virtual关键字 使用Virtual关键字指出路径开始于虚拟目录。例如,如果一个被命名为Footer.inc的文件属于一个名为/Myapp的虚拟目录,则下面的一行将把Footer.inc的内容插入到包含该行的文件中: <!--#include virtual =\"/myapp/footer.inc\"-->
使用File关键字 使用file关键字指示使用相对路径。相对路径开始于含有该包含文件的目录。例如,如果您的文件位于目录Myapp中,而文件Header1.inc在Myapp\\Headers中,下面的一行将把Header1.inc插入到您的文件中: <!--#include file =\"headers/header1.inc\"--> 注意,到被包含文件Headers/header1.inc的路径是相对于包含文件的;如果包含#include语句的脚本不在/Myapp目录中,那么该语句将不起作用。 如果在Internet服务管理器中的\"启用上层目录\"选项被选中,则也可以使用file关键字和../语法包含父目录即上一层目录中的文件。有关命令,请参阅配置ASP应用程序。
被包含文件的位置 被包含文件可以在您的Web站点内的某个目录中,也可以在您的Web站点之外。通常,您应该使被包含文件位于Web站点的目录中。如果一个被包含文件位于您的Web站点内,则当浏览器下次请求包含文件时,将显示对被包含文件的改变。但是,如果被包含文件位于您的Web站点之外,直到 ASP应用程序重新启动或Web服务器重新启动时,这种改变才能体现出来。ASP检测在应用程序命名空间中(在应用程序的起始目录下)的任何包含文件的改变。
包含文件:提示和警告 一个被包含文件也可以包含其他的文件。如果#include指令没有导致循环,一个.ASP文件可以多次包括同一个文件。例如,如果文件First.ASP包含文件Second.inc,则Second.inc 一定不能再包含First.asp。一个文件也不能包含自身。ASP检测此类循环或嵌套错误,并在检测到时产生一个错误消息,同时停止处理被请求的.ASP文件。 ASP在执行脚本命令之前包含文件。因此,不能用脚本命令去创建被包含文件的名称。例如,下面的脚本将不能打开Header1.inc,因为ASP会在它分配一个文件名给变量name之前先执行#include指令。 <!-- This script will fail --> <% name=(header1 & \".inc\") %> <!--#include file=\"<%= name %>\"--> 脚本命令和过程必须完全包含在脚本定界符<% 和 %>、HTML标记<SCRIPT>和</SCRIPT>或HTML标记<OBJECT>和</OBJECT>中。也就是说,不能在一个.ASP包含文件中打开一个脚本定界符,然后在一个被包含的文件中才关闭该定界符;脚本或脚本命令必须是一个完整的单元。例如,下面的脚本将无法运行: <!-- This script will fail --> <% For i = 1 To n statements in main file <!--#include file=\"header1.inc\" --> Next %> 下面的脚本将正常运行: <% For i = 1 to n statements in main file %> <!--#include file=\"header1.inc\" --> <% Next %>
使用HTML表格 使用ASPRequest对象,您可以创建一个简单而功能强大的脚本来收集和处理HTML表格数据。在本主题中,您将不仅学会如何创建基本的表格处理脚本,而且还将获得用于验证Web服务器和用户浏览器上的表格信息的一些有用技术。 关于HTML表格 HTML表格是收集Web信息最常用的方法,是在Web页上提供用户界面控件的特殊的HTML标记的排列。文本框、按钮和复选框都是典型的控件,这些控件使用户和Web页实现交互,并且将信息提交给Web服务器。 下面的HTML示例产生一个表格,在表格中,用户可以输入姓名、年龄并包含一个将这些信息提交给Web服务器的按钮。该表格也包含了一个隐含的控件(Web浏览器不显示),可以用该控件向Web浏览器传递附加信息。 <FORM METHOD=\"POST\" ACTION=\"myfile.asp\"> <INPUT TYPE=\"text\" NAME=\"firstname\"> <INPUT TYPE=\"text\" NAME=\"lastname\"> <INPUT TYPE=\"text\" NAME=\"age\"> <INPUT TYPE=\"hidden\" NAME=\"userstatus\" VALUE= \"new\"> <INPUT TYPE=\"submit\" VALUE=\"Enter\"> </FORM>
处理ASP输入的表格 在表格向Web服务器提交信息时,用户的Web浏览器请求用HTML<FORM>标记的ACTION属性所指定的.ASP文件(在前面的例子中,该文件被称为Myfile.asp)。.ASP文件包含了处理表格值(如显示结果表或从数据库查询信息)的脚本。 可以通过三种途径用.ASP文件收集HTML表格的值 静态的.htm文件可以包含一个将其数值邮送给.ASP文件的表格。 .ASP文件可以创建一个将其信息邮送给另一个.ASP文件的表格。 .ASP文件可以创建一个将其信息邮送给自身的表格,即包含该表格的文件。 前两个方法的操作方式相同,当表格与网关程序交互时,除ASP之外,可以包含读取和响应用户选择的命令。 创建一个包含表格定义且传送信息给自身的.ASP文件较复杂,但却是有很强功能的处理表格的方法。这一过程在验证表格输入中演示。 获得表格输入 ASPRequest对象提供了两种集合,在很大程度上简化了检索附加在URL请求上的表格信息的任务。 1、QueryString集合 QueryString集合获取作为跟在请求的URL的问号后面的文本传递给Web服务器的值。通过使用HTTP GET方法或手工将表格的值添加到URL,表格的值可以被附加在请求的URL之后。 例如,如果先前的表格示例使用GET方法(ACTION = \"GET\") 且用户键入Jeff、Smith和 30,那么下面的URL请求将被发送给服务器: http://scripts/Myfile.asp?firstname =Jeff&lastname=Smith&age=30&userstatus=new Myfile.ASP包含下面的表格处理脚本: Hello, <%= Request.QueryString(\"firstname\") %> <%= Request.QueryString(\"lastname\") %>. You are <%= Request.QueryString(\"age\") %> years old. <% If Request.QueryString(\"userstatus\") = \"new user\" then Response.Write\"This is your first visit to thisWebsite!\" End if %> 在这种情况下,Web服务器将返回下面的文本给用户的Web浏览器: Hello, Jeff Smith. You are 30 years old. This is your first visit to thisWebsite! QueryString集合有一个可选参数,可用来访问显示在请求正文中的多个值中的一个。也可以使用Count属性计算一个特殊类型的值的出现次数。例如,表格包含一个多项目的列表框可以提交下面的请求: http://list.asp?food=apples&food=olives& food=bread 您也可以使用下面的命令去对多个值计数: Request.QueryString(\"food\").Count 如果想显示多个值的类型,List.ASP应包含下面的脚本; <%Total = Request.QueryString(\"food\").Count%> <%For i = 1 to Total%> <%= Request.QueryString(\"food\")(i) %> <BR> <%Next%> 上述脚本将显示: apples olives bread 2、Form集合 当使用HTTP GET方法去向Web服务器传递长而复杂的表格值时,将可能丢失信息。大多数的Web服务器倾向于严格控制URL查询字符串的长度,以便用GET方法传送的冗长的表格值被截断。如果您需要从表格发送大量信息到Web服务器,就必须使用HTTP POST方法。此法用于在HTTP请求正文中发送表格数据,而且发送的字符的个数可以无限多。也可以使用ASPRequest对象的Form集合检索用POST方法发送的值。 Form集合与QueryString集合存储数值的方式相同。例如,如果用户用一长串名称填充表格,您就可以用下面的脚本检索这些名称: <% For i = 1 to Request.Form.Count %> <% =Request.Form(\"names\")(i) %> <% Next %> 验证表格输入 一个好的表格处理脚本在处理数据前,应先验证输入表格的信息是否有效。验证脚本可以检验用户输入到表格的信息类型是否正确。例如,如果您的Web站点包含一个表格,该表格允许用户计算财务信息,那么在处理结果之前,需要验证用户确实输入了数值信息而不是文本。 一个非常方便的验证表格输入的方法是创建一个向自身传递信息的表格。在这种情况下,.ASP文件包含可获取信息的表格。例如,下面的脚本通过向自身传递信息来验证用户是否在 \"age\"表格字段中输入了数值: <% If Isnumeric(Request.QueryString(\"Age\")) then %> <p>Hello, your age is <%=Request.QueryString(\"age\")%> <%Else %> <p>Please enter a numerical age. <%End If %> <FORM METHOD= \"POST\" ACTION=\"verify.asp\" > Name: <INPUT TYPE=\"text\" NAME=\"Name\" > Age: <INPUT TYPE=\"text\" NAME=\"Age\" > <INPUT TYPE=\"submit\" VALUE=\"Enter\"> </FORM> 在这个例子中,脚本也在包含表格的同一Verify.ASP文件中。表格通过在ACTION属性中指定Verify.ASP自身传送信息。 您也可以创建客户端脚本来检验用户是否输入了有效的信息。验证用户在Web浏览器上的输入除了更迅速地向用户提示表格项错误外,还可以减少Web服务器的网络流量。下面的脚本运行在用户的Web浏览器上,在将信息提交到Web服务器之前,验证用户信息。 <SCRIPT LANGUAGE=\"VBScript\"> <!-- Sub btnEnter_OnClick Dim TheForm Set TheForm = Document.MyForm If IsNumeric(TheForm.Age.Value) Then TheForm.submit Else Msgbox \"Please enter a numerical age.\" End if End Sub //--> </SCRIPT> <FORM METHOD= \"POST\" NAME= MyForm ACTION=\"myfile.asp\" > Name: <INPUT TYPE=\"text\" NAME=\"Name\" > Age: <INPUT TYPE=\"text\" NAME=\"Age\" > <INPUT TYPE=\"button\" NAME=\"btnEnter\" VALUE=\"Enter\"> </FORM>
|