第二章 asp提高篇.docx

上传人:b****5 文档编号:6688270 上传时间:2023-01-09 格式:DOCX 页数:40 大小:53.57KB
下载 相关 举报
第二章 asp提高篇.docx_第1页
第1页 / 共40页
第二章 asp提高篇.docx_第2页
第2页 / 共40页
第二章 asp提高篇.docx_第3页
第3页 / 共40页
第二章 asp提高篇.docx_第4页
第4页 / 共40页
第二章 asp提高篇.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

第二章 asp提高篇.docx

《第二章 asp提高篇.docx》由会员分享,可在线阅读,更多相关《第二章 asp提高篇.docx(40页珍藏版)》请在冰豆网上搜索。

第二章 asp提高篇.docx

第二章asp提高篇

2.1全面解析Server对象

Server对象提供对服务器上访问的方法和属性.大多数方法和属性是作为实用程序的功能提供的。

  语法:

   Server.property|method

  属性(property)

   Server对象只有一个属性:

ScriptTimeout程序能够运行的最大时间

  方法(Methods)

   CreateObject建立一个对象实例.

   Execute执行一个asp文件

   GetLastError返回一个错误代码

   HTMLEncode对指定的HTML代码进行转换.

   MapPath将一个相对路径转化为一个绝对路径.

   Transfer将当前的所有状态信息发送给另一个asp文件

   URLEncode以URL形式转化指定的代码,包括空格

  Server对象的方法详细说明

   CreateObject

   语法

   Server.CreateObject(progID)

   参数

    progID

    指定要创建的组件名称,格式如下:

[Vendor.]Component[.Version].

   要点:

    一般来说,用由Server.CreateObject方法创建的对象拥有页面的范围.这就说,当这页的asp程序执行完后,这种对象会自动地消失.

  为了创建一个拥有Session或Application范围的对象,你可以在Global.asa文件中使用

  Execute

  Execute方法呼叫一个ASP文件并且执行它就像这个呼叫的ASP文件存在这个ASP文件中一样。

这很像许多语言中的类的调用。

  语法

  Server.Execute(Path)

  参数

   Path

  指定执行的那个asp文件的路径。

如是它是一个绝对路径,那么它必须是一个在这个ASP应用程序相同的地方(目录)。

  讲解

  Server.Execute方法提供了一种将一个复杂ASP应用程序分化为小块单位来执行的方法。

通过这种方法,你能够建一个ASP图书馆,你能够随便在你需要时调用你图书馆中的ASP文件。

这个就有点像SSI了!

嘿嘿!

  当IIS根据指定的ASP文件路径执行完这个ASP文件之后,就会自动返回以前的ASP文件。

这个刚刚执行完的ASP文件有可能改变了HTTPhead.但是和其它的ASP文件一样,当程序试图改变httphead时,就会报错!

  这个path参数可以包括一个询问信息。

  如果在被呼叫和呼叫的ASP文件中都含有相同的子函数,那么这些子函数只在本ASP文件中起作用。

举个例子,如果在下面的ASP1和ASP2两个文件中都含有放弃程序的子函数。

首先ASP1呼叫ASP2,那么ASP2中的的OnTransactionAbort开始执行,当ASP2执行完毕,ASP1中的OnTransactionAbort才开始执行。

  ASP1:

<%@Transaction=Required%>

<%

 Server.Execute("Page22.asp")

 SubOnTransactionAbort

 SubOnTransactionCommit

%>

  Asp2.asp:

<%@

 Transaction=Required

 SubOnTransactionAbort

 SubOnTransactionCommit

%>

  Example

  ASP1

<%Response.Write("IamgoingtoexecuteASP2")

Server.Execute("/myasps/asp2.asp")

%>

ASP2

<%Response.Write("HereIam")%>

  GetLastError

  GetLastError方法返回一个ASPErrorObject来描述一个错误信息.这个方法只适用于在asp文件发送任何内容给用户机之前.

  语法

  Server.GetLastError()

  要点

  如果一个500;100用户错误已经被定义在一个asp应用程序中,它是指的一个以.asp为后缀的文件。

这种情况下,在这个程序运行时当一个错误发生时,服务器就会自动的以Server.Transfer这种方式传送到这个正在执行的ASP页面。

ASP应用程序就会将有效的处理这个错误。

另外,这个ASPErrorObject一定要有效,这样你就能够看到服务器提供给你的错误信息来改这个文件了!

  一般的WebSite都是根据文件\iishelp\common\500-100.asp来构造的。

你能够用它来执行一个asp错误,当然你能够自己定义了!

如果你想改变为另外一个asp文件的来执行这些用户错误。

那么你可以用IIS中的snap-in.

  注意:

当IIS发现了一个asp文件或者global.asa文件中的一个错误,那么一个500;100用户错误产生。

以下的程序将不能执行!

  Example

  下面的三个例子证明不同的错误会产生的用户错误。

三个错误是:

  编译错误

  运行错误

  逻辑错误

  第一个例子证明了一个编译错误,就是当IIS试图包含一个文件时产生的。

这个错误会产生是因为在这个包含文件中没有定义所需的参数。

第二个例子显示的是一个运行错误,这个程序中断的原因是程序中没有“next".第三个例子显示的是一个逻辑错误,因为这个程序试图除以一个0.不行啦!

  

Example1

<%

 response.write"hello"

%>

Example2

<%

  dimI

  fori=1to1

  nxt

%>

Example3

<%

  dimi,j

  dimsum

  sum=0

  j=0

  fori=1to10

   sum=sum+1

  next

  sum=sum/j

%>

  HTMLEncode

  HTMLEncode方法对指定的字符串进行HTML编码.

  语法

   Server.HTMLEncode(string)

  参数

   string要进行编码的字符

  例子

  下面的程序:

  <%=Server.HTMLEncode("Theparagraphtag:

")%>

  输出为:

  Theparagraphtag:

  注意程序执行后在浏览器中看到的是:

  Theparagraphtag:

  但是如果你用"查看源文件"看一下的话,源代码就不是了.

MapPath

  MapPath方法将相对路径转化为服务器上的物理路径

  语法

  Server.MapPath(Path)

  参数

  Path

  相对路径。

这个路径是以"/"或"\"开头的路径,如果这个路径中没有"\",那么MapPath方法就会返回以当前目录为基础的路径。

  讲解

  MapPath方法不能检查路径在这个服务器下是否存在。

因为MapPath转化路径时是不管这个路径是否在这个服务器下存在的。

  你能够用它来将一个相对路径转化为一个物理路径,然后再在这个路径下进行各种操作。

  Example

  在下面的例子中,data.txt文件存在C:

\Inetpub\Wwwroot\Script目录中,而且一个test.asp文件包括下面的代码。

C:

\Inetpub\Wwwroot是该服务器的主目录。

  下面的例子中,首先用环境变量"PATH_INFO"获得当前文件的物理路径。

  下面是Script代码:

  <%=server.mappath(Request.ServerVariables("PATH_INFO"))%>

  显示为:

  c:

\inetpub\wwwroot\script\test.asp

  因为下面的例子中路径参数没有以"/"开头,所以它是以当前目录转化的,asp文件是放在C:

\Inetpub\Wwwroot\Script中的.以下是scripts的内容:

  <%=server.mappath("data.txt")%>

  <%=server.mappath("script/data.txt")%>

  显示为:

  c:

\inetpub\wwwroot\script\data.txt

  c:

\inetpub\wwwroot\script\script\data.txt

  以下的两个例子是以"/"开头的.以下是scripts的内容:

  <%=server.mappath("\script")%>

  显示为:

  c:

\inetpub\wwwroot\script\data.txt

  c:

\inetpub\wwwroot\script

  直接用"/"或"\"就会得到服务器的主目录:

  <%=server.mappath("\")%>

  显示为:

  c:

\inetpub\wwwroot

  c:

\inetpub\wwwroot

  Transfer

  transfer方法会把一个正在执行的asp文件的所有信息传给另外一人asp文件。

  语法

  Server.Transfer(path)

  参数

  Path

  将要接收信息的asp文件的位置。

  要点

  当你调用Server.Transfer时,所有内建对象的状态信息都会包含在这次传送之中。

这就是说,所有在保存在Session或Application中的信息都会被传送,而且,所有当前请求的信息都会被接收信息的asp文件所接受。

  Example

 下面的例子示范了从一个asp文件传送到另一个asp文件例子!

  ASP1

<%Dimsessvar1Response.WriteSession.SessionID

 Response.Write("")

 Response.Write("IamgoingtoASP2")

 Server.Transfer("/Myasps/ASP2.asp")

%>

  ASP2

<%Response.WriteSession.SessionID%>

  URLEncode

  URLEncode方法可以将指定字符串进行URL编码。

  语法

  Server.URLEncode(string)

  参数

  string指定要转化的字符串

  Example

  下面是代码:

  <%Respones.Write(Server.URLEncode(""))%>

  显示为:

  http%3A%2F%2Fwww%2Emicrosoft%2Ecom

  属性:

ScriptTimeout

  ScriptTimeout属性规定了程序的最大运行时间。

  语法

  Server.ScriptTimeout=NumSeconds

  参数

  NumSeconds

  规定了程序的最大的运行时间(以秒计算)。

缺省值是90秒

  Remarks

  一个缺省的ScritptTimeout的值会能过ASPScriptTimeOUT属性来设置在Websertvic或Webserver上。

在程序中,ScriptTimeout属性的值不能小于这个缺省值。

举个例子吧,如果NumSeconds我们设置为10秒,而缺省值为90秒,那么程序就会中止在90秒以后,而不是10秒以后的。

同样,如果我们设置ScriptTimeout的值为100秒,那么,程序就会在100秒之后中止,而不是90秒。

  Example

  下面的例了中程序将被设置为100秒后自动中止。

  <%Server.ScriptTimeout=100%>

  下面的例子中将重新得到ScriptTimeout的值,然后把它存在Timout变量中

  <%TimeOut=Server.ScriptTimeout%>

 

2.2利用JSP的思想来做ASP

程序的功能有了个大体的框架,其实可以自己添加一些功能,比如开始的数据库连接,可以先设置

变量然后通过INIT()来选择不同类型的数据库

<%

’OnErrorResumeNext

ClassConnEx

publicConnEx

publicDBpath’---------数据库路径

publicDBtype’---------数据库类型1(Access)2(SqlServer)3(可扩充)

publicConnMethod’--------连接方式(DSN,非DSN)

publicUser

publicPass

SubClass_initialize

EndSub

SubInit()

ConnStr="Driver={MicrosoftAccessDriver(*.mdb)};dbq="&Server.MapPath("Date.mdb")

SetConnEx=Server.Createobject("ADODB.CONNECTION")

ConnEx.OpenConnStr

CatchError("Class_Terminate")

EndSub

SubCatchError(Str)

IfErrThen

Err.Clear

Class_Terminate()

Response.Write("捕捉到错误,程序结束!

在"&Str&"处")

Response.End()

EndIf

EndSub

’******************************************

’*通过SQL语句来查找记录是否存在,容易出错

’******************************************

FunctionHasRecordBySql(Sql)

CallCheckSql(Sql,"R")

DimRs,HasR

SetRs=ConnEx.Execute(Sql)

CatchError("HasReordSql")

IfNot(Rs.eofOrRs.bof)Then

HasR=False

Else

HasR=True

EndIf

Rs.Close

SetRs=Nothing

HasRecordBySql=HasR

EndFunction

’***************************************

’*通过ID来查找记录是否存在

’***************************************

FunctionHasRecordById(StrTableName,IntID)

’CheckValue(IntID,1)

DimRs,HasR

Sql="Selecttop1*from"&StrTableName&"WhereId="&IntID

CallCheckSql(Sql,"R")

SetRs=ConnEx.Execute(Sql)

CatchError("HasRecordByID")

IfNot(Rs.eofOrRs.bof)Then

HasR=False

Else

HasR=True

EndIf

Rs.close

SetRs=Nothing

HasRecordById=HasR

EndFunction

’**********************************************

’*通过SQL语句取得记录集

’**********************************************

FunctionGetRsBySql(Sql)

CallCheckSql(Sql,"R")

DimRs

SetRs=Server.CreateObject("Adodb.RecordSet")

Rs.OpenSql,ConnEx,1,1

SetGetRsBySql=Rs

EndFunction

’*********************************************

’*取得某个字段的值

’*********************************************

FunctionGetValueBySql(Sql)

CallCheckSql(Sql,"R")

DimRs,ReturnValue

SetRs=ConnEx.Execute(Sql)

CatchError("GetValueBySql")

IfNot(Rs.EofOrRs.Bof)Then

ReturnValue=Rs(0)

Else

ReturnValue="没有记录"

EndIf

Rs.Close

SetRs=Nothing

GetValueBySql=ReturnValue

EndFunction

’==================================================Update,Insert===================================

’*********************************************

’*利用SQL修改数据

’*********************************************

FunctionUpdateBySql(Sql)

CallCheckSql(Sql,"w")

ConnEx.Execute(Sql)

CatchError("UpdateBySql")

UpdateBySql=True

EndFunction

’********************************************

’*利用SQL语句插入数据

’********************************************

FunctionInsertBySql(Sql)

CallCheckSql(Sql,"w")

ConnEx.Execute(Sql)

CatchError("InsertBySql")

InsertBySql=True

EndFunction

’======================================================Delete========================================

’********************************************

’*通过SQL语句删除

’********************************************

FunctionDeleteBySql(Sql)

CallCheckSql(Sql,"D")

ConnEx.Execute(Sql)

CatchError("DeleteBySql")

DeleteBySql=True

EndFunction

’********************************************

’*检查SQL语句权限,根据标志Flag来检测语句拥有的权限

’********************************************

SubCheckSql(Sql,Flag)

DimStrSql,SinCounts,DouCounts,i

StrSql=Lcase(Sql)

SinCounts=0

DouCounts=0

Fori=1toLen(StrSql)

IfMid(StrSql,i,1)="’"ThenSinCounts=SinCounts+1

IfMid(StrSql,i,1)=""""ThenDouConnts=DouCounts+1

Next

If(SinCountsMod2)<>0Or(DouCountsMod2)<>0OrInstr(StrSql,";")>0Then

CallClass_Terminate()

Response.Write("SQL语法错误!

")

Response.End()

EndIf

SelectCaseFlag

Case"R","r":

IfInstr(StrSql,"delete")>0OrInstr(StrSql,"update")OrInstr(StrSql,"drop")>0OrInstr(StrSql,"insert")>0Then

Class_Terminate()

Response.Write("权限不足,没有执行写操作的权限")

Response.End()

EndIf

Case"W","w":

IfInstr(StrSql,"delete")>0OrInstr(StrSql,"drop")>0OrInstr(StrSql,"select")>0Then

Class_Terminate()

Response.Write("权限不足,没有执行删除操作的权限")

Response.End()

EndIf

Case"D","d":

CaseElse:

Response.Write("函数CheckSql标志错误!

")

EndSelect

EndSub

SubClass_Terminate

IfNotIsEmpty(FriendConn)Then

FriendConn.Close

SetFriendConn=Nothing

CatchError()

EndIf

EndSub

EndClass

%>

2.3深入研究Application和Session对象

用ASP编写虚拟社区、网上购物等程序时,Application和Session对象具有举足轻重的作用,能够灵活合理地运用这两个对象是提高程序质量的关键。

下面让笔者根据自己在这方面的经验,向大家深入介绍一下ASP的这两个内建对

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1