ASP 3.0高级编程(十二)
程序员文章站
2022-05-23 10:34:49
4.2.3 服务器端包含指令的例子
本节提供了一些示例页面,可以用来对各种服务器端包含语句进行...
4.2.3 服务器端包含指令的例子
本节提供了一些示例页面,可以用来对各种服务器端包含语句进行实验。打开示例网页的子目录chapter04,显示“ssi directives and the asp server object”主页(即子目录chapter04中的default.),如图4-3所示:
图4-3 示例网页
本书的所有示例都可以从我们的web网站下载。读者将在示例的子目录chapter04中发现本章其余部分的所有示例页面。
1. 使用ssi/cgi处理指令
单击链接进入“server-side include and cgi statements”页面,这将打开ssi_cgi.stm页面。需要注意的是该页面的文件扩展名为.stm,表明这不是一个asp网页。该页面使用了前面已经讨论过的除#exec指令(稍后将看到)以外的所有ssi指令,且显示指令的使用方法和结果,如图4-4所示:
图4-4 示例网页显示的ssi/cgi处理指令情况
(1)#include指令
该页的开始部分“include files with ssi”,显示名为intro.inc的另一个单独文件的内容。下面是该文件的全部内容:
注意我们必须使用html条目“<”和“>”来显示网页中的尖括号。如果不这样做,它们就不能被当作注解元素部分看待,并引起其中的指令被执行。
在主ssi_cgi.stm页面中,把这个文件插入到该页中的代码是很简单的:
<!-- #include file=”intro.inc” -->
(2)#config、#fsize和#flastmod指令
网页下一部分显示了与该页面在相同的目录中的文件default.asp的大小和最后被修改的时间。这里三次使用了#config指令:
· 一次是设置ssi错误信息。
· 一次是设置日期和时间的格式。
· 一次是设置文件大小计算的格式。
使用#fsize和#fiastmod指令把值插入到该网页中:
<p><div class="subhead">ssi statements</div>
<!-- #config errmsg="ssi processing error" -->
(sets error message in case of ssi error)<br>
<!-- #config errmsg="ssi processing error" --><p>
details of file default.asp:<br>
<!-- #config sizefmt="bytes" -->
(sets fsize to return size in bytes)<br>
<!-- #config sizefmt="bytes" -->
<!-- #fsize file="default.asp" -->
returns: <b><!-- #fsize file="default.asp" --> bytes</b><br>
<!-- #config timefmt="%a, %b %d %y %h:%m:%s" -->
(sets format for date/time results)<br>
<!-- #config timefmt="%a, %b %d %y %h:%m:%s" -->
<!-- #flastmod file="default.asp" -->
returns: <b><!-- #flastmod file="default.asp" --></b><p>
(3)#echo 指令
该页的最后部分(在屏幕上只能看到一部分)显示可以使用#echo指令访问的所有http报头的内容。每一行的代码都是相同的,仅仅是var属性值有变化。附录g中给出了var属性的所有容许值的一个完整列表。
<div class="subhead">http variables</div>
<!-- #echo var="auth_type" -->
returns: <b><!-- #echo var="auth_type" --></b><br>
<!-- #echo var="auth_password" -->
returns: <b><!-- #echo var="auth_password" --></b><br>
… etc …
2. 使用#exec指令
#exec指令与其他的ssi指令相比使用起来困难一些,正因为如此,将其独立地放到了另一个页面上。可以从“asp server object and ssi directives”主菜单*问启动页面。
在该页面上,选择“using the #echo server-side include directive”链接。这个操作打开“the ssi #exec directive”页面,如图4-5所示:
图4-5 “the ssi #exec directive”网页
这是一个asp网页ssi_exec.asp。两个按钮用来打开.stm页面,该页面执行其中使用#exec指令所描述的动作。
(1) 在服务器上运行这个示例
在ssi #exec指令示例能够在服务器上工作之前,必须对一些配置进行修改。首先,需要在web服务器的注册表中创建ssienablecmddirective项(类型dword),位置在下面的键名下:
hkey_local_machinesystemcurrentcontrolsetservicesw3svcparameters
然后设置该值为1,如图4-6所示:
图4-6 注册表中的设置
这样就允许#exec指令与cmd属性一起使用。
其次,必须对包含使用#exec指令的.stm文件的目录禁止匿名访问,客户端将被强制提供帐号的详细情况,该帐号应是一个具有管理员级权限帐号。这也是net命令正常工作的要求。
激活internet services manager应用程序,并选择包含使用#exec指令的.stm文件的目录(在示例中,这些文件是exec目录下的start_cis.stm和stop_cisvc.stm)。然后打开该目录的properties对话框。在directory security选项卡中单击anonymous access and authentication control区域中的edit按钮,打开 authentication methods对话框,如图4-7所示:
图4-7 设置验证方法的对话框
这个对话框不选中anonymous access复选框。如果不使用internet explorer访问该页面,打开basic authentication选项以允许非ie通过提交用户名/口令访问该页面。设置时,会出现一个有关安全的警告,单击yes。现在浏览器将被强制出示合适的帐号和身份证明,因为不能匿名访问该网页。
为了能看到启动和终止服务的结果,打开“services mmc插件”,终止indexing service,如图4-8所示:
图4-8 启动和终止服务的屏幕
(2) 启动和终止indexing service
单击示例web网页上的按钮,启动microsoft indexing service。
这个服务的短名称为cisvc,它通常称为microsoft index server,名称中的“ci”字符,实际上代表“content indexer”。
出现提示时,输入在web服务器上的具有管理员权限的一个帐号的用户名和口令。当该页面(start_cisvc.stm)打开时,你将感觉到一定的延迟,这是因为#exec指令载入一个窗口命令解释器(cmd.exe)的实例,然后执行net start命令。一旦服务启动(或者如果已经在运行),将显示该页面的其余部分,如图4-9所示:
图4-9 输入用户名和口令后显示的界面
这个页面的代码十分简单。可以看到#exec指令带有cmd属性,它设置为“cmd.exe /c net start cisvc”。窗体包含有重新回到前一页面的submit按钮:
<p>processing the ssi directive:</p>
<p><b><!-- #exec cmd="cmd.exe /c net stop cisvc" --></b></p>
<!-- #exec cmd="cmd.exe /c net stop cisvc" -->
<form action="../ssi_exec.asp">
<input type="submit" name="cmdok" value=" ">
return to the previous page<p>
</form>
从前一页面可以打开其他的.stm网页,如stop_cisvc.stm用来再次终止该服务,不同之处仅在于使用了net stop命令而不是net start命令。
…
<!-- #exec cmd=”cmd.exe /c net stop cisvc” -->
…
本节提供了一些示例页面,可以用来对各种服务器端包含语句进行实验。打开示例网页的子目录chapter04,显示“ssi directives and the asp server object”主页(即子目录chapter04中的default.),如图4-3所示:
图4-3 示例网页
本书的所有示例都可以从我们的web网站下载。读者将在示例的子目录chapter04中发现本章其余部分的所有示例页面。
1. 使用ssi/cgi处理指令
单击链接进入“server-side include and cgi statements”页面,这将打开ssi_cgi.stm页面。需要注意的是该页面的文件扩展名为.stm,表明这不是一个asp网页。该页面使用了前面已经讨论过的除#exec指令(稍后将看到)以外的所有ssi指令,且显示指令的使用方法和结果,如图4-4所示:
图4-4 示例网页显示的ssi/cgi处理指令情况
(1)#include指令
该页的开始部分“include files with ssi”,显示名为intro.inc的另一个单独文件的内容。下面是该文件的全部内容:
注意我们必须使用html条目“<”和“>”来显示网页中的尖括号。如果不这样做,它们就不能被当作注解元素部分看待,并引起其中的指令被执行。
在主ssi_cgi.stm页面中,把这个文件插入到该页中的代码是很简单的:
<!-- #include file=”intro.inc” -->
(2)#config、#fsize和#flastmod指令
网页下一部分显示了与该页面在相同的目录中的文件default.asp的大小和最后被修改的时间。这里三次使用了#config指令:
· 一次是设置ssi错误信息。
· 一次是设置日期和时间的格式。
· 一次是设置文件大小计算的格式。
使用#fsize和#fiastmod指令把值插入到该网页中:
<p><div class="subhead">ssi statements</div>
<!-- #config errmsg="ssi processing error" -->
(sets error message in case of ssi error)<br>
<!-- #config errmsg="ssi processing error" --><p>
details of file default.asp:<br>
<!-- #config sizefmt="bytes" -->
(sets fsize to return size in bytes)<br>
<!-- #config sizefmt="bytes" -->
<!-- #fsize file="default.asp" -->
returns: <b><!-- #fsize file="default.asp" --> bytes</b><br>
<!-- #config timefmt="%a, %b %d %y %h:%m:%s" -->
(sets format for date/time results)<br>
<!-- #config timefmt="%a, %b %d %y %h:%m:%s" -->
<!-- #flastmod file="default.asp" -->
returns: <b><!-- #flastmod file="default.asp" --></b><p>
(3)#echo 指令
该页的最后部分(在屏幕上只能看到一部分)显示可以使用#echo指令访问的所有http报头的内容。每一行的代码都是相同的,仅仅是var属性值有变化。附录g中给出了var属性的所有容许值的一个完整列表。
<div class="subhead">http variables</div>
<!-- #echo var="auth_type" -->
returns: <b><!-- #echo var="auth_type" --></b><br>
<!-- #echo var="auth_password" -->
returns: <b><!-- #echo var="auth_password" --></b><br>
… etc …
2. 使用#exec指令
#exec指令与其他的ssi指令相比使用起来困难一些,正因为如此,将其独立地放到了另一个页面上。可以从“asp server object and ssi directives”主菜单*问启动页面。
在该页面上,选择“using the #echo server-side include directive”链接。这个操作打开“the ssi #exec directive”页面,如图4-5所示:
图4-5 “the ssi #exec directive”网页
这是一个asp网页ssi_exec.asp。两个按钮用来打开.stm页面,该页面执行其中使用#exec指令所描述的动作。
(1) 在服务器上运行这个示例
在ssi #exec指令示例能够在服务器上工作之前,必须对一些配置进行修改。首先,需要在web服务器的注册表中创建ssienablecmddirective项(类型dword),位置在下面的键名下:
hkey_local_machinesystemcurrentcontrolsetservicesw3svcparameters
然后设置该值为1,如图4-6所示:
图4-6 注册表中的设置
这样就允许#exec指令与cmd属性一起使用。
其次,必须对包含使用#exec指令的.stm文件的目录禁止匿名访问,客户端将被强制提供帐号的详细情况,该帐号应是一个具有管理员级权限帐号。这也是net命令正常工作的要求。
激活internet services manager应用程序,并选择包含使用#exec指令的.stm文件的目录(在示例中,这些文件是exec目录下的start_cis.stm和stop_cisvc.stm)。然后打开该目录的properties对话框。在directory security选项卡中单击anonymous access and authentication control区域中的edit按钮,打开 authentication methods对话框,如图4-7所示:
图4-7 设置验证方法的对话框
这个对话框不选中anonymous access复选框。如果不使用internet explorer访问该页面,打开basic authentication选项以允许非ie通过提交用户名/口令访问该页面。设置时,会出现一个有关安全的警告,单击yes。现在浏览器将被强制出示合适的帐号和身份证明,因为不能匿名访问该网页。
为了能看到启动和终止服务的结果,打开“services mmc插件”,终止indexing service,如图4-8所示:
图4-8 启动和终止服务的屏幕
(2) 启动和终止indexing service
单击示例web网页上的按钮,启动microsoft indexing service。
这个服务的短名称为cisvc,它通常称为microsoft index server,名称中的“ci”字符,实际上代表“content indexer”。
出现提示时,输入在web服务器上的具有管理员权限的一个帐号的用户名和口令。当该页面(start_cisvc.stm)打开时,你将感觉到一定的延迟,这是因为#exec指令载入一个窗口命令解释器(cmd.exe)的实例,然后执行net start命令。一旦服务启动(或者如果已经在运行),将显示该页面的其余部分,如图4-9所示:
图4-9 输入用户名和口令后显示的界面
这个页面的代码十分简单。可以看到#exec指令带有cmd属性,它设置为“cmd.exe /c net start cisvc”。窗体包含有重新回到前一页面的submit按钮:
<p>processing the ssi directive:</p>
<p><b><!-- #exec cmd="cmd.exe /c net stop cisvc" --></b></p>
<!-- #exec cmd="cmd.exe /c net stop cisvc" -->
<form action="../ssi_exec.asp">
<input type="submit" name="cmdok" value=" ">
return to the previous page<p>
</form>
从前一页面可以打开其他的.stm网页,如stop_cisvc.stm用来再次终止该服务,不同之处仅在于使用了net stop命令而不是net start命令。
…
<!-- #exec cmd=”cmd.exe /c net stop cisvc” -->
…