asp脚本的应用教案(网站ASP如何应用)

本文目录
- 网站ASP如何应用
- ASP基础入门:脚本基础
- ASP脚本变量、函数、过程和条件语句
- 用ASP脚本编写程序
- ASP基础入门:简介
- 如何使用 ASP 编写开方脚本!
- ASP.NET Web Page应用深入探讨
- ASP入门:认识ASP程序所使用的几种脚本语言
- ASP脚本循环语句
- asp语言的学习大纲谁能给我说详细点!
网站ASP如何应用
asp是一种服务端脚本技术。
类似的还有jsp,php等。
这些服务端脚本技术主要是为了实现一些必须通过程序处理才能完成的功能。比如,你找了一个新闻管理系统或内容管理系统发了些新闻,你想在你做好的页面种把这些内容调出来,这就需要服务端脚本技术,比如你说的ASP。
你如果想使用服务端脚本技术,首先你需要找一个相应脚本的速成教程学习一下,然后才能考虑你的网站如何使用这些服务端脚本技术去完成。
如果你用到了数据库,还要学习些sql语言。
如果你的页面中还有广告或特殊效果,可能还要学习一些js脚本。
ASP基础入门:脚本基础
通过前两篇的学习,相信各位已经对 ASP 的动态网站设计有了一个基本的概念和整体的印象。从本篇开始作者将从脚本语言的使用着手,由浅入深地带领大家探索 ASP 动态网站设计的真正奥秘。
本文第二篇刊登后,很多朋友给我发了“妹儿”,希望能尽快看到本文的第三、第四、乃至第篇,甚至有位朋友焦急地要我将 ASP 篇的全文发给他。看到有如此之多志同道合的朋友,令我精神大振。虽然 ASP 早在两年前就已经推出了,但直到今年它才以其灵活便捷的开发过程、良好的 WEB 数据库连接功能受到了国人的重视,然而由于目前国内尚缺乏关于 ASP 开发 WEB 应用程序的详尽教材,因此使得国内广大 WEB 开发者们仍处在闭门啃 E 文的阶段,也包括作者本人。也正因为如此,作者才蒙发了写文章的念头,在得到 Chinabyte 网络学院翁斌先生的大力支持后,各位才得以见到此文。
作者殷切希望能通过此文为广大 WEB 开发者和爱好者提供便利,使大家共同来参加 ASP 的学习和交流,为了顾全不同层次读者的需求作者还是决定从最基本的脚本语言的编制着手,随后再一步一步地讲解 ASP 内建对象、ActiveX 组件以及用 ASP 开发 WEB 应用程序的实例,相信通过一段时间持续的学习,不出几个月各位都能够得心应手地开发自己的动态网站。下面就先请大家跟我来学习一些 ASP 中应用脚本语言(以 VBScript 为主)的基础知识。
在开始学习脚本语言之前,你应该理解一些简单的概念 -- 变量、进程。所谓变量是计算机内存中已命名的存储位置,其中包含了数字或字符串等数据,它使用户便于理解脚本操作的名称,为用户提供了一种存储、检索和操作数据的途径。程序是由一个或多个进程组成的,在 VBScript 中,进程就是“指令块”,通常意义上的进程,如 Sub,只是为了简单的数据处理。
在 VBScript 中,严格的来讲变量是不用声明的,
如: % Mystring="This is my string" %
然而,即使在使用变量前不需要去声明变量,也应养成在编程时声明变量的良好习惯,因为这样有助于防止错误发生。声明一个变量意味着告诉脚本引擎,有一个特定名称的变量,这样就可以在脚本中引用该变量。在 VBScript 中声明一个变量可以使用“Dim”语句,如下:
script language="VBScript"
!--
Option Explicit ’ 要求在脚本中声明所有的变量
Dim Mystring
Mystring="This is my string"
--
/script
变量的作用域即生命期,决定哪些脚本命令可访问变量。在过程内部声明的变量具有局部作用域。每执行一次过程,变量就被创建然后消亡。而过程外部的任何命令都不能访问它。在过程外部声明的变量具有全局作用域,其值能被 ASP 页上的任何脚本命令访问和修改。声明变量时,局部变量和全局变量可以有相同的名称。而改变其中一个的值并不会改变另一个的值。如果没有声明变量,则可能不小心会改变一个全局变量的值。例如,以下脚本命令返回值 1,虽然有两个名为 Y 变量:
%
Dim YY = 1Call SetLocalVariableResponse.Write Y
Sub SetLocalVariable
Dim Y
Y = 2End Sub %
由于变量没有显式声明,以下的脚本命令将返回 2。当过程调用将 Y 设置为 2 时,脚本引擎认为该过程是要修改全局变量:
%
Y = 1Call SetLocalVariableResponse.Write Y
Sub SetLocalVariable
Y = 2
End Sub%
然而,全局变量仅在单个 ASP 页中可用,要使它在单个 ASP 页之外可用,就必须为变量赋予会话或应用程序作用域。会话作用域变量对一个用户所请求的 ASP 应用程序中的所有页都是可用的。应用程序作用域变量也如此。对单个用户来说,会话变量是存储信息的最佳途径,例如,用户首选项、用户名或用户的标识。对于一个特殊应用程序的所有用户,应用程序作用域是存储信息的最佳途径,例如,应用程序特定的问候语或应用程序所需的初始值。ASP 提供两个内建对象来让您存储变量:Session 对象和 Application 对象,这将在今后的 ASP 内建对象中着重讨论。
让我们再来看看常量的定义,常量是用来代替一个数或字符串的名称,它在整个脚本中保持不变。您可以使用 Const 语句在 VBScript 中创建用户自定义常数。使用 Const 语句可以创建名称具有一定含义的字符串型或数值型常数,并给它们赋原义值。例如:。
如: % Const mystring=" 这是一个常量 " %
% Const myage=100 %
请注意字符串文字包含在两个引号
(" ") 之间。这是区分字符串型常数和数值型常数的最明显的方法。日期文字和时间文字包含在两个井号 (#) 之间。例如:
% Const CutoffDate = #6-1-97# %
在理解了常量和变量之后,我们来看看什么是过程。它是一组能执行指定任务且具有返回值的脚本命令。您可以定义自己的过程,然后在脚本中反复调用它们。您可以将过程定义放在调用过程的 .asp 文件中,也可以将通用过程放在一个共享的 .asp 文件中,然后用 SSI #include 指令将其包含进其他调用其过程的 .asp 文件中。您还可选择另一种方法,即把这些功能打包在 ActiveX 组件中。过程定义可出现在
SCRIPT
和
/SCRIPT
标记内部且必须遵循声明脚本语言的规则。如果过程所用的语言与主脚本语言不同,则要使用
SCRIPT
元素。主脚本语言中的过程用脚本分界符 ( % 和 % ) 分隔。用 HTML SCRIPT
标记时,必须使用两个属性来保证服务器端能够处理脚本。使用
SCRIPT
标记的语法如下:
SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT
procedure definition
/SCRIPT
这里的 RUNAT=SERVER 属性通知 Web 服务器在服务器上处理脚本。若不设置该属性,脚本将由客户端浏览器处理。LANGUAGE 属性决定此脚本块所用的脚本语言。您可以指定任何一种具有脚本引擎的语言。请使用 VBSCRIPT 指定 VBScript;用 JSCRIPT 指定 JScript。若不设置 LANGUAGE 属性,将用主脚本语言解释此脚本块。
在 VBScript 中,过程被分为两类:Sub 过程和 Function 过程。Sub 过程是包含在 Sub 和 End Sub 语句之间的一组 VBScript 语句,执行操作但不返回值。Sub 过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果 Sub 过程无任何参数,则 Sub 语句必须包含空括号 ()。
Function 过程是包含在 Function 和 End Function 语句之间的一组 VBScript 语句。Function 过程与 Sub 过程类似,但是 Function 过程可以返回值。Function 过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果 Function 过程无任何参数,则 Function 语句必须包含空括号 ()。Function 过程通过函数名返回一个值,这个值是在过程的语句中赋给函数名的。Function 返回值的数据类型总是 Variant。在下面的示例中 Sub 过程使用两个固有的(或内置的)VBScript 函数,即 MsgBox 和 InputBox,来提示用户输入信息。然后显示根据这些信息计算的结果。计算由使用 VBScript 创建的 Function 过程完成,Celsius 函数将华氏度换算为摄氏度。Sub 过程 ConvertTemp 调用此函数时,包含参数值的变量被传递给函数。换算结果返回到调用过程并显示在消息框中。
Sub ConvertTemp()
temp = InputBox(" 请输入华氏温度。", 1)
MsgBox " 温度为 "
Celsius(temp)
" 摄氏度。"
End Sub
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
给过程传递数据的途径是使用参数。参数被作为要传递给过程的数据的占位符。参数名可以是任何有效的变量名。使用 Sub 语句或 Function 语句创建过程时,过程名之后必须紧跟括号。括号中包含所有参数,参数间用逗号分隔。例如,在下面的示例中,fDegrees 是传递给 Celsius 函数的值的占位符:
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
要从过程获取数据,必须使用 Function 过程。请记住,Function 过程可以返回值;Sub 过程不返回值。
以上给大家简要介绍了 VBScript,由于篇幅的原因,作者不可能在此详尽介绍 VBScript 的所有知识。但是由于 ASP 本身并不是一种编程语言,因此在大家编写 ASP 应用程序的过程中,必须借助脚本语言来实现许深空殊的功能,所以灵活熟练地掌握脚本语言对一个使用 ASP 编写 WEB 应用程序的程序员来说是至关重要的。无论您是一个有丰富编程经验的高手还是一个初学者,只要您现在希望通过 ASP 编写 WEB 应用程序,作者极力建议您掌握至少一门脚本语言(如 VBScript)。在本篇的末尾作者将留一道课后作业给大家,希望各位能通过自学有关书籍并在实践中迅速掌握脚本语言。
课后作业:
作者正在用 ASP 制作一套基于 WEB 的BBS 系统,作者希望能在其中添加一项特殊功能,即当任何用户登陆该 BBS 后都能够查阅近七天来所有新发布的信息。由于 ASP 本身的内建对象和组件并没有提供此项功能,因此作者请大家从 VBScript着手,来设计这样一个功能。如有任何疑问请EMAIL 作者,答案将在下一篇公布。敬请关注。
ASP脚本变量、函数、过程和条件语句
在上一期中作者向诸位简要介绍了 ASP 脚本语言之一 VBScript 的一些基本常识,本期将继续给大家讲解 VBScript 的脚本编写方法,并通过展示 VBScript 在ASP 程序编写过程中的一系列实例使大家对 VBScript 有更进一层的理解。
大家在学习了脚本语言 VBScript 的变量、常量和过程的基本概念后,本期将继续向各位介绍 VBScript 的函数和语法。
函数和过程一样都是命名了的代码块,但它们却有很大的区别,过程完成程序任务,函数则返回值。我们可以这样理解,过程象一个完整的句子,而函数则象一个单词。举个例子,当你想获取某个数的平方根,你只要将该数传给 VBScript 的Sqr() 函数,此函数会立即返回该数的平方根。如:
A=sqr(9)
则 A=3。熟练掌握脚本语言的函数将给你编写 ASP 程序带来极大的方便,就以上一期结尾处作者布置给大家的课后练习来说,如果你对脚本语言的函数掌握不够全面,那么解决如此之小的一个问题将很有可能花费你相当大的精力。现在让我们来回顾一下这道课后练习。
“作者正在用 ASP 制作一套基于 WEB 的 BBS 系统,希望能在其中添加一项特殊功能,即当任何用户登陆该 BBS 后都能够查阅近七天来所有新发布的信息。”
如果你不熟悉 VBScrip,就不会知道 VBScrip 本身提供了一个用来取得日期之间的差或和的函数 DateSerial,它的语法如下:
DateSerial(year, month, day)
如果你要指定一个日期,例如:1998 年11 月10 日,那么 DateSerial 函数中每个参数的取值范围都应该是可接受的,即日的取值应在 1和31 之间,月的取值应在 1和12 之间。但是,也可以使用表示某日之前或之后的年、月、日数目的数值表达式为每个参数指定相对日期。以下样例中使用了数值表达式代替绝对日期。在这里,DateSerial 函数返回 1998 年11 月10 日之前二十年 (1990-20) 零两个月 (11-2) 又一天 (10-1) 的日期:即 1978 年9月9日。程序如下:
Datep=DateSerial(1998-20, 11-2,10-1)
对于 year 参数,若取值范围是从 0到99,则被解释为 1900 到1999 年。对于此范围之外的 year 参数,则使用四位数字表示年份(例如 1800 年)。当任何一个参数的取值出可接受的范围时,则会适当地进位到下一个较大的时间单位。例如,如果指定了 35 天,则这个天数将被解释成一个月加上多出来的日数,多出来的日数取决于其年份和月份。但是如果参数值超出 -32,768 到32,767 的范围,或者由三个参数指定(无论是直接还是通过表达式指定)的日期超出了可以接受的日期范围,就会发生错误。
当我们了解并掌握了函数 DateSerial 的使用方法后,再来看看作者布置的这道题目,一切就迎刃而解了。下面我将程序中的此部分代码公布如下:
itemp=DateSerial(Year(date), month(date), day(date)-7)
itemp=DateValue(itemp)
sql="Select * from message Where message.creatime Between #"date"# And #"itemp"# "
在这里我们又接触到了一组函数 Year,month,day,它们是用来得到一个日期的年、月、日。date 是常数,表示今天日期,而函数 DateValue 则是将字符串变量转化为日期格式的变量。在本段程序的第三行,我们第一次接触到了标准的 SQL 查询语句,这句语句是什么意思呢?
“Select”是标准的 SQL 数据库查询命令,通过 SELECT 语句我们可以在数据库中检索数据,并将查询结果提供给用户,此处的“*”表示查询该名为“message”的数据库中的所有记录,而“where”的作用是设定一个查询条件,是为了将数据库中符合条件的记录取出来,“message.creatime”是一个储存了数据库中记录创建日期的变量。将整句语句连起来理解就是:查询名为 message 的数据库中的所有记录,并将其中创建日期在今天和今天以前七日以内的所有记录存储在变量 sql 中。可能由于大家第一次接触 SQL 语句,一时间无法完全理解它的作用,不过不用担心在今后的章节中作者将专门用一期给大家介绍 SQL 的使用方法。
通过上面的学习,大家应该已经能够理解函数在程序中的作用,当然我们不必去死背函数,但要做到熟练运用只有一条捷径 -- 多实践。接下来让我们来看看 VBScript 的基本语法。
了解编程语言的朋友一定知道在程序中控制程序流程的语句主要可以分为条件语句和循环语句,在 VBScript 中可使用以下条件语句:
If...Then...Else 语句
Select Case 语句
If...Then...Else 语句用于计算条件是否为 True 或 False,并且根据计算结果指定要运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式,If...Then...Else 语句可以按照需要进行嵌套。
让我们来创建两个范例文件:if1.asp 和 if2.asp
将以下语句剪贴到记事簿中,并保存为 if1.asp( 注意:请将程序中“”后的空格去掉 )
html
head
TITLEif1.asp /TITLE
/head body bgcolor="#FFFFFF"
form action="if2.asp" method=get
Your First Name INPUT NAME="FirstName" MaxLength=20 p
Your Last Name INPUT NAME="LastName" MaxLength=20 p
INPUT TYPE=submit INPUT TYPE=reset
/form
/body
/html
将以下语句剪贴到记事簿中,并保存为 if2.asp
html
head
TITLEifrespond.asp /TITLE
/head
% fname=request.querystring("Firstname")
lname=request.querystring("Lastname")
If fname="George" and lname="Washington" then %
Hi.You must be the first president!
% else %
Hi!Nice to Meet You
%end if %
/body
/html
asp1.asp 产生一个文本输入框,要求用户输入姓、名,
asp2.asp 则是用 IF 语句判断用户输入的姓名是否为“George Washington”,并做出相应的反馈。在此我们遇到了一个 ASP 的内建对象 request,通过使用 request 对象可以访问任何用 HTTP 请求传递的信息,包括从 HTML 表格中用 POST 方法或 GET 方法传递的参数、cookie 和用户认证。而 QueryString 集合检索 HTTP 查询字符串中变量的值,HTTP 查询字符串由问号 (?) 后的值指定。如:
生成值为 "Firstname=GeorgeLastname=Washington" 的变量名字符串。关于 ASP 对象作者将在今后的几篇里重点讲述。
If...Then...Else 语句的一种变形允许您从多个条件中选择,即添加 ElseIf 子句以扩充 If...Then...Else 语句的功能,使您可以控制基于多种可能的程序流程。
我们将 asp2.asp 的程序部分扩充如下:
%
fname=lcase(request.querystring("Firstname"))
lname=lcase(request.querystring("Lastname"))
If fname="george" and lname="washington" then %
Hi.You must be the first president! p
% elseIf fname="ronald" and lname="reagan" then %
Hi.You must be the actor president! p
% elseIf fname="jimmy" and lname="carter" then %
Hi.You must be the peanut farmer president! p
% elseIf fname="naoko" or fname="charles" then %
Hi.Your name reminds me of someone,but I am not sure who! p
% else %
Hi!Nice to Meet You
% end if %
可以添加任意多个 ElseIf 子句以提供多种选择。但使用多个 ElseIf 子句经常会使程序变得很累赘。在多个条件中进行选择的更好方法是使用 Select Case 语句。
Select Case 结构提供了 If...Then...ElseIf 结构的一个变通形式,可以从多个语句块中选择执行其中的一个。Select Case 语句提供的功能与 If...Then...Else 语句类似,但是可以使代码更加简练易读。Select Case 结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个 Case 的值比较。如果匹配,则执行与该 Case 关联的语句块,我们同样可以用 Select Case 语句来写 asp2.asp 文件:
%
fname=lcase(request.querystring("Firstname"))
lname=lcase(request.querystring("Lastname"))
name=fname+lname
Select case name
case "georgewashington"
response.write "Hi.You must be the first president! p"
case "ronaldreagan"
response.write "Hi.You must be the actor president! p"
case "jimmycarter"
response.write "Hi.You must be the peanut farmer president! p"
case "naokocharles"
response.write "Hi.Your name reminds me of someone,but I am not sure who! p"
case else
response.write "Hi!Nice to Meet You"
End Select %
请注意 Select Case 结构只计算开始处的一个表达式,并且只计算一次,而 If...Then...ElseIf 结构计算每个 ElseIf 语句的表达式,这些表达式可以各不相同。因此仅当每个 ElseIf 语句计算的表达式都相同时,才可以使用 Select Case 结构代替 If...Then...ElseIf 结构。Select Case 语句也是可以是嵌套的,每一层嵌套的 Select Case 语句必须有与之匹配的 End Select 语句。
以上给大家介绍的脚本语言 VBScript 的函数和条件语句的使用方法,由于篇幅的缘故不能详细展开,希望各位有志学习 ASP 的朋友,能在课后进行一定程度的自学和练习。在日常开发 ASP 应用程序的过程中作者本人日渐体会到了脚本语言的重要性,灵活运用脚本语言将非但可以大大提高 ASP 应用程序的开发过程,给广大网站制作人员节省大量的时间,而且还能够增强 ASP 应用程序的执行效率和功能。欲善其事必先利其器,因此作者在此强烈建议诸君,熟练掌握脚本语言,这将对你的 ASP 程序开发大有帮助。由于本文不是 VBScript 教程,因此只能用较小的篇幅给大家简要介绍一些 VBScript 基本常识,在下一期介绍完 VBScript 的循环语句后,我们将正式开始学习 ASP 的内建对象,要深入 VBScript,建议大家找些教材进行自学。如果你在看完本文后有任何问题请及时 Mail 我,如果你有什么好的建议也请来信告知,谢谢。
用ASP脚本编写程序
’************************************************
’** 取得当前用户的IP地址
’************************************************
Private Function GetUserIP()
Dim strIP
’// 取得当前用户的返问IP
strIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If Len(strIP) = "" Or IsEmpty(strIP) Then
strIP = Request.ServerVariables("REMOTE_ADDR")
End If
’// 返回IP
GetUserIP = strIP
End Function
Response.write GetUserIP()
上面的是现实访问者IP,做判断的话,直接用like来匹配IP段,然后输出欢迎信息或者中断程序,中断程序的代码是response.End()
===================================================================
Cookies在ASP中的最常用的方法
1.如何写入Cookies?
Response.Cookies("字段名")=变量或字符串,例如:
Response.Cookies("name2")="Dingdang"
2.如何设置Cookies时间?
Response.Cookies("字段名").expires=时间函数+N,例如:
Response.Cookies("name2").expires=date+1,表示Cookies保存1天,再比如:
Response.Cookies("name2").expires=Hour+8,表示Cookies保存8小时。
Response.Cookies("name2").expires=dateadd("h",24,now())
3.在以往的ASP教程中,很少有介绍Cookies退出的方法。在“退出”这个ASP页中可以这样写:
Response.Cookies("字段名")=""
之后,在客户端的浏览器就清除了Cookies,并且Cookies文件会消失。注意有多少个字段,就要写多少句来清除。
4.如何读取Cookies?
变量名=Request.Cookies("字段名"),例如:
name2=Request.Cookies("name2")
如果网页中写入《%=name2%》这句,则会显示“Dingdang”。
也可以这样直接读取Cookies,《%=Request.Cookies("name2")%》
Cookies是属于Session对象的一种。但有不同,Cookies不会占服务器资源;而“Session”则会占用服务器资源。所以,尽量不要使用Session,而使用Cookies。
一、首先让我们了解一下Cookies的相关知识
Cookies中保存的信息片断以“名/值”对(name-value pairs)的形式储存,一个“名/值”对仅仅是一条命名的数据。一个网站只能取得它放在用户的电脑中的信息,它无法从其它的Cookies文件中取得信息,也无法得到用户的电脑上的其它任何东西。 Cookies中的内容大多数经过了加密处理,因此一般用户看来只是一些毫无意义的字母数字组合,只有相应网站的网页程序(客户端或服务器端程序)才知道它们真正的含义。
存储在用户电脑硬盘中的Cookies文件可以被Web浏览器读取,它的命名格式为:用户名@网站地址.txt。
二、Cookies集合具有以下几种属性:
1.Expires属性:此属性用来给Cookies设置一个期限,在期限内只要打开网页就可以调用被保存的Cookies,如果过了此期限Cookies就自动被删除。如果一个Cookies没有设定有效期,则其生命周期从打开浏览器开始,到关闭浏览器结束,每次运行后生命周期将结束,下次运行将重新开始。
2.Domain属性:这个属性定义了Cookies传送数据的唯一性,指定了数据传送的域,而不是其他域。
3.Path属性:定义了Cookies只发给指定的路径请求,如果Path属性没有被设置,则使用缺省路径。
4.Secure属性:指定Cookies是否使用加密方式(SSL)传送。
5.Haskeys属性:如果所请求的Cookies是一个具有多个键值的Cookies字典,则返回True,它是一个只读属性。
三、Cookies的基本操作
对于Cookies的操作归根结底就是两种:写入和读取
在asp中使用Response来写入,用Request来读取。例如:
1.写入Cookies
Response.Cookies("CookiesName")=value
2.读取cookies
Request.Cookies("CookiesName")
四、Cookies的扩展应用
1.读写Cookies的子关键值(CookieSubName),示例如下:
Response.Cookies("VisitorName")("FirstName")="Martin"
Response.Cookies("VisitorName")("LastName")="Brawn"
firstName=Request.Cookies("VisitorName")("FirstName")
lastName=Request.Cookies(VisitorName")("LastName")
2.定义Cookies的域属性(Domain):域属性表明cookie由哪个网站产生或者读取,默认情况下,cookie的域属性设置为产生它的网站,但也可以根据需要改变它。如:Response.Cookies("CookieName").Domain = "www.yourdomain.com"
3.定义Cookies的路径属性(Path):路径属性可以实现更多的安全要求,通过设置网站上精确的路径,就能限制cookie的使用范围。例如:
Response.Cookies("CookieName").Path = "/maindir/subdir/path"
4.设置Cookies的到期时间
若不指定到期时间,当浏览器关闭时,cookie自动被删除。若指定了到期时间,则正常情况下Cookies将保存到到期时间之后被删除(非电脑故障或用户手动删除的)。若设置的到期时间小于当前时间,则与未设置到期时间同样的处理。
例如: Response.Cookies("UserName").Expires=#October 01, 2005# 即:2005年10月1日过期
Response.Cookies("UserName")=Now()+1 即:明天此时过期(保存一天)
5.Cookies的Secure属性:Secure属性的值只有True或False两种。如果Cookies数据指定成Secure=True,那么该数据会以SSL(Secure Sockets Layer)的方式提交:Response.Cookies(“UserName”).Secure=True
五、判断用户的浏览器是否开启了Cookies
在用户请求的页面中编写写入Cookies的代码,然后在读取这个Cookies,不为空则说明开启了Cookies,反之则没有开启。没有开启Cookies的浏览器也不支持Session。
因为我不用Cookies,而是用session,所以上面的是从别的地方找来的,希望对你有帮助
ASP基础入门:简介
本章将以如何建立基于
IIS 的 ASP
动态网站为中心向大家一步一步地揭示动态商业网站设计的真正奥秘。为了使各位能够全面、细致地掌握
ASP
的开发技巧,本文今后将采取连载的形式,手把手地教你如何建立属于自己
ASP
动态网站。由于本文是作者根据自己的学习和实践经验并结合了一些外文资料而写成的,因此不免会有一些偏颇,希望各位见谅。如发现本文有何不当之处,请及时通知作者,谢谢。
Microsoft Active Server Pages 即我们所称的 ASP ,其实是一套微软开发的服务器端脚本环境, ASP 内含于 IIS 3.0 和 4.0 之中 , 通过 ASP 我们可以结合 HTML 网页、 ASP 指令和 ActiveX
元件建立动态、交互且高效的 WEB 服务器应用程序。有了 ASP
你就不必担心客户的浏览器是否能运行你所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通
HTML
中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。
以下罗列了 Active Server Pages 所独具的一些特点:
1. 使用 VBScript 、 Jscript 等简单易懂的脚本语言,结合 HTML
代码,即可快速地完成网站的应用程序。
2. 无须 compile 编译,容易编写,可在服务器端直接执行。
3. 使用普通的文本器,如 Windows
的记事本,即可进行设计。
4. 与浏览器无关 (Browser Independence), 用户端只要使用可执行 HTML
码的浏览器,即可浏览 Active Server Pages 所设计的网页内容。 Active
Server Pages 所使用的脚本语言 (VBScript 、 Jscript) 均在 WEB
服务器端执行,用户端的浏览器不需要能够执行这些脚本语言。
5.Active Server Pages 能与任何 ActiveX scripting 语言相容。除了可使用
VBScript 或 Jscript 语言来设计外,还通过 plug-in
的方式,使用由第三方所提供的其他脚本语言,譬如 REXX 、 Perl 、
Tcl 等。脚本引擎是处理脚本程序的 COM(Component Object Model) 物件。
6.Active Server Pages
的源程序,不会被传到客户浏览器,因而可以避免所写的源程序被他人剽窃,也提高了程序的安全性。
7. 可使用服务器端的脚本来产生客户端的脚本。
8. 物件导向( Object-oriented )。
9.ActiveX Server Components(ActiveX 服务器元件 )
具有无限可扩充性。可以使用 Visual Basic 、 Java 、 Visual C++ 、 COBOL
等编程语言来编写你所需要的 ActiveX Server Component 。 /p
p
ASP
的奇妙之处真是不胜枚举,下面就请各位系好安全带,我将带领大家进入
ASP 的梦幻世界。 /p
p
首先,让我们来看看运行 ASP 所需的环境: ul
liMicrosoft Internet Information Server version 3.0/4.0 on Windows NT Server /li
liMicrosoft Peer Web Services Version 3.0 on Windows NT Workstation /li
liMicrosoft Personal Web Server on Windows 95/98 /li
/ul
p
正如前文所述,与一般的程序不同, .asp 程序无须编译, ASP
程序的控制部份,是使用 VBScript 、 Jscript
等脚本语言来设计的,当执行 ASP
程序时,脚本程序将一整套命令发送给脚本解释器 ( 即脚本引擎 )
,由脚本解释器进行翻译并将其转换成服务器所能执行的命令。当然,同其他编程语言一样,
ASP
程序的编写也遵循一定的规则,如果你想使用你所喜爱的脚本语言编写
ASP
程序,那么你的服务器上必须要有能解释这种脚本语言的脚本解释器。当你安装
ASP 时,系统提供了两种脚本语言: Vbsrcipt 和 Jscript ,而 Vbscript
则被作为系统默认的脚本语言。你也可以根据自己的喜好改变系统默认的脚本语言,关于如何改变系统默认的脚本语言请看《
a href="asp1-1.htm"font color="#026BAA"在 ASP 中使用脚本语言/font/a》一文。
ASP 本身并不是一种脚本语言,它只是提供了一种使镶嵌在 HTML
页面中的脚本程序得以运行的环境。但是,要学好 ASP
又必须掌握它的语法和规则。现在就让我们开始一步一步地认识并学习
Active Server Pages 。
ASP 程序其实是以扩展名为 .asp 的纯文本形式存在于 WEB
服务器上的,你可以用任何文本器打开它, ASP
程序中可以包含纯文本、 HTML 标记以及脚本命令。你只需将 .asp
程序放在 WEB
服务器的虚拟目录下(该目录必须要有可执行权限),就可以通过
WWW 的方式访问 ASP 程序了。要学好 ASP
程序的设计,必须掌握脚本的编写,那么究竟什么是脚本呢?其实脚本是由一系列的脚本命令所组成的,如同一般的程序,脚本可以将一个值赋给一个变量,可以命令
WEB
服务器发送一个值到客户浏览器,还可以将一系列命令定义成一个过程。要编写脚本,你必须要熟悉至少一门脚本语言,如
VBScript 。脚本语言是一种介乎于 HTML 和诸如 JAVA 、 Visual Basic 、 C++
等编程语言之间的一种特殊的语言,尽管它更接近后者,但它却不具有编程语言复杂、严谨的语法和规则。如前所述
ASP 所提供的脚本运行环境可支持多种脚本语言,譬如: Jscript 、 REXX
、 PERL 等等,这无疑给 ASP 程序设计者提供了广泛的发挥余地。 ASP
的出现使得广大 WEB
设计者不必在为客户浏览器是否支持而担心,实际上就算你
在同一个 .asp
文件中使用不同的脚本语言,你都无须为此担忧,因为所有的一切都将在服务器端进行,客户浏览器得到的只是一个程序执行的结果,而你也只需在
.asp 中声明使用不同的脚本语言即可。下面是一个典型的在同一 .asp
文件中使用两种脚本语言的例子:
HTML
BODY
TABLE
% Call Callme %
/TABLE
% Call ViewDate %
/BODY
/HTML
SCRIPT LANGUAGE=VBScript RUNAT=Server
Sub Callme
Response.Write " TR TDCall /TD TDMe
/TD /TR"
End Sub
/SCRIPT /p
p SCRIPT LANGUAGE=Jscript RUNAT=Server
function ViewDate()
{
var x
x = new Date()
Response.Write(x.toString())
}
/SCRIPT /p
p 这是各位在本文中接触的第一个真正的 ASP 程序,千万不要被“
% % ”符号搞糊涂,这其实是标准的 ASP 定界符,而“
SCRIPT /SCRIPT ”之间的就是脚本语言。 ASP
不同于脚本语言,它有自己特定的语法,所有的 ASP
命令都必须包含在
% 和 % 之内,如:
% test="English"
% , ASP 通过包含在
% 和 %
中的表达式将执行结果输出到客户浏览器 , 如:
% =test %
就是将前面赋给变量 test 的值 English 发送到客户浏览器中,而当变量
test 的值为 Mathematics 时 , 以下程序:
This weekend we will test
% =test %. /p
p
在客户浏览器中则显示为:
This weekend we will test Mathematics. /p
p 学习 ASP
最好的方法莫过于亲自动手编写,为了在最短的时间内使各位掌握
ASP
的程序设计技巧,本文将采取实例分析法,通过一系列的实例让各位在实践中学习
ASP 。建立一个 ASP 页面,你所需的只是打开一个文本器,如:
Notepad ,然后跟我开始动手编写第一个 ASP
程序。下面我们将建立一个自动监测浏览时间并根据不同时段动态显示不同页面内容的
ASP 程序,请将以下代码剪贴到你的文本器中 ,并存为 test1.asp :/p
p
html
body
FONT COLOR="Green"
% If Time
#12:00:00# And Time = #00:00:00# Then %
早上好,今天天气不赖啊 !
% ElseIf Time
#19:00:00# And Time = #12:00:00# Then %
下午好 !
% Else %
哈喽 ! 今晚你有没有去 IRC 聊天 !
% End If %
/body
/html
/p
p
将 test1.asp 保存在 WEB 服务器的虚拟目录 ( 如: aspsamp/)
下,并在浏览器中用 HTTP 的方式进行浏览,如:
,你将会新奇地发现,你的页面真的活起来了。虽然,这只是一个非常简单的实例,而且这一功能完全可以通过
JavaScript 完成,但是不难发现使用 ASP 要比 JavaScript
简洁、迅速得多,而且运用此法,你完全可以轻而易举地令你的网页在不同的时段展示不同的风格。此例中的“
Time ”实际上是一个 VBScript
内置的显示系统当前时间的函数,由于系统默认的脚本语言是 VBScript
,因此当你在 ASP
命令中调用该函数时,脚本引擎会自动将其转换成当前的系统时间。接下来我们将给
test1.asp 添加一点色彩,在
body 标识中添加“ bgcolor=" %
=bgc % ”即变为
body bgcolor=" % =bgc %" ,并在
body 标记前添加如下语句:
% If Time
#12:00:00# And Time = #00:00:00# Then
bgc="silver"
ElseIf Time
#19:00:00# And Time = #12:00:00# Then
bgc="navy"
Else
bgc="red"
End If
% /p
p /p
p 如此一来,当用户在不同的时段访问你的页面时,他们将会看到不同的页面背景色。我们可以做的事情还有很多,譬如你想知道在凌晨至十二点之间浏览你页面的客户的姓名,并向他或她问好,那么下面的这段程序将能助你达成心愿。首先你需要在页面中设置表单,将以下HTML代码剪贴到“
% If Time
#12:00:00# And Time = #00:00:00# Then %
”之后: /p
p欢迎光临我的主页,请填写以下信息 :
FORM METHOD="POST"
ACTION="test1.asp"
P
First Name:
INPUT NAME="fname" SIZE="48"
P
Last Name:
INPUT NAME="lname" SIZE="48"
P
Title:
INPUT NAME="title" TYPE=RADIO VALUE="mr"Mr.
INPUT NAME="title" TYPE=RADIO VALUE="ms"Ms.
P INPUT TYPE=SUBMIT INPUT TYPE=RESET
/FORM/p
p 然后在以上 HTML 代码后面添加如下 ASP 命令:
%
title=request.form("title")
if title="mr" then
%
欢迎您 Mr. % =request.form("fname") % 。
% elseif title="ms" then %
欢迎您 Ms. % =request.form("fname") % 。
% else %
B font color=blue 欢迎您
%
=request.form("fname")" "request.form("lname")
% 。
/font /B
% end if %
/p
p
保存文件 test1.asp ,并在浏览器中以 HTTP
方式进行浏览,如果此时的系统时间在凌晨 0:00:00 和中午 12:00:00
之间的话,浏览器将显示如下画面:
这其实是一个在 Internet 和Intranet
上常见的功能,即当用户在浏览器端填写完表单后,通过调用一个通用网关程序将用户数据传送到服务器,由服务器进行处理后再将结果返还给客户浏览器。过去为了实现这样的功能必须编写一个独立于
HTML 之外的 CGI 程序,并通过 HTML 进行调用,撇开 CGI
编写复杂等缺点不谈, CGI 的执行效率也是一个大问题,每一个表单
(form)
均须执行一个可执行文档,当多人同时上线使用时,多个文档同时执行,将大大降低
WEB 服务器的执行速度,如今 ASP 提供了与 HTML
完全相融的编程环境,显然要比使用 CGI 便捷得多。 /p
p
在本期的最后让我们再来看看 ASP
的循环功能,譬如你希望当客户在晚间 7:00 至凌晨 0:00:00
浏览你的页面时,在页面中央显示 6 个笑脸 表示问候,那么你只需要将以下命令剪贴到“
Good Evening! ”后面即可:
% for I=1 to 6 %
p center img src="smile.gif" width="32"
height="32" alt=" 晚上好 " /p
% next % /p
p 这是一个最最基本的循环语句,它将一个笑脸图片重复调用六次并显示在页面上。当然此例的效果完全可以用
HTML 做到,但是不难发现使用 ASP
大大缩短了代码的重复编写,使得程序具有良好的可阅读性。另外,当你制作一个诸如根据用户投票来给所评测的对象评定星级的评测站点时,使用此法,你就完全不需要为每一个星级制作一幅图片。如果一个对象被评为
4星级,那只需将一颗星的图片循环显示 4次,以此类推即可。当然,当工作量较小的时候你不会感觉到
ASP 的好处,然而一旦数据量巨增,你将会深刻的体会到 ASP
动态网站给你带来的前所未有的轻、爽感受 ! /p
如何使用 ASP 编写开方脚本!
方法1---直接使用VBscript函数Sqr()
《%
dim a
a=sqr(2) ’就是2的平方根约为1.414
response.write(a)
%》
方法2---等会儿再写!
补上刚写好的一种求开方的算法,你闻闻,还很新鲜.
《%
if request.form("ok")《》"" then
dim a,x0,x1,b
a=cDbl(request.form("num")) ’你要开方的数
b=cDbl(request.form("myRadio")) ’选择的精确度
x0=1 ’这个是我们猜想的结果(也叫预报值,可取其它值,当我们取的精确度相当高时,这个值对结果的影响就极微小了),然后通过校正技术求出更准确的值x1
do while Abs((x0+a/x0)/2-x0)》=b ’此Abs()为取绝对值
x1=(x0+a/x0)/2
x0=x1
loop
end if
%》
《html》
《head》《title》开方《/title》《head》
《body》
《form name="form1" method="post" action=""》
请选择所得平方根的精确度:
《input type="radio" name="myRadio" value="1e-1"》10《sup》-1《/sup》
《input type="radio" name="myRadio" value="1e-2"》10《sup》-2《/sup》
《input type="radio" name="myRadio" value="1e-3"》10《sup》-3《/sup》
《input type="radio" name="myRadio" value="1e-4"》10《sup》-4《/sup》
《input type="radio" name="myRadio" value="1e-5" checked》10《sup》-5《/sup》
《input type="radio" name="myRadio" value="1e-10"》10《sup》-10《/sup》
《br》《br》
《input type="text" name="num"》
《input type="submit" name="ok" value="的平方根为:"》
《input type="text" name="result" value="《%=x1%》"》
《/form》
《/body》
《/html》
第二种方法只是说明开方的算法,希望对你有用...
ASP.NET Web Page应用深入探讨
一 服务器脚本基础介绍
首先 我们先复习一下Web服务器页面的基本执行方式
客户端通过在浏览器的地址栏敲入地址来发送请求到服务器端
服务器接收到请求之后 发给相应的服务器端页面(也就是脚本)来执行 脚本产生客户端的响应 发送回客户端
客户端浏览器接收到服务器传回的响应 对Html进行解析 将图形化的网页呈现在用户面前
对于服务器和客户端的交互 通常通过下面几种主要方式
Form 这是最主要的方式 标准化的控件来获取用户的输入 Form的提交将数据发送给服务器端处理
QueryString 通过在Url后面带参数达到将参数传送给服务器 这种方式其实跟Get方式的Form是一样的
Cookies 这是一种比较特殊的方式 通常用于用户身份的确认
二 ASP Net简介
传统的服务器脚本语言 如ASP JSP等 编写服务器脚本的方式大同小异 都是在Html中嵌入解释或编译执行的代码 由服务器平台执行这些代码来生成Html 对于这类似的脚本 页面的生存周期实际上很简单 就是从开头至末尾 执行完所有的代码 当然用Java编写的Servlet可以编写更复杂的代码 但是从结构上看 和JSP没什么区别
ASP Net的出现 打破了这种传统 ASP Net采用了CodeBehind技术和服务器端控件 加入了服务器端的事件的概念 改变了脚本语言编写的模式 更加贴近Window编程 使Web编程更加简单 直观 但是我们要看到 ASP Net本身并没有改变Web编程的基本模式 只是封装了一些细节 提供了一些易用的功能 使代码更容易编写和维护 从某种程度上来说 将服务器端执行的方式复杂化了 这就是我们今天要讨论的主体 ASP Net Web Page的生存周期
三 ASP Net请求处理模式
我们说 ASP Net的Web Page并没有脱离Web编程的模式 所以它仍然是以 请求 》接收请求 》处理请求 》发送响应 这样的模式在工作 每一次与客户端的交互都会引发一次新的请求 所以一个Web Page的生命周期是以一次请求为基础的
当IIS收到客户端的请求的时候 会将请求交给aspnet_wp这个进程来处理 这个进程会查看请求的应用程序域是否存在 如果不存在则会创建一个 然后会创建一个Http运行时(HttpRuntime)来处理请求 这个运行时 为当前应用程序提供一组 ASP NET 运行时服务 (摘自MSDN)
HttpRuntime在处理请求的时候 会维护一系列的应用程序实例 也就是应用程序的Global类(global asax)的实例 这些实例在没有请求的时候 会存放在一个应用程序池中(实际上应用程序池由另一个类来维护 HttpRuntime只是简单的调用) 每接收到一个请求 HttpRuntime都会获取一个闲置的实例来处理请求 这个实例在请求结束前不会处理其他的请求 处理完毕之后 它又会回到池中 一个实例在其生存期内被用于处理多个请求 但它一次只能处理一个请求 (摘自MSDN)
当应用程序实例处理请求的时候 它会创建请求页面类的实例 执行它的ProcessRequest方法来处理请求 这个方法也就是Web Page生命周期的开始
四 Aspx页面与CodeBehind
在深入了解页面的生命周期之前 我们先来探讨一些Aspx与CodeBehind之间的关系
《%@ Page language= c# Codebehind= WebForm aspx cs Inherits= MyNamespace WebForm %》
相信使用过CodeBehind技术的朋友 对ASPX顶部的这句话应该是非常熟悉了 我们来一项一项的分析它
Page language= c# 这个就不用多说了吧
Codebehind= WebForm aspx cs 这一句表示绑定的代码文件
Inherits= MyNamespace WebForm 这句非常重要 它表示页面继承的类名称 也就是CodeBehind的代码文件中的类 这个类必须从System Web WebControls Page派生
从上面我们可以分析出 实际上CodeBehind中的类就是页面(ASPX)的基类 到这里 可能有些朋友要问了 在编写ASPX的时候 完全是按照ASP的方式 在Html中嵌入代码或者嵌入服务器控件 没有看到所谓 类 的影子啊?
这个问题实际上并不复杂 各位使用ASP Net编程的朋友可以到你们的系统盘 \WINDOWS\Microsoft NET\Framework\《版本号》\Temporary ASP NET Files这个目录下 这个下面就放了所有本机上存在的ASP Net应用程序的临时文件 子目录的名称就是应用程序的名称 然后再下去两层(为了保证唯一 ASP Net自动产生了两层子目录 并且子目录名称是随机的) 然后我们会发现有很多类似 yfy gjhc dll xeunj u dll 这样的链接库以及 komee bp cs falckav cs 这样的源文件 实际上这就是ASPX被ASP Net动态编译后的结果 打开这些源文件我们可以发现
public class WebForm_aspx MyNamespace WebForm System Web SessionState IRequiresSessionState
这就印证了我们前面的说法 ASPX是代码绑定类的子类 它的名称是ASPX文件名加上 _aspx 后缀 通过研究这些代码我们可以发现 实际上所有aspx中定义的服务器控件都是在这些代码中生成的 然后动态产生这些代码的时候 把原来在ASPX中嵌入的代码写在了相应的位置
当某个页面第一次被访问的时候 Http运行时就会使用一个代码生成器去解析ASPX文件并生成源代码并编译 然后以后的访问就直接调用编译后的dll 这也是为什么ASPX第一次访问的时候非常慢的原因
解释了这个问题 我们再来看另一个问题 我们在使用代码绑定的时候 在设计页面拖一个控件 然后切换到代码视图 就可以直接在Page_Load中使用这个控件了 既然控件是在子类中产生的 那为什么在父类中可以直接使用呢?
实际上我们可以发现 每当用VS Net拖一个控件到页面上 代码绑定文件中总是会类似这样的添加一个声明
protected System Web WebControls Button Button
我们可以发现这个字段被声明成protected 而且名字与ASPX中控件的ID一致 仔细想一想 这个问题就迎刃而解了 我们前面提到ASPX的源代码是被生成器动态生成和编译的 生成器会产生动态生成每一个服务器控件的代码 在生成的时候 它会检查父类有没有声明这个控件 如果声明了 它会添加类似下面的一句代码
this DataGrid = __ctrl
这个__ctrl就是生成该控件的变量 这时候它就把控件的引用赋给了父类中相应的变量 这也是为什么父类中的声明必须为protected(实际上也可以为public) 因为要保证子类能够调用
然后在执行Page_Load的时候 因为这时候父类的声明已经被子类中的初始化代码赋了值 所以我们就可以使用这个字段来访问对应的控件 了解了这些 我们就不会犯在代码绑定文件中的构造器里使用控件 造成空引用的异常的错误了 因为构造器是最先执行的 这时候子类的初始化还没有开始 所以父类中的字段是空值 至于子类是什么时候初始化我们放到后面讨论
五 页面生存周期
现在回到第三个标题中讲到的内容 我们讲到了HttpApplication的实例接收请求 并创建页面类的实例 实际上这个实例也就是动态编译的ASPX的类的一个实例 上一个标题中我们了解到ASPX实际上是代码绑定中类的子类 所以它继承了所有的protected方法
现在我们来看看VS Net自动生成的CodeBehind类的代码 以此来开始我们对页面生命周期的探讨
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{ // // CODEGEN 该调用是 ASP NET Web 窗体设计器所必需的
// InitializeComponent() base OnInit(e) }
/// 《summary》 /// 设计器支持所需的方法 不要使用代码器修改/// 此方法的内容
/// 《/summary》
private void InitializeComponent()
{ this DataGrid ItemDataBound += new System Web UI WebControls DataGridItemEventHandler(this DataGrid _ItemDataBound)
this Load += new System EventHandler(this Page_Load) }
#endregion
这个就是使用VS Net产生的Page的代码 我们来看 这里面有两个方法 一个是OnInit 一个是InitializeComponent 后者被前者调用 实际上这就是页面初始化的开始 在InitializeComponent中我们看到了控件的事件声明和Page的Load声明
下面是从MSDN中摘录的一段描述和一个页面生命周期方法和事件触发的顺序表
每次请求 ASP NET 页时 服务器就会加载一个 ASP NET 页 并在请求完成时卸载该页 页及其包含的服务器控件负责执行请求并将 HTML 呈现给客户端 虽然客户端和服务器之间的通讯是无状态的和断续的 但是必须使客户感觉到这是一个连续执行的过程
这种连续性假象是由 ASP NET 页框架 页及其控件实现的 回发后 控件的行为必须看起来是从上次 Web 请求结束的地方开始的 虽然 ASP NET 页框架可使执行状态管理相对容易一些 但是为了获得连续性效果 控件开发人员必须知道控件的执行顺序 控件开发人员需要了解 在控件生命周期的各个阶段 控件可使用哪些信息 保持哪些数据 控件呈现时处于哪种状态 例如 在填充页上的控件树之前控件不能调用其父级 下表提供了控件生命周期中各阶段的高级概述 有关详细信息 请点击表中的链接
阶段 控件需要执行的操作 要重写的方法或事件初始化 初始化在传入 Web 请求生命周期内所需的设置 请参阅处理继承的事件 Init 事件(OnInit 方法)
加载视图状态 在此阶段结束时 就会自动填充控件的 ViewState 属性 详见维护控件中的状态中的介绍 控件可以重写 LoadViewState 方法的默认实现 以自定义状态还原 LoadViewState 方法处理回发数据 处理传入窗体数据 并相应地更新属性 请参阅处理回发数据
注意 只有处理回发数据的控件参与此阶段 LoadPostData 方法 (如果已实现IPostBackDataHandler)
加载 执行所有请求共有的操作 如设置数据库查询 此时 树中的服务器控件已创建并初始化 状态已还原并且窗体控件反映了客户端的数据 请参阅处理继承的事件 Load 事件(OnLoad 方法)
发送回发更改通知 引发更改事件以响应当前和以前回发之间的状态更改 请参阅处理回发数据
注意 只有引发回发更改事件的控件参与此阶段 RaisePostDataChangedEvent 方法(如果已实现 IPostBackDataHandler)
处理回发事件 处理引起回发的客户端事件 并在服务器上引发相应的事件 请参阅捕获回发事件
注意 只有处理回发事件的控件参与此阶段 RaisePostBackEvent 方法(如果已实现 IPostBackEventHandler)
预呈现 在呈现输出之前执行任何更新 可以保存在预呈现阶段对控件状态所做的更改 而在呈现阶段所对的更改则会丢失 请参阅处理继承的事件 PreRender 事件(OnPreRender 方法)
保存状态 在此阶段后 自动将控件的 ViewState 属性保持到字符串对象中 此字符串对象被发送到客户端并作为隐藏变量发送回来 为了提高效率 控件可以重写 SaveViewState 方法以修改 ViewState 属性 请参阅维护控件中的状态 SaveViewState 方法呈现 生成呈现给客户端的输出 请参阅呈现 ASP NET 服务器控件 Render 方法处置 执行销毁控件前的所有最终清理操作 在此阶段必须释放对昂贵资源的引用 如数据库链接 请参阅 ASP NET 服务器控件中的方法
Dispose 方法卸载 执行销毁控件前的所有最终清理操作 控件作者通常在 Dispose 中执行清除 而不处理此事件 UnLoad 事件(On UnLoad 方法)
从这个表里面我们可以清楚的看到一个Page从装载到卸载之间调用的方法和触发的时间 接下来我们就深入的对其进行一些分析
看了上面的表 细心的朋友可能要问了 既然OnInit是页面生命周期的开始 而我们在上一讲中谈到控件在子类中被创建 那么在这里实际上在InitializeComponent方法中我们已经可以使用父类中声名的字段了 那么就意味着子类的初始化更在这之前?
在第三个标题中我们讲到了页面类的ProcessRequest才是真正意义上的页面声明周期的开始 这个方法是由HttpApplication调用的(其中调用的方式比较复杂 有机会单独撰文来讲解) 一个Page对请求的处理就是从这个方法开始 通过反编译 Net类库来查看源代码 我们发现在System Web WebControls Page的基类 System Web WebControls TemplateControl(它是页面和用户控件的基类)中定义了一个 FrameworkInitialize 虚拟方法 然后在Page的ProcessRequest中最先调用了这个方法 在生成器生成的ASPX的源代码中我们发现了这个方法的踪影 所有的控件都在这个方法中被初始化 页面的控件树就在这个时候产生
接下来的事情就简单了 我们来逐步分析页面生命周期的每一项
初始化
初始化对应Page的Init事件和OnInit方法
如果要重写 MSDN推荐的方式是重载OnInti方法 而不是增加一个Init事件的代理 这两者是有差别的 前者可以控制调用父类OnInit方法的顺序 而后者只能在父类的OnInit后执行(实际上是在OnInit里面被调用的)
加载视图状态
这是个比较重要的方法 我们知道 对于每次请求 实际上是由不同的页面类实例来处理的 为了保证两次请求间的状态 ASP Net使用了ViewState
LoadViewState方法就是从ViewState中获取上一次的状态 并依照页面的控件树的结构 用递归来遍历整个树 将对应的状态恢复到每一个控件上
处理回发数据
这个方法是用来检查客户端发回的控件数据的状态是否发生了改变 方法的原型
public virtual bool LoadPostData(string postDataKey NameValueCollection postCollection)
postDataKey是标识控件的关键字(也就是postCollection中的Key) postCollection是包含回发数据的集合 我们可以重写这个方法 然后检查回发的数据是否发生了变化 如果是则返回一个True 如果控件状态因回发而更改 则 LoadPostData 返回 true 否则返回 false 页框架跟踪所有返回 true 的控件并在这些控件上调用 RaisePostDataChangedEvent (摘自MSDN)
这个方法是System Web WebControls Control中定义的 也是所有需要处理事件的自定义控件需要处理的方法 对于我们今天讨论的Page来说 可以不用管它
加载
加载对应Load事件和OnLoad方法 对于这个事件 相信大多数朋友都会比较熟悉 用VS Net生成的页面中的Page_Load方法就是响应Load事件的方法 对于每一次请求 Load事件都会触发 Page_Load方法也就会执行 相信这也是大多数人了解ASP Net的第一步
Page_Load方法响应了Load事件 这个事件是在System Web WebControl Control类中定义的(这个类是Page和所有服务器控件的祖宗) 并且在OnLoad方法中被触发
很多人可能碰到过这样的事情 写了一个PageBase类 然后在Page_Load中来验证用户信息 结果发现不管验证是否成功 子类页面的Page_Load总是会先执行 这个时候很可能留下一些安全性的隐患 用户可能在没有得到验证的情况下就执行了子类中的Page_Load方法
出现这个问题的原因很简单 因为Page_Load方法是在OnInit中被添加到Load事件中的 而子类的OnInit方法中是先添加了Load事件 然后再调用base OnInit 这样就造成了子类的Page_Load被先添加 那么先执行了
要解决这个问题也很简单 有两种方法
) 在PageBase中重载OnLoad方法 然后在OnLoad中验证用户 然后调用base OnLoad 因为Load事件是在OnLoad中触发 这样我们就可以保证在触发Load事件之前验证用户
) 在子类的OnInit方法中先调用base OnInit 这样来保证父类先执行Page_Load
发送回发更改通知
这个方法对应第 步的处理回发数据 如果处理回发数据返回True 页面框架就会调用此方法来触发数据更改的事件 所以自定义控件的回发数据更改事件需要在此方法中触发
同样这个方法对于Page来说 没有太大的用处 当然你也可以在Page的基础上自己定义数据更改的事件 这当然也是可以的
处理回发事件
这个方法是大多数服务器控件事件引发的地方 当请求中包含控件事件触发的信息时(服务器控件的事件是另一个论题 我会在不久将来另外撰文讨论) 页面控件会调用相应控件的RaisePostBackEvent方法来引发服务器端的事件
这里又引出一个常见的问题
经常有网友问 为什么修改提交后的数据并没有更改
多数的情况都是他们没有理解服务器事件的触发流程 我们可以看出 触发服务器事件是在Page的Load之后 也就是说页面会先执行Page_Load 然后才会执行按钮(这里以按钮为例)的点击事件 很多朋友都是在Page_Load中绑定数据 然后在按钮事件中处理更改 这样做有一个毛病 Page_Load永远都是在按钮事件之前执行 那么意味着数据还没来得及更改 Page_Load中的数据绑定的代码就先执行了 原有的数据又赋给了控件 那么执行按钮事件的时候 实际上获得的是原有的数据 那么更新当然就没有效果了
更改这个问题也非常简单 比较合理的做法是把数据绑定的代码写成一个方法 我们假设为BindData
private void BindData()
{ //绑定数据}
然后修改PageLoad
private void Page_Load( object sender EventArgs e )
{ if( !IsPostBack )
{ BindData() //在页面第一次访问的时候绑定数据}
最后在按钮事件中
private Button _Click( object sender EventArgs e )
{ //更新数据BindData() //重新绑定数据}
预呈现
最终请求的处理都会转变为发回服务器的响应 预呈现这个阶段就是执行在最终呈现之前所作的状态的更改 因为在呈现一个控件之前 我们必须根据它的属性来产生Html 比如Style属性 这是最典型的例子 在预呈现之前 我们可以更改一个控件的Style 当执行预呈现的时候 我们就可以把Style保存下来 作为呈现阶段显示Html的样式信息
保存状态
这个阶段是针对加载状态的 我们多次提到 请求之间是不同的实例在处理 所以我们需要把本次的页面和控件的状态保存起来 这个阶段就是把状态写入ViewState的阶段
呈现
到这里 实际上页面对请求的处理基本就告一段落了 在Render方法中 会递归整个页面的控件树 依次调用Render方法 把对应的Html代码写入最终响应的流中
处置
实际上就是Dispose方法 在这个阶段会释放占用的资源 例如数据库连接
卸载
最后 页面会执行OnUnLoad方法触发UnLoad事件 处理在页面对象被销毁之前的最后处理 实际上ASP Net提供这个事件只是设计上的考虑 通常资源的释放都会在Dispose方法中完成 所以这个方法也变成鸡肋了
我们简单的介绍了页面的生存周期 对于服务器端事件的处理做了不太深入的讲解 今天主要是想大家了解页面执行的周期 对于服务器控件的事件和生存期我会在后续在写一些文章来探讨
lishixinzhi/Article/program/net/201311/13003ASP入门:认识ASP程序所使用的几种脚本语言
这是因为,在结果被送回浏览器前,脚本已经在服务器执行了。实例:用ASP写文本《html《body《%response.write("Hello World!")%《/body《/html向文本添加HTML《html《body《%response.write("《h3You can use HTML tags to format the text!《/h3")%《%response.write("《p style=’color:#0000ff’This text is styled with the style attribute!《/p")%《/body《/html基本的ASP语法规则通常情况下,ASP文件也包含HTML标签,类似HTML文件。不过,ASP文件也可包含服务器端脚本,这些脚本被《%和%包围起来。服务器脚本在服务器端执行,可包含合法的表达式、声明、或者运算符。向浏览器写输出response.write命令用来向浏览器写输出。下面的例子向浏览器传送了一段文本:"Hello World"。《html《body《%response.write("Hello World!")%《/body《/html还有一种response.write命令的简写方法。下面的例子和上面的例子是等效的:《html《body《%="Hello World!"%《/body《/htmlVBScript你可以在ASP中使用若干种脚本语言。不过,默认的脚本语言是VBScript:《html《body《%response.write("Hello World!")%《/body《/html上面的例子同样在文档的body部分写入了文本"Hello World!"。JavaScript如果需要使用JavaScript作为某个特定页面的默认脚本语言,就必须在页面的顶端插入一行语言设定:《%@ language="javascript"%《html《body《%Response.Write("Hello World!")%《/body《/html注意:与VBScript不同 - JavaScript对大小写敏感。所以你需要根据JavaScript的需要使用不同的大小写字母编写ASP代码。其他的脚本语言ASP与VBScript和JScript的配合是原生性的。如果你需要使用其他语言编写脚本,比如PERL、REXX或者Python,那就必须安装相应的脚步引擎。
ASP脚本循环语句
在本文上两篇中,我们学习了脚本语言 VBScript 的变量、函数、过程和条件语句,本篇将继续给大家介绍 VBScipt 的循环语句,并对脚本语言在 ASP 中的应用加以总结。
如果有人告诉你学习 ASP 不需要任何编程知识,那么他错了;如果我告诉你学习 ASP 必须掌握一门编程语言,那么我错了。ASP 动态服务器页面环境的特点就在于它是通过一种或几种脚本语言而写成的,脚本语言可以看作是编程语言的简化版,它易于学习和掌握,这给广大动态网站的设计者们提供了相当大的便利。可以这么说 : 脚本语言运用的得当与否直接关系到 ASP 应用程序的优与劣。继上一篇我们学习了脚本语言 VBScript 的函数和条件语句后,今天我们继续来看看 VBScript 中的循环语句。
循环语句的作用就是重复执行程序代码,循环可分为三类:一类在条件变为“假”之前重复执行语句,一类在条件变为“真”之前重复执行语句,另一类按照指定的次数重复执行语句。在 VBScript 中可使用下列循环语句:
Do...Loop: 当(或直到)条件为“真”时循环。
While...Wend: 当条件为“真”时循环。
For...Next: 指定循环次数,使用计数器重复运行语句。
For Each...Next: 对于集合中的每项或数组中的每个元素,重复执行一组语句。
我们先来看看 Do...Loop,它是可以多次(次数不定)运行语句块。当条件为“真”时或条件变为“真”之前,重复执行语句块。请看下例:
html head
titleDoLoop.asp /title body bgcolor="#FFFFFF" /head p /p
p 请将今年到本月为止的每个月份的销售结算记录填写在本页之上。 P
%
counter = 1
thismonth = month(now())
Do while counter
thismonth + 1
response.write " "
counter
" 月份 : "
response.write "______________________________"
" BR br"
If counter 13 then
exit do
end if
counter = counter+1
Loop
%
hr /body /html
这段 ASP 程序运用循环语句制作了一张销售结算记录表,将以上代码剪贴至记事簿保存为 DoLoop.asp,并在浏览器中以 HTTP 方式进行浏览,根据当前的月份的不同,你将看到如下图的结果。
我们来分析一下此段程序,我们的目的是要根据当前的月份打印一张表格,首先我们建立一个计数器“count”并将其值设为 1,然后我们用函数 month() 和now() 得到当前的月份,最后建立循环,当 count 的值小于当前月份的值加 1的时候,即显示月份值及一条横线并将 count 的值加 1,循环语句重复执行直到以上条件为假时退出循环。其中如果 count 大于 13 则用 exit do 立即退出循环。
Do Loop 语句还可以使用以下语法:
Do
While...Wend 语句是为那些熟悉其用法的用户提供的。但是由于 While...Wend 缺少灵活性,所以建议最好使用 Do...Loop 语句。下面我们来看看 For Next 语句。For...Next 语句用于将语句块运行指定的次数,在循环中使用计数器变量,该变量的值随每一次循环增加或减少。
下面的示例将过程 MyProc 重复执行 50 次。For 语句指定计数器变量 x 及其起始值与终止值。Next 语句使计数器变量每次加 1。
Sub DoMyProc50Times()
Dim x
For x = 1 To 50
MyProc
Next
End Sub
关键字 Step 用于指定计数器变量每次增加或减少的值。在下面的示例中,计数器变量 j 每次加 2。循环结束后,total 的值为 2、4、6、8 和 10 的总和。
Sub TwosTotal()
Dim j, total
For j = 2 To 10 Step 2
total = total + j
Next
MsgBox " 总和为 "
total
"。"
End Sub
要使计数器变量递减,可将 Step 设为负值。此时计数器变量的终止值必须小于起始值。在下面的示例中,计数器变量 myNum 每次减 2。循环结束后,total 的值为 16、14、12、10、8、6、4 和 2 的总和。
Sub NewTotal()
Dim myNum, total
For myNum = 16 To 2 Step -2
total = total + myNum
Next
MsgBox " 总和为 "
total
"。"
End Sub
Exit For 语句用于在计数器达到其终止值之前退出 For...Next 语句。因为通常只是在某些特殊情况下(例如在发生错误时)要退出循环,所以可以在 If...Then...Else 语句的 True 语句块中使用 Exit For 语句。如果条件为 False,循环将照常运行。
最后,让我们来看看 For Each...Next 语句 ,For Each...Next 循环与 For...Next 循环类似。For Each...Next 不是将语句运行指定的次数,而是对于数组中的每个元素或对象集合中的每一项重复一组语句。这在不知道集合中元素的数目时非常有用。它的语法如下:
For Each element In group
如果 group 中有至少一个元素,就会进入 For Each 块执行。一旦进入循环,便首先对 group 中第一个元素执行循环中的所有语句。只要 group 中还有其他的元素,就会对每个元素执行循环中的语句。当 group 中没有其他元素时退出循环,然后从 Next 语句之后的语句继续执行。
至此,我们已经完成了对脚本语言 VBScript 所有的基本知识的学习,但是仅凭阅读现有的这几篇文章你是无法熟练运用 VBScript 的,你必须通过不断的实践来提高自己的等级。当然,如果你熟悉 C,你也可以选择JavaScript 来作为 ASP 应用程序的脚本语言。不知大家有没有发现 ASP 程序的调试比较困难,因为没有什么现成的工具,在这里我向大家简要介绍一下 Microsoft Script Debugger,我们可以运用它来进行一定量的程序调试工作。
IIS4.0 所包括的 Microsoft Script Debugger(Script 侦错工具),提供脚本程序的侦错功能。您可以使用 Microsoft Script 侦错工具来进行对使用 VBScript、JScript 编写的脚本程序,以及 Java applets、beans 和 ActiveX 组件的侦错工作。
有的脚本程序在用户端浏览器执行,有的脚本程序( % % 中的部份)在服务器端执行。Microsoft Script Debugger,可以侦错用户端执行的脚本程序以及服务器端执行脚本程序。
在用户端浏览器执行的脚本程序是在用户端的浏览器当中执行,包括在标准 HTML 代码中的 VBScript、Jscript 部份。在浏览器载入此 HTML 代码或譬如按下按钮触发事件时,将执行此包括脚本程序的 HTML 代码。用户端浏览器执行的脚本程序,主要用于对 HTML 表单输入的基本检查等功能。
在服务器端执行的脚本程序是在 IIS 服务器端执行,包括在 .asp 程序中。先在 IIS 服务器上执行,执行结果产生标准的 HTML 代码,再传送到用户端浏览器。服务器端执行的脚本程序,主要用于多个网页之间的连结,HTML 表单输入的处理,以及存取服务器上数据库的资料等。
Microsoft Script Debugger 提供以下的除错功能:
1、设定中断点
2、逐步追踪脚本程序。
3、设定书签。
4、检视呼叫堆叠。
5、检视和更改变数值。
6、执行脚本指令。
从下一篇开始,我们将开始学习 ASP 的内建对象,敬请关注。
asp语言的学习大纲谁能给我说详细点!
《ASP》教学大纲
一、教育目标和基本要求
1.先修课要求
本课程是基于学生学习完《计算机网络基础》、《网页制作》、《网站建设与管理》课程以后,在掌握了计算机网页一般制作方法和网络的基础知识以后所需要学习的课程。
本大纲适用于电子商务专业开设的ASP开发技术课程。
2.课程教学要求
本课程是电子商务专业的必修考试课,ASP(Active Serve Pages)是能够把HTML文件、脚本、基于COM标准的组件有机地组合在一起,形成一个能够在服务器上运行的动态WEB应用程序,使得以静态内容为主的WEB带来了全新的动态效果,是在Windows环境下首选的网站开发和编程技术,本课程讲解了ASP使用的基础知识、一般的编程技巧,讲述了ASP的组件,讲解了新的数据访问模型ADO技术,以及ASP如何访问数据库,并且介绍了使用ASP开发的大量示例。通过该课程的学习,学生应该掌握ASP编程的一般理论和技巧,熟练使用ASP的组件,能够在实际网络开发过程完成如论坛、聊天室等的制作工作。
3.教学要求的层次
本课程要求学生能够掌握 ASP技术的基本内容,能够进行简单的网站开发。对于一些不常用的组件不做太深的要求。
在教学过程中应注意以实例贯穿始末,避免空洞的理论学习。另外,该教材讲解了基于脚本语言VBScript和JavaScript开发ASP网络应用程序的方法,在教学过程中,只需要讲解其中的基于VBScript脚本语言的部分,而基于JavaScript脚本语言部分不作要求。
4.教学总学时数
本课程的实践性较强,在教学过程中注重理论教学的同时,着重培养学生的动手操作能力。教学采用多媒体形式,配合上机实践。该课程共64课时,期末以笔试的形式考核,占70%,平时表现包括实验报告的完成情况占30%。面授32课时,实验32课时。
5.学时分配表
学时数
教学内容 课堂教学 实践教学
ASP基础 8课时 8课时
ASP组件 6课时 4课时
ADO简介 6课时 6课时
ADO与SQL 6课时 8课时
ASP访问数据库 6课时 6课时
二、教学内容
第一章 ASP基础
教学目的与要求:通过本章学习掌握ASP变量,ASP的运算符与表达式,VBScript的程序流程控制,子过程和函数。 SSI配置指令,插入环境变量指令,执行指令,制定文件路径指令,制定文件大小指令,包含指令。ASP对象、 @指令的使用、 Global文件的使用。
教学内容:
1、 ASP基本用法
重点掌握:ASP变量,ASP的运算符与表达式,VBScript的程序流程控制,子过程和函数。
2、 SSI指令
重点掌握:SSI配置指令,插入环境变量指令,执行指令,制定文件路径指令,制定文件大小指令,包含指令。
3、 ASP对象(重点掌握)
4、 @指令的使用(掌握)
5、 Global文件的使用(掌握)
第二章 ASP组件
教学目的与要求:熟悉ASP六大组件的对象、属性和方法。
教学内容:
1、 Ad Rotatoe组件:
重点掌握重定向文件和Ad Rotatoe组件的属性和方法
2、 Browser Capabilities组件(重点掌握)
3、 Content Linking组件(重点掌握)
4、 File Access 组件(重点掌握)
5、 TextStream组件(重点掌握)
6、 性能组件(重点掌握)
第三章 ADO简介
教学目的与要求:掌握ADO对象模型,学会配置DSN,使用ADO对象打开和关闭数据库连接。
教学内容:
1、 使用ADO对象
2、 Connection对象(重点掌握)
3、 Error对象(重点掌握)
4、 Command对象(重点掌握)
5、 RecordSet对象(一般了解)
第四章 ADO与SQL(重点掌握)
教学目的与要求:掌握SQL语句的命令和语法。
教学内容:
1、SQL基本使用方法
2、ADO操作SQL语句的几种语法
第五章 ASP访问数据库
教学目的和要求:掌握访问数据库的三种方式,数据库的查询和记录的输出,模糊查询的建立,批量数据的处理。
教学内容:
1、 访问数据库(掌握)
2、 访问数据库的三种方式(重点掌握)
3、 ASP与ADO在数据库查询中的应用(重点掌握)
4、 不用DSN访问数据库(一般了解)
5、 ASP应用中数据库记录的选取与过滤(重点掌握)
6、 在ASP中用集合成批操作数据库(掌握)
第六章 ASP综合实例
教学目的与要求:运用ASP开发调试常用程序如电子邮件发送程序、网站留言板、BBS、聊天室、电子商务购物网站等。
要点:
1、 用ASP来发电子邮件专题(重点掌握)
2、 论坛(重点掌握)
3、 网上调查(重点掌握)
4、 聊天室(重点掌握)
5、 ASP网上调试SQL(一般了解)
6、 交友网站(重点掌握)
三、实践性教学环节要求
理论课时和实践课时各占一半。通过教学,使学生熟练使用ASP的组件,能够在实际网络开发过程完成如留言簿、网上订单、电子邮件发送程序、论坛、聊天室等的制作。
四、说明
1、本学科开设目的、任务、指导思想
使学生掌握一门网络编程语言,通过教学,使学生能够熟悉ASP常用组件,并能够开发交互式网页。
2、教材体系特点
教材理论比较系统,并附带丰富案例。
3、教学方法建议
理论教学与案例讲解并重,课堂演示与上机实践结合。
五、教材及参考书
教材: 《Active Server Pages》编程实务 高等教育出版社
《精通ASP3.0网络编程》 人民邮电出版社
《ASP》开发基础与范例 电子工业出版社

更多文章:
form表单制作(为什么制作的form表单会在网页显示中多出一行)
2026年10月11日 09:10
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50




