介绍
ASP(Active Server Pages)是一种服务器方的脚本技术,它动态地定位和发送由用户请求的信息。为了成功地使用ASP,你应该在开发和管理你的项目的实践中,使用计划。本文是为系统管理员,网络作家,及计划或考虑使用ASP的网络应用程序开发人员而编写的。本文中的信息将会帮助你计划开发和管理安全的,组织良好,易于理解的ASP应用程序。
ASP或浏览器脚本
给定对一个脚本解决方案的需求后,你将会想要判断是编写ASP页面还是编写基于浏览器的脚本,并且你还会想要在开发过程的初期就进行这一判断。
计划使用ASP,当你需要:
定制带有从后端资源收集并进行挑选以满足用户的需要的信息的网页。
收集由站点访问者通过HTML表单提交的数据。
发送为特定种类和版本的浏览器制作的页面。
为了避免在你的服务器上放置不必要的负担,为这样的任务如确认用户提交的数据,计算,及简单条件输出的选择计划使用基于浏览器的脚本。
本文包括ASP应用程序计划的三个方面:
解决常见问题
组织ASP应用程序目录和文件
为ASP脚本设置标准
ASP开发的其他方面,如性能和可靠性,将在以后的文章中介绍。
尽管ASP页面很有用,但是知道开发和配置他们的一些风险是很重要的。如果ASP页面连接的用户带有包含有关怎样定位和访问企业数据的信息的后端数据资源,那么这个页面也可能包含你的企业商业规则,顾客数据,以及其他敏感信息。结果,知道存在将敏感信息显露给不被许可的人的潜在可能性是很重要的。当开发和配置ASP时,可能会产生错误而允许不应该访问的人访问到这个信息。此外,如果你没有使用好的开发和管理实践,你可能会由于不断产生性能和可靠性问题,满意的用户越来越少儿不得不终止。
ASP管理计划
ASP应用程序存储在你的文件系统中。一个ASP应用程序是ASP页面的一个集合连同所包含的HTML页面和这个应用程序所需要的组件。当你定义一个应用程序时,你利用Internet服务管理器来制定这个应用程序在网站中的起始目录。
这一部分提供目录结构的一个模板和指导,以及ASP应用程序的访问权限。下面的模板将帮助你建立一个ASP应用程序组织模型,实现一致性,可靠性和安全性,而不管你的ASP应用程序有多大多复杂。
为下面列表中目录和文件给定的组织和属性比使用的名字更重要。
/Application_Name
Default.htm
Global.asa
/Classes
/Content
/ASP
*.asp
/HTM
*.htm
/Images
/Media
/Themes
/Data (不在站点目录中)
/DLL (不在站点目录中)
/Helper_Files (不在站点目录中)
应用程序根目录 应用程序根目录的名字因该清楚地表达这个站点的主题。例如,用于金融搜索的应用程序可以命名为/Financial_Research。避免使用可能被误认为是一个站点的边准子目录的应用程序根目录名,如/Media or /Content。还有,避免使用读起来像是部分数字或代码的名字,如/FR98346A。
为了避免对产品站点产生负面影响,一定要在一个开发测试环境中开发这个应用程序。实现这个的一个简单方法是在IIS HTTP根目录/InetPub/wwwroot下开发新的应用程序,然后将他们拷贝到产品环境中InetPub/wwwroot下的相同目录中,如果这些目录已经存在。
注意 /InetPub/wwwroot时所有Microsoft® Visual InterDev™ 和 Microsoft FrontPage™网络文档的主位置。如果将一个网络应用程序迁移到一个存储位置而不是/InetPub/wwwroot下,这些工具将不能访问它。
每个应用程序的根目录应该至少包含如下这些文件:
Default.htm 或 Default.asp
Global.asa
Default.htm 或 Default.asp应该是应用程序的缺省主页,并且服务器默认值应该利用Internet服务管理器据此设置。采取这两个步骤使用户能够通过键入服务器地址加上应用程序根目录的名字而一致地在你的公司中找到站点。例如,用户可以通过输入msdn.microsoft.com访问MSDN Online。输入主页的名字是不必要的。
文件Global.asa指定事件脚本,声明拥有应用程序或对话域的对象,及声明类型库。例如,Global.asa脚本使application- 和session-scope变量在启动时可用。Global.asa必须存储在应用程序根目录中。
/Classes /Classes目录存储由应用程序使用的所有Java类,并请求执行权限。
/Content /Content保存所有页面(除Default.htm以外)及可能被站点的用户直接取还的媒体。
/ASP /Content 的/ASP子目录包含带有服务器端脚本的所有页面。这个目录必须包含执行权限,以便这个ASP能够执行这个页面脚本。不要向这个目录分配读权限,因为.asp页面可能包含有关商业规则及到数据资源的访问权的敏感信息。将所有的脚本页面存储在这里简化了权限管理和站点安全性。
/HTM /Content 的/HTM子目录包含所有只包含标准HTML的页面。这个目录是只读的,并且没有执行权限。包含存储在这里的服务器方脚本的页面将不会执行。
/Images 作为/Content的一个子目录,/Images文件夹应该包含与主题相关图像单独使用的图形,如标准按钮和图标(如下)。
/Media作为/Content的一个子目录,/Media应该包含子目录audio, images, animation files, .avi files及用于整个应用程序类似条目。
/Themes它是/Content目录的一个子目录。利用/Themes目录使程序能够改变一个站点的面貌。这个目录应该包含样式表,bullets,按钮,图标,规则,以及组织起来以便你能够通过简单地改变任何或所有与这个主题有关的条目改变应用程序的面貌的类似条目。/Theme目录中的每个条目可以通过向它的虚拟路径设置一个应用程序变量来动态地连接。
/Data这个目录应该包含所有数据库访问信息,如SQL脚本,基于文件的数据组名字或其他这个应用程序所需的类似的数据。不要将这个目录放在这个站点目录下,因为这会给一个未授权的用户到商业规则及私有数据的访问权。
/DLLs这个目录包含COM组件和Visual Basic® 6.0运行事件DLLs,如Vbrun500.dll 和 Msvbvm50.dll。不要将这个目录放在这个站点目录下,因为这个会给一个黑客到商业规则和私有数据的访问权。
/Helper_Files这个目录保存服务器方包含或文本格式的文件,这个文本格式的文件使信息跨越应用程序或许多应用程序可用。由于安全性原因,这个包含帮助文件的目录应该存储在已发行的网络空间中(用户可以确认的网站目录)。
文件-扩展名标准
在这个部分中提供的文件命名协定为可靠的,一致的,和安全的文档页面提供有用的标准。
使用.asp扩展名是包含服务器方脚本的页面必须的。为将来可能包含脚本的页面使用.asp扩展名是一个好的策略,即使他们开始不是这样。为了保存服务器资源及在服务业面时最小化延迟,需要为现在和将来都不需要服务器方脚本程序的文件使用.htm扩展。
为了一致性和易于维护,使用包含文件(.inc)使指定的信息对多于一个的相关页面可用;对包含文件的改变被分配到调用他们的所有页面。为包含在页面种的纯文本格式的数据文件,使用文本文件(.txt)。
不要为包含脚本的页面使用.inc。如果一个用户管理显示这样的页面,这个脚本种的所有商业规则都会显露出来。为所有包含脚本的页面或计划使用脚本的文件使用.asp扩展名,来避免显示在ASP脚本中编码的所有权信息。
设置脚本标准
如果你已经组织,命名,并保护你的ASP应用程序空间,那么计划并设置一个好的ASP的任务就完成了一半。你还将想要为页面脚本建立标准来使他们易于被小组种的所有页面作者阅读。
可读性脚本样式
为了增强可读性,建立为ASP页建立如下脚本样式。这些样式适用于利用Microsoft Visual Basic® Scripting Edition (VBScript) 或 JScript®编写的脚本。当利用目录和文件协定时,解决下面的问题比准确地应用给定的协定更重要。当决定是否定义你的脚本协定时,还要考虑大多数ASP页面包含一些纯粹的HTML这个事实。
这一部分将使你开始建立脚本标准。最近在这个站点上将发行一个内容更广泛的脚本样式指导参考。
脚本中的说明 说明应该能够帮助所有的脚本察看代码作者立即开始理解它。另外,注释应该解释代码的意图或总结代码做什么,而不是简单地重复代码所说的。
在每页的顶部附近编写一致的注释块列出文件名,开发这个文件的工作组(不是个人;电子邮件应该到一个工作组别名),文件被开发的日期,所遵循的HTML和脚本标准,过去所有改变的说明。
利用注释来解释晦涩或者复杂的代码,也就是说,将会花费一个脚本作者超过几秒钟的时间来理解的任何代码。对于下面这样的句子一定要加入注释:
If Err = LOCK Then
外部注释的脚本应该被删除,除非他们是占位符,在这种情况下他们应该被加上这样的标签。
在每个注释中插入相应的代码。行内注释应该在相应代码后面显示两个空格。在新的一行上开始的注释应该被一个空白行分开。
例子:
<%
Dim intVariable 'Explicitly declare variable.
'Assign the variable an integer value.
intVariable = 5
%>
如果一个注释跨越了多个行,每个行必须以标准的VBScript注释符号(')开始。比较大的,多语句的注释块的格式如下:
例子
Sub ShowIt()
'======================================
'This procedure is called when the
'user selects a language.
'
'It displays an appropriate select
'item based on their language choice.
'
'The method choices are each contained
'in a separate div.
'======================================
Dim vntCurrLang
vntCurrLang = document.all.langselect.value
Select Case vntCurrLang
Case "C"
document.all.cdiv.style.display = ""
Case "VB"
document.all.vbdiv.style.display = ""
Case "J"
document.all.javadiv.style.display = ""
End Select
End Sub
Jscript中多行注释以/*开始,以*/结束。比较大的,多语句的注释块的格式见下面的例子。
例子:
function showIt()
/*******************************************
** This is a large comment block.
**
** This procedure is called when the user
** selects a language.
**
** It displays an appropriate select item
** based on their language choice.
**
** The method choices are each contained
** in a separate div.
*******************************************/
{
var vntCurrLang = document.all
...
}
常数名称 当命名常数以便把他们与其他元素区分开时全部使用大写。必要时,可以在术语间使用一个下画线。
例子:
Const MIN_QUAL = 25
环境转换 为了可读性,尽量减少HTML和脚本间的转换。如果可能,在页面上使用几个大的脚本块代替数目更多的分散的代码段。
缩排 缩排使代码的逻辑结构更清晰。
将一个由多行代码脚本放置在脚本分割符下面的一行上,进行模块化并把它缩进两个空格。在同一行上放置一个单行的脚本作为分隔符。
缩进ASP分隔符(<% U %>)至少两个空格。此外,为如下内容加入两个空格:
逻辑中的中断。
嵌套语句或HTML语句。
函数体。
来自控制代码的循环体。
如下例子说明利用VBScript或Jscript编写的脚本的缩进规则。
单行脚本
<% Dim strLastName %>
带有嵌套脚本:
<%
'This example demonstrates a script with
'a nested block of logic.
Dim vntOutput
Set vntExample = Server.CreateObject("MyComponents.Component.1")
vntOutput = varExample.Text
If vntOutput = "" Then
Response.Write "An error has occurred"
Else
Response.Write vntOutput
End If
%>
利用VBScript编写一个脚本函数:
<%
Function CalcMortgageRate()
Statement_1
End Function
%>
利用Jscript编写一个脚本函数:
<%
//This is an example of a function.
function calcMortgageRate()
{
statement1
statement2
}
%>
结论
如果你建立并维护好的目录结构和权限,及有效的页面脚本标准,你将会发现你的ASP应用程序更易管理,更安全,并且容易被系统管理员和开发小组阅读和理解。
……