一、ASP的脚本语言
VBs cript是ASP的脚本语言,因为ASP脚本在服务器端执行,所以只要服务器端支持vbs cript就可以了。
Vbs cript是visual basic的一个子集,虽然限制了可以使用的内置函数的数量,但是也使得他非常小巧,从而提高了可移植性.它们之间的重要差异在于:
变量类型和作用范围;
不能使用某些内置函数;
增加了一些函数和对象;
处理错误的方式;
进行排错调试的方式。
㈠ vbs cript代码的基本格式:
e.g:
<s cript language="vbs cript">
<!- -
sub window_onload()
document.bgcolor=red
msgbox "you are welcome."
End sub
->
</s cript>
1 编码约定:
子类型 前缀 示例
Boolean Bln BlnFound
Byte Byt BytRasterData
Date(Time) Dtm
Double Dbl
Error Err
Integer Int
Long Lng
Object Obj
Single Sng
String Str
2 变量:
声明: For Example: Dim DegreeFahrenheit
规则:
第一个字符必须是字母;
不能包含嵌入的句点;
长度不能超过255个字符;
在被声明的作用域内必须唯一.
静态数组与动态数组:
For Example: Dim My_Array(10)
For Example: Dim My_Array()
ReDim My_Array(10)
3 过程和函数:
过程: For Example:
Sub ConvertTemp()
Temp=InputBox("请输入华氏温度:",1)
MsgBox "温度为" & Celsius(temp) & "摄氏度"
End Sub
函数: For Example:
Function Celsius(fDegrees)
Celsius=(fDegrees-32)*5/9
End Function
4 数据类型:
Variant是vbs cript的唯一数据类型,有13种子类型:
Empty,Null,Boolean,Byte,Integer,Currency,Long,Single,Double,Date(Time),String,Object,Error
5 常数:
For Example: Const MyString="Hello World"
㈡vbs cript的基本语法:
1 运算:
求幂 ^ 负号 - 乘 * 除 / 整除 / 求余 Mod 加 + 减 - 字符串连接 &
等于 = 不等于 <> 小于 < 大于 > 不大于 <= 不小于 >= 对象引用比较 Is
逻辑非 Not 与 And 或 Or 异或 Xor 等价 Eqv 隐含 Imp
2 循环语句:
Do … Loop 当条件为真时结束循环
While … Wend 当条件为真时进行循环
For … Next 指定循环次数,使用计数器重复运行语句
For Each … Next 对集合中的每一项或者数组中的每个元素重复执行
3 条件语句:
If … Then … Else
Select Case
4 对象:
标签对象:<OBJECT> </OBJECT>
Dictionary对象:
For Example:
Dim diTom
Set diTom=CreateObject("s cripting.Dictionary")
diTom.add "name","Tom Martiner"
diTom.add "Address","2223 Road"
nn=diTom.Item("name")
Err对象:
属性:Des cription Number Source
Helpfile HelpContext
方法:Raise Clear
5 陷阱处理:
On Error Resume Next
㈢ vbs cript的函数:
1 数学函数:
反正切 Atn(num) 余弦 Cos(num) 正弦 Sin(num) 正切 Tan(num)
绝对值 Abs(num) 自然对数 Log(num) 随机数 Rnd() 符号 Sgn(num)
平方根 Sqr(num) 以e为底的指数 Exp(num)
2 格式转化函数
Cbool(exp) 转化为逻辑型
Cbyte(exp) 转化为单字节型
Cdate(exp) 转化为日期型
CDbl(exp) 转化为双字节型
Chr(exp) 转化为一个字符
CInt(exp) 转化为整数型
CLng(exp) 转化为长整型
CSng(exp) 转化为单精度型
CStr(exp) 转化为字符串型
Hex(exp) 转化为16进制字符
Int(exp) 转化为取整结果 For Example :1.6à1 -1.6à-2
Fix(exp) 转化为取整结果 For Example:1.6à1 -1.6à-1
Oct(exp) 转化为8进制
Val(exp) 转化为一个数
3 字符串操作函数:
Asc(s) InStr(s1,s2) Lcase(s) Left(s,num) Ltrim(s)
Mid(s,start,len) Right(s,num) Str(num) Rtrim(s) StrComp(s1,s2)
String(len,char) Trim(s) Ucase(s)
4 时间日期函数:
Date() Time() Now()
DateSerial(year,month,day) TimeSerial(hour,minute,second)
DateValue(string) TimeValue(string)
Year(Date) Hour(Time)
Month(Date) Minute(Time)
Day(Date) Second(Time)
WeekDay(Date)
5 变体子类型:
IsArray(var)IsDate(var) IsEmpty(var) IsNull(var) IsNumber(var) IsObject(var) VarType(var)
二、ASP基础知识
ASP文件是一个文本文件,其后缀名为asp.一个ASP文件主要以下三部分内容构成:
1 HTML标记
2 VBScritp或Js cript语言的程序码
3 ASP语法
㈠ 基本语法:
1 用<% %>来区别服务器端ASP脚本和其它字符.
2 用<s cript RunAt="Server"> </s cript> 来区别服务器端脚本和其它字符
3 声明脚本语言:
<%@ LANGUAGE=vbs cript%>
或者:
<s cript language="Js cript" runat="server"> </s cript>
两种方法的区别:
<s cript>标记的语言会立即执行(WEB页被载入时)
<% %>标记的语言在它所在的位置执行
4 HTML文件中应用 ASP变量
<%=变量或常量%>
5 split函数的使用:
For Example:
<%
public namearray
qname="Wang;Zhang;Ning"
response.write qname & "<p><br>"
namearray=split(qname,";") '把qname字符串以分号分开,然后赋给一个数组
max=ubound(namearray)
for counter=0 to max-1
response.write namearray & "<p><br>"
next
response.write "<hr>"
%>
6 动态生成服务器端脚本:
For Example:
<%
S="Sub Hi" & vbCrLf
S=S & "response.write ""Hi"" & vbCrLf
S=S & "End Sub"
Execute S
Call Hi()
%>
㈡ 使用SSI (Server-Side Include)
1 功能:
#config 指定返回到浏览器的错误消息/日期和文件大小所使用的格式
#echo 在html页中插入环境变量的值
#exec 运行一个应用程序或一条shell命令并将输出插入到html页中
#flastmod 将文件的修改日期插入到html页中
#fsize 将文件大小插入到html页中
#include 在html或asp页中包含文件
2 #include指令(在服务器格式化页面时就执行)
<!--#include virture/file=path|file-->
For Example:
<!--#include file="Sunday.html"-->
3 #exec 指令
可以运行的程序可以是 : CGI程序,ASP应用程序,ISAPI应用程序.
路径是完整的虚拟路径或者URL
向应用程序传递参数的方法是在该应用程序名称的后面跟一个问号和由加号连接起来的一列参数,该指令只能在html页中使用,不能在ASP页中使用.
参数CGI用于运行一个应用程序,如CGI脚本/ASP或ISAPI应用程序
参数CMD用于运行shell命令
4 #fsize 指令
只能在html页中使用,单位是KB
5 #config指令
只能在html页中使用用于指定返回给客户端浏览器的错误信息/日期/文件大小等的格式.
ERRMSG参数: <!--#config errmsg="You are wrong"-->
TIMEFMT参数:
%a 一周中某天的缩写,如:Mon
%A 一周中某天的全称,如:Monday
%b 月份的缩写,如:Feb
%B 月份的全称,如:Februrary
%c 当地的日期和时间表示,如:05/06/91 12:51:32
%d 一个月中的某一天(01~31)
%H 24小时格式(00~23)
%I 12小时格式(01~12)
%j 一年中的某一天(001~366)
%m 月份(01~12)
%M 分钟(00~59)
%p 当地的上午或下午的指示符,如:PM
%S 秒(00~59)
%U 一年中的某一周,星期日作为一周的开始(00~51)
%w 一周中的某一天,星期日是第一天(0~6)
%W 一年中的某一周,星期一作为一周的开始(00~51)
%x 当地的日期表示,如:05/06/91
%X 当地的时间表示,如:1:51:32
%y 不带世纪的年,如:96
%Y 带世纪的年,如:1996
%z,%Z 时区全称或缩写,如果不知道时区,则没有字符
%% 百分号
SIZEFMT参数:
<!-- #config sizefmt="bytes" --> '以千字节为单位
6 .inc文件
include file
三ASP的对象(Request,Response,Server,Application,Session)
五种基本对象:
Request Object
Response Object
Server Object
Application Object
Session Object
㈠ Request:
属性:无
集合:QueryString,Form,Cookies,ServerVariable
作用:读取提交表单中的数据或者cookies中的数据
1 QueryString
当用户在Form中使用GET方法传送数据时,用户提交的数据被附在查询字符串(QueryString)中,一起被提交到服务器端指定的文件,QueryString集合的作用是从查询字符串中读取用户提交的数据
也可以不是用Form作为浏览器端的输入,可以直接使用语句:
<a href="time.asp?time=<%=Server.URLEcode(Now())%>"> </a>
For Example(Form used as the input tools):
Browser:
<form action="hometown.asp" method="GET" name="hometown">
please input all the cities you have lived:
<input type="text" name="city">
<input type="text" name="city">
<input type="text" name="city">
<input type="submit" >
</form>
Server:(hometown.asp)
<%
for each item in request.querystring("hometown")
response.write item
next
%>
2 Form
当浏览器端使用POST方法将html表单提交给服务器时,表单元素可以作为form集合的成员来检索,这种办法传送的数据比用QueryString要多,所以常用这种办法.
注意:Request.Form.Count表示表单中被提交的数目
Request.Form("hobby").Count表示同名("hobby")的表单域被提交的数目
3 Cookies
4 ServerVariable
用于提供有关随着http请求一起传递的http头信息,浏览器的请求和服务器的响应都含有headers.使用格式Request.ServerVariable("key")
keys useful as follows:
AUTH_TYPE:当用户访问一个被保护的脚本时,判断是否为一个有效的用户
CONTENT_LENGTH:客户端所提交的正文的长度
CONTENT_TYPE:正文数据的类型
GATEWAY_INTERFACE:服务器端使用的CGI修订版本,格式:CGI/修订版本
LOGON_USER:用户是否是一Windows NT的帐户登录的
PATH_INFO:客户端的路径信息,用户可以通过物理路径和PATH_INFO来访问脚本
QUERY_STRING:在一个HTTP请求中的查询信息.就是?以后的部分
REMOTE_ADDR:包括了发送请求的远程主机的IP 地址
REMOTE_HOST:发送请求的远程主机名
REQUEST_METHOD:数据请求的方法,可以是:GET,POST,HEAD等
s cript_MAP:给出URL的基本部分
s cript_NAME:当前用户访问的页面(文件)的相对路径
SERVER_NAME:该服务器的名称DNS的别名,其IP及自己指定URL路径
SERVER_PORT:数据请求所使用的端口号
SERVER_PORT_SECURE:端口的安全性.如果数据请求所使用的端口被保护则,返回"1"(是字符不是数字)
SERVER_PROTOCOL:要求信息的协议及修订版本
SERVER_SOFTWARE:服务器端运行的软件名称及版本号
URL:得到系统URL路径
HTTP_REFERER:到达当前页的来源(是从哪个网页连过来的)
HTTP_USER_AGENT:用户浏览器的类型
PATH_TRANSLATED:当前ASP的真实路径
HTTP_UA_COLOR:浏览器可以显示多少中颜色
HTTP_UA_CPU:浏览器所在的机器的CPU型号
HTTP_UA_OS:浏览器所在的机器的操作系统
HTTP_UA_PIXELS浏览器所在的机器的电脑分辨率
㈡ Response:
属性: Buffer , Cookies , ContentType , Expires , ExpiresAbsolute ,
Status , IsClientConnected , CacheControl
方法: Write , Redirect , End , Flush , Cookies , BinaryWrite , AddHeader
AppendToLog
作用:向浏览器输出文本/数据和cookies以及控制在传送网页过程中的每一个阶段
1 Buffer属性:
指定或得到页面输出时是否需要缓冲区,设置语句应该放在整个文件的最前面
2 ContenType属性:
"text/html" "image/gif" "application/msword" "text/rtf"
3 Expires属性:
用于设置浏览器缓冲区的时间长度(分)
设置 expires=0 时将要求每次请求是刷新页面,因为response一收到就会过期
4 ExpiresAbsolute属性:
如:<%response.expiresabsolute=#oct 1,1999 00:00:00#%>则1999年10月1日 为截止日期
5 Status属性:
传递服务器HTTP Response 的状态.
1xx:
2xx:
3xx:如 301表示主页已经转移到了其它地址
4xx:如 404 表示所请求的主页是不存在的
5xx:如 503表示当前服务器遇到了无法应付的错误
For Example:
如果有人要访问一个过期的主页,就response.status="401 没有授权"
6 IsClientConnected属性:
For Example:
<%
dim i
i=1
while i=1
response.write("hello world")
if not response.isclientconnected then response.end
wend
%>
7 CacheControl属性:
response.cachecontrol="public"将允许代理服务器把ASP放如缓存.
8 Write 方法:
要输出"%>"时,用"%/>"转义字符代替.
<%
fontcolor="green"
response.write "<font color=<%=fontcolor%/>>ou are well</font>"
%>
应该为:
<%
fontcolor="green"
response.write "<font color="& fontcolor &">you are well</font>
%>
9 Clear 方法:
如果Response的Buffer 属性被设置成True 则此方法会清除所有缓存区页面.
10 Flush 方法:
当调用Flush方法时,缓存的服务器Response 输出信息会立即发送到客户.和Clear方法一样,如果没有事先设定response.buffer=true则会出现一个运行模式的错误.
11 End 方法:
用于告知Active Server当遇到该方法时立即停止处理ASP文件,如果buffer=true则将缓存的内容发送到客户,然后清除缓冲区,所以如果要取消向用户的输出,可以先清楚缓冲再用此方法.
12 BinaryWrite 方法:
用来向HTTP输出写入二进制信息,通常要与某种需要接受特殊非字符信息的定制客户应用程序一起使用.
13 AddHeader 方法:
用于增加带有一个要发送到客户应用程序的特殊HTTP头.
14 AppendLog 方法:
在Web服务器日志的末尾为这种特殊的要求增加一个表项.
字符最大长度80,不能用逗号分割.
15 Cookies 集合:
属性:
ExpiresAbsolute:设置为一个日期,过了就无法再使用该Cookie
Domain:定义该Cookie要传送的唯一的域.如:
Response.cookies("domain")="www.microsoft.com"
Path:定义了Cookie只发给指定路径的请求,如果没有被设置,则使用应用软件的缺省路径
Secure:指定该Cookie能否被客户读取
HasKeys":如果所请求的Cookie是一个具有多个键值的Cookie字典,则返回True ,它是一个只读属性
写Cookie:
response.cookies("cookie名称")[("键名值").属性]=内容(数据)
读 Cookie:
request.cookies("cookie名称")[("键名值").属性]=内容(数据)
Cookie字典:
㈢ Server:
属性:s criptTimeOut
方法:CreateObject , MapPath , URLEcode , HTMLEcode
作用:创建COM对象和s cripting组件等
1 s criptTimeOut 属性:
指定一个脚本的延时期限(秒)
2 HTMLEcode 方法:
3 URLEcode方法:按照URL的格式输出
4 MapPath 方法:返回指向特定文件的相对路径或物理路径
5 CreateObject 方法:
㈣ Application:
属性:无
方法: Lock , Unlock
作用:用于存放同一应用程序多个用户之间的共享信息
1 Application没有内置属性,可以自行创建属性
Application("属性名")=值
或者:
Application.Contents("属性名")=值
2 先Application.Lock
再 Application.Unlock
解决并发问题
3 Application_OnStart()
Application_OnEnd()
定义在global.asa文件中
㈤ Session:
属性:SessionID , TimeOut
方法:Abandon
作用:为单个用户保持数据
1 是指访问者从到达某个特定的主页知道离开为止的那段时间,每个访问者都会获得一个Session,弥补了HTTP的在连续响应上的差距
2 SessionID属性:当前会话的唯一标志符,自动分配.
3 TimeOut属性:用户Session的时间限制(分),默认20
4 自定义属性:
Session("属性名")=值
5 Session_OnStart()
Session_OnEnd()
定义在global.asa 文件中
6 Abandon 方法:
消除用户的Session对象并释放其所占有的资源
㈥global.asa:
文件的结构:
<s cript language=vbs cript runat=server>
Sub Application_OnStart()
End Sub
Sub Application_OnEnd()
End Sub
Sub Session_OnStart()
End Sub
Sub Session_OnEnd()
End Sub
</s cript>
四、ASP数据库连接
使用Active Data Object(ADO)进行数据库的连接.
1 开始使用ADO:
在ODBC数据源管理器中,选择系统DSN,"添加",~~~~
2 ADOVBS.INC文件:
<!-- #include virtual="/aspsamp/samples/adovbs.inc" -->
3 Connection对象:
连接:
set con=Server.CreateObject("ADODB.Connection")
con.Open "DSN=<dsnname>;UID=<uid>;PWD=<pwd>"
|[con.ConnectionString=" DSN=<dsnname>;UID=<uid>;PWD=<pwd>"
con.Open]
con.Close '关闭
事务操作:
方法:BeginTrans,CommitTrans,RollbackTrans,
Execute
Set myRecordset=con.Execute(CommandText,RecordAffected,options)
'后两项可选
4 Recordset对象:
<%
set myRecordset=Server.CreateObject(ADODB.Record)
sql="select * from student"
myRecordset.Open sql," " DSN=<dsnname>;UID=<uid>;PWD=<pwd>"
%>
<table border=1>
<tr>
<%
for co=1 to myRecordset.Fields.Count-1
%>
<td><%=myRecordset(co).name%></td>
<%
next
%>
</tr>
<%
do while not myRecordset.BOF
%>
<tr>
<%
for coco=0 to myRecordset.Count-1
%>
<td><%=myRecordset(coco)%></td>
<%
next
%>
</tr>
<%
myRecordset.MoveNext
Loop
%>
</table>
记录游标移动的属性:
BOF,EOF 判断是否是首记录或末记录
RecordCount 返回Recordset中的记录数
Pagesize 当记录集返回到Recordset中时,会被划分为任意大小的页,可以分页显示记录集合
AbsolutePage 在分页显示数据时,把你想要的那一页赋值给它
PageCount 返回页数
数据库的维护:
EditMode: 0该记录当前已经被编辑;1已被修改但是未提交到数据源
2当前记录为存入数据库的新记录
Status: 0 记录更新成功; 1 新记录; 2记录被修改;4记录被删除
8记录未被修改; 256 操作被取消,记录未保存
1024 存在记录锁定,新记录未保存; ~~~~~~~~
方法:
Open [source],[ActiveConnection],[CursorType],[LockType],[Option]
Close
Clone 创建Recordset的一个完全拷贝
MoveFirst
MoveLast
MoveNext
MovePrevious
Move <要移动的记录数> 相对当前记录而言
GetRows(rows,startr,fields) 把数据从数据源取出,存入一个数组
NextRecordSet 清除当前的Recordset并且把复合声明中的下一条命令返回给Recordset对象,如果没有下一条命令,则返回nothing
ReQuery 重新运行第一次创建的Recordset的命令或者声明
Resync 和上一个不同的是:它不再运行Recordset本身,而从数据源取出Recordset中已经存在的记录可以看到其它用户修改过的记录.参数:
1 只从数据源新当前的记录
2 表示只有包含在Recordset当前filter中的记录才被刷新
3 默认值,查看所有记录
AddNew 增加新记录
Delete 删除当前记录
Update <fieldname>,<newvalue>
CancelUpdate 取消在调用Update以前所做的一切修改