仓酷云

标题: ASP教程之Asp深度揭密 [打印本页]

作者: 乐观    时间: 2015-1-16 22:37
标题: ASP教程之Asp深度揭密
问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.1、Asp基础常识

1.Asp是ActiveServerPages的简称,是注释型的剧本言语情况;
2.Asp的运转必要Windows操纵体系,9x下必要安装PWS;而NT/2000/XP则必要安装InternetInformationServer(简称IIS);
3.Asp和JSP的剧本标签是“<%%>”,PHP的则能够设定为多种;
4.Asp的正文标记是“”;
5.利用附加组件,能够扩大Asp的功效。

例子:

HelloWorld_1.asp
<%="Hello,world"%>

效果:
Hello,world


HelloWorld_2.asp
<%
fori=1to10
response.write"Hello,world"
next
%>

效果:
Hello,world
Hello,world
Hello,world
Hello,world
Hello,world
Hello,world
Hello,world
Hello,world
Hello,world
Hello,world

注重:Asp不辨别巨细写;变量无需界说也可以使用,转换便利;语法反省很松。


2、Asp内置工具的利用:

可使用上面的任何ASP内置工具,而不用在ASP剧本中出格声明。

1.Request:

界说:可用来会见从扫瞄器发送到服务器的哀求信息,可用此工具读取已输出HTML表单的信息。

集:
Cookies:含有扫瞄器cookies的值
Form:含有HTML表单域中的值
QueryString:含有查询字符串的值
ServerVariables:含有头和情况变量中的值

例子:

request_url.asp
<%
猎取用户输出,并存进变量
user_id=request.querystring("user_id")
user_name=request.querystring("user_name")

判别用户输出是不是准确
ifuser_id=""then
response.write"User_idisnull,pleasecheckit"
response.end
endif
ifuser_name=""then
response.write"User_nameisnull,pleasecheckit"
response.end
endif

打印变量
response.writeuser_id&"<br>"
response.writeuser_name
%>

效果:
当会见http://10.1.43.238/course/request_url.asp?user_name=j时:
User_idisnull,pleasecheckit
当会见http://10.1.43.238/course/request_url.asp?user_name=j&user_id=my_id时:
my_id
j

思索:变量是怎样在URL中传送和被Asp页面猎取的?


request_form.htm
<styletype="text/css">
<!--
.input{background-color:#FFFFFF;border-bottom:black1pxsolid;border-left:black1pxsolid;border-right:black1pxsolid;border-top:black1pxsolid;color:#000000;font-family:Georgia;font-size:9pt;color:midnightblue;}
a:link{color:#1B629C;text-decoration:none}
a:hover{color:#FF6600;text-decoration:underline}
a:visited{text-decoration:none}
-->
</style>

<center>
<formname="course"action="request_form.asp"method="post">
User_id:<inputtype="text"name="user_id"maxlength="20"class="input"><br><br>
User_name:<inputtype="text"name="user_name"maxlength="30"class="input">
</form>
<br><br>
<ahref="javascript:document.course.submit();">提交</a>
</center>

request_form.asp
<%
猎取用户输出,并存进变量
user_id=request.form("user_id")
user_name=request.form("user_name")

判别用户输出是不是准确
ifuser_id=""then
response.write"User_idisnull,pleasecheckit"
response.end
endif
ifuser_name=""then
response.write"User_nameisnull,pleasecheckit"
response.end
endif

打印变量
response.writeuser_id&"<br>"
response.writeuser_name
%>

注重:form的action的指向,request_form.asp和request_url.asp在源代码上的区分?

2.Response:

界说:用来向扫瞄器回发信息,可用此工具从剧本向扫瞄器发送输入。

集:
Cookies:在扫瞄器中到场一个cookie

办法:
End:停止剧本的处置
Redirect:将扫瞄器引诱至新页面
Write:向扫瞄器发送一个字符串

属性:
Buffer:缓存一个ASP
CacheControl:由代办署理服务器把持缓存
ContentType:划定呼应的内容范例
Expires:扫瞄器用绝对工夫把持缓存
ExpiresAbsolute:扫瞄器用相对工夫把持缓存

例子:

response_redirect.asp
<%
往google看看吧
response.redirect"http://www2.google.com"
response.end
%>


response_cookies.asp
<%
设置和读取cookies
response.cookies("time_now")=now()
response.writerequest.cookies("time_now")
%>

效果:
当会见http://10.1.43.238/course/response_cookies.asp时:
2002-9-116:20:40


response_buffer.asp
<%response.buffer=true%>
<ahref="a">a</a>
<%response.redirect"request_form.htm"%>

效果:
①.当封闭IIS的缓冲功效,会见该页面时堕落
a
回复工具毛病ASP0156:80004005
头错
/course/response_buffer.asp,行3
HTTP头已写进到客户扫瞄器。任何HTTP头的修正必需在写进页内容之前。
②.当封闭IIS的缓冲功效,往失落文件第一行的正文,则页面重定向乐成
③.当翻开IIS的缓冲功效,不管是不是往失落文件第一行的正文,页面重定向都乐成

3.Server

界说:可在服务器上利用分歧实体函数,如在工夫抵达前把持剧本实行的工夫。还可用来创立其他工具。

办法:
CreateObject:创立一个工具实例
HTMLEncode:将字符串转化为利用出格的HTML字符
MapPath:把假造路径转化成物理路径
URLEncode:把字符串转化成URL编码的
ScriptTimeout:在停止前,一个剧本同意运转的秒数

例子:

server_htmlencode.asp
<%
htmlencode
response.writeserver.htmlencode("a""time_now")
%>

效果:
a"time_now
检察源文件时显现为:a"time_now

思索:为何不是a""time_now这类效果?源文件是怎样了?


server_mappath.asp
<%
mappath
response.writeserver.mappath("server_mappath.asp")
%>

效果:
G:asp_www        estcourseserver_mappath.asp

思索:怎样猎取站点根目次的实践路径?怎样猎取某个目次的实践路径?


server_urlencode.asp
<%
urlencode
response.writeserver.urlencode("a        ime_now")
%>

效果:
a%5Ctime%5Fnow

4.Application

界说:用来存储、读取用户共享的使用程序信息,如能够用此工具在网站的用户间传送信息,当服务重视启后信息丧失。

办法:
Lock:避免别的用户会见Application集
Unlock:使别的用户能够会见Application集

事务:
OnEnd:由停止收集服务器、改动Global.asa文件触发
OnStart:由使用程序中对网页的第一次请求触发

例子:

application_counter.asp
<%
一个利用Application制造的复杂计数器
Application.lock
Application("clicks")=Application("clicks")+1
Application.unlock

response.write"您是本站第"&Application("clicks")&"位访客!"
response.write"<br><br>您来自"&request.servervariables("remote_addr")
%>

效果:
您是本站第1位访客!

您来自10.1.43.238

思索:本例中lock和unlock有何感化?

5.Session

界说:存储、读取特定用户对话信息,如可存储用户对网站的会见信息,当服务重视启后信息丧失。

办法:
Abandon:处置完以后页面后,停止一个用户会话

属性:
Timeout:用户会话延续工夫(分钟数)

事务:
OnEnd:在SessionTimeout工夫之外,用户不再请求页面触发该事务
OnStart:由用户对网页的第一次请求时触发

例子:

session_counter.asp
<%
一个利用Session制造的复杂计数器
session("clicks")=session("clicks")+1

response.write"您是本站第"&session("clicks")&"位访客!"
response.write"<br><br>您来自"&request.servervariables("remote_addr")
%>

效果:
您是本站第1位访客!

您来自10.1.43.238

思索:既然session和application都能做到计数,那它们之间有甚么区分?假如要做到满100从头入手下手计数怎样完成?
3、利用Asp操纵数据库:

1.经由过程ODBC大概OLE体例毗连的区分?

如今有两种毗连数据库的办法。一方面,能够用ODBC发生一个毗连,这类毗连与任何有ODBC驱动器的数据库(即基础上是市场上一切的数据库)兼容;另外一方面,能够用原始OLEDB供应商发生一个毗连。

该用哪一个供应商?尽量用原始OLEDB供应商,由于它供应了对数据更无效的会见。Microsoft正慢慢用OLEDB代替ODBC尺度,应当仅仅在没有原始OLEDB供应商时利用ODBC。

⑴.用ODBC体例毗连SQLServer:
①.设置ODBC
②.毗连代码:
conn_odbc.asp
<%
SetConn=Server.CreateObject("ADODB.Connection")
Conn.Open"DSN=course_dsn;UID=course_user;PWD=course_password;DATABASE=course"
Conn.Open"course_dsn","course_user","course_password"
%>
注重:在设置MyDSN时若指定默许数据库为course则上述代码感化想同,不然第二行的毗连体例更有天真性,能够指定毗连某个数据库(固然,条件是course_user对这个数据库有操纵权限)。

⑵.用OLE体例毗连SQLServer:
conn_ole.asp
<%
SetConn=Server.CreateObject("ADODB.Connection")
Conn.Open"PROVIDER=SQLOLEDB;DATASOURCE=10.1.43.238,2433;UID=course_user;PWD=course_password;DATABASE=course"
%>

2.操纵数据库:Connection和Recordset

团结利用connection和recordset操纵数据库,大概只利用connection操纵数据库。

例子:

⑴.团结利用connection和recordset操纵数据库

use_db_1.asp
<%
Setconn=Server.CreateObject("ADODB.Connection")创立毗连数据库的工具
conn.Open"course_dsn","course_user","course_password"利用该工具毗连数据库
Setrs=Server.CreateObject("ADODB.RecordSet")创立纪录集工具
rs.Open"select*fromuser_info",conn,1,1利用纪录集工具翻开数据库
ifrs.recordcount>0then假如有纪录
response.write"User_idUser_name<br>"
fori=1tors.recordcount轮回读取一切记录
response.writers("id")&""&rs("user_name")&"<br>"
向扫瞄器输入记录的字段
rs.movenext指针下移一行
ifrs.eofthenexitfor假如抵达纪录集底部则加入轮回
next
endif
%>

效果:
User_idUser_name
1ahyi
3test


⑵.只利用connection操纵数据库:

use_db_2.asp
<%
Setconn=Server.CreateObject("ADODB.Connection")创立毗连数据库的工具
conn.Open"course_dsn","course_user","course_password"利用该工具毗连数据库
conn.execute"deletefromuser_info"
%>

效果:
user_info表中一切数据被删除

思索:两种体例有和区分?各使用于甚么场所?

3.怎样利用事件处置、存储历程和视图?

⑴.利用存储历程

①.界说好存储历程

CREATEPROCEDURE[output_1]
@sidintoutput
AS
set@sid=2

CREATEPROCEDURE[return_1]
(@user_namevarchar(40),@passwordvarchar(20))
AS
ifexists(selectidfromuser_infowhereuser_name=@user_nameandpassword=@password)
return1
else
return0

CREATEPROCEDURE[user_info_1]
(@user_namevarchar(40),@passwordvarchar(20))
AS
selectidfromuser_infowhereuser_name=@user_nameandpassword=@password

CREATEPROCEDURE[user_info_2]
(@user_namevarchar(40),@passwordvarchar(20))
AS
SETXACT_ABORTON
BEGINTRANSACTION
deletefromuser_infowhereuser_name=@user_nameandpassword=@password
COMMITTRANSACTION
SETXACT_ABORTOFF

CREATEPROCEDURE[user_info_3]AS
select*fromuser_info

②.在Asp中挪用

use_proc.asp
<!--#includevirtual="/adovbs.inc"-->
<%
Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"course_dsn","course_user","course_password"

利用recordset挪用带两个输出参数和前往记录集的存储历程
CREATEPROCEDURE[user_info_1]
(@user_namevarchar(40),@passwordvarchar(20))
AS
selectidfromuser_infowhereuser_name=@user_nameandpassword=@password
response.write"一般的挪用办法:<br>"
setrs=server.createobject("adodb.recordset")
sql="user_info_1"&request.querystring("user_name")&","&request.querystring("password")&""
rs.opensql,conn,1,1
response.writers("id")&"<br>"
rs.close

利用recordset挪用无输出参数,前往记录集的存储历程,可使用recordcount等属性
CREATEPROCEDURE[user_info_3]AS
select*fromuser_info
response.write"<br>前往记录集,可使用recordcount等属性:"
sql="execuser_info_3"
rs.opensql,conn,1,1
fori=1tors.recordcount
response.write"<br>"&rs("user_name")
rs.movenext
next
rs.close
setrs=nothing

利用command挪用带输入参数的存储历程
CREATEPROCEDURE[output_1]
@sidintoutput
AS
set@sid=2
response.write"<br><br>挪用带输入参数的存储历程:<br>"
setcmd=server.createobject("adodb.command")
cmd.activeconnection=conn
cmd.commandtext="output_1"
cmd.parameters.appendcmd.createparameter("@sid",adinteger,adparamoutput)
cmd("@sid")=10
cmd.execute()
bbb=cmd("@sid")
response.writebbb&"<br>"
setcmd=nothing

利用command挪用带两个输出参数和前往值的存储历程
CREATEPROCEDURE[return_1]
(@user_namevarchar(40))
AS
ifexists(selectidfromuser_infowhereuser_name=@user_name)
return1
else
return0
response.write"<br>挪用带两个输出参数和前往值的存储历程:<br>"
setcmd=server.createobject("adodb.command")
cmd.activeconnection=conn
cmd.commandtype=adcmdstoredproc
cmd.commandtext="return_1"
cmd.parameters.appendcmd.createparameter("@return_value",adinteger,adparamreturnvalue)
cmd.parameters.appendcmd.createparameter("@user_name",advarchar,adparaminput,40)
cmd.parameters.appendcmd.createparameter("@password",advarchar,adparaminput,20)
cmd("@user_name")="tuth"
cmd("@password")="yyuyu"
cmd.execute()
rrr=cmd("@return_value")
response.writerrr
setcmd=nothing

conn.close
setconn=nothing
%>

效果:
会见http://10.1.43.238/course/use_proc.asp?user_name=ahyi&password=ttt时,呈现以下

一般的挪用办法:
12

前往记录集,可使用recordcount等属性:
ahyi
tet
tuth

挪用带输入参数的存储历程:
2

挪用带两个输出参数和前往值的存储历程:
1

注重:若存储历程无参数,则挪用的sql语句间接为存储历程名,一个参数为“存储历程名参数”,如果多个参数,则“存储历程名参数1,参数2,……,参数n”;假如在sql语句中到场exec,则在前往的纪录会合可使用recordcount等属性;假如想取得存储历程的前往值或输入参数,可使用command工具。

⑵.利用事件处置

①.Asp内嵌的事件撑持

例子:
use_transaction_1.asp
<%
Asp中利用事件
Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"course_dsn","course_user","course_password"
conn.begintrans入手下手事件

sql="deletefromuser_info"
setrs=server.createobject("adodb.recordset")
rs.opensql,conn,3,3
ifconn.errors.count>0then有毛病产生
conn.rollbacktrans回滚
setrs=nothing
conn.close
setconn=nothing
response.write"买卖失利,回滚至修正前的形态!"
response.end
else
conn.committrans提交事件
setrs=nothing
conn.close
setconn=nothing
response.write"买卖乐成!"
response.end
endif
%>

②.数据库级的事件

i.创立存储历程

CREATEPROCEDURE[user_info_2]
(@user_namevarchar(40),@passwordvarchar(20))
AS
SETXACT_ABORTON
BEGINTRANSACTION
deletefromuser_infowhereuser_name=@user_nameandpassword=@password
COMMITTRANSACTION
SETXACT_ABORTOFF

ii.在Asp中挪用

use_transaction_2.asp
<%
Setconn=Server.CreateObject("ADODB.Connection")
conn.Open"course_dsn","course_user","course_password"

sql="user_info_2"&request.querystring("user_name")&","&request.querystring("password")&""

setrs=server.createobject("adodb.recordset")
rs.opensql,conn,1,1
setrs=nothing
conn.close
setconn=nothing
%>

会商:两种体例的好坏?

⑶.利用视图
在数据库中界说好视图以后,在Asp中好像利用一个表一样来利用视图

4.一个数据库分页的例子

db_page.asp
<%
onerrorresumenext
Setconn=Server.CreateObject("ADODB.Connection")创立毗连数据库的工具
conn.Open"course_dsn","course_user","course_password"利用该工具毗连数据库
setrs=server.createObject("adodb.recordset")
sql="select*fromuser_infoorderbyiddesc"
rs.opensql,conn,1,1

ifrs.recordcount>0then假如有纪录
rs.pagesize=2每页最多显现2条记录
从URL猎取以后要显现的页
page=cint(request("page"))
页面参数非常处置
ifpage=""thenpage=1
ifpage<1thenpage=1
ifpage>=rs.pagecountthenpage=rs.pagecount
rs.absolutepage=page以后页为page参数指定的页
fori=1tors.pagesize依据pagesize参数的巨细轮回显现以后页中的记录
response.write"User_id:"&rs("id")&"<br>"
response.write"User_name:"&rs("user_name")&"<br><br>"
rs.movenext记录指针下移
ifrs.eofthenexitfor假如抵达记录集底部则加入轮回
next
endif

显现翻页按钮
ifpage>1then
response.write"<ahref="&request.servervariables("document_name")&"?page=1>第一页</a> "
response.write"<ahref="&request.servervariables("document_name")&"?page="&(page-1)&">上一页</a> "
endif
ifpage<>rs.pagecountthen
response.write"<ahref="&request.servervariables("document_name")&"?page="&(page+1)&">下一页</a> "
response.write"<ahref="&request.servervariables("document_name")&"?page="&rs.pagecount&">最初一页</a> "
endif
response.write"页码:"&page&"/"&rs.pagecount

封闭工具,开释内存
rs.close
setrs=nothing
conn.close
setconn=nothing
%>

思索:分页过程当中利用了哪些分外的属性?
4、Asp组件的开辟与利用:

1.组件的特性?

l长处:
n挪用便利,节俭代码
n平安性高
n撑持事件处置,多组件团结
n运转速率快
n晋级、修正组件不需修正页面,因而扩大性好
l弱点:
n开辟及调试坚苦

2.怎样利用VB开辟?

⑴.翻开VB>>NewProject>>ActiveXDLL

⑵.修正项目称号为course


⑶.修正类模块的名字为conn_db


⑷.Project>>References,援用COM+ServiceTypeLibrary和MicrosoftActiveServerPagesObjectLibrary。

⑸.修正类代码以下:

创建数据库毗连并输入数据库字段
DimResponseAsResponse
DimRequestAsRequest
DimServerAsServer
DimApplicationAsApplication
DimSessionAsSession

PrivateSubClass_Initialize()
DimobjContextAsObjectContext
SetobjContext=GetObjectContext()
SetResponse=objContext("Response")
SetRequest=objContext("Request")
SetServer=objContext("Server")
SetApplication=objContext("Application")
SetSession=objContext("Session")
EndSub

Subconn_db()
Setconn=CreateObject("adodb.connection")
conn.open"course_dsn","course_user","course_password"
Setrs=CreateObject("adodb.recordset")
rs.open"select*fromuser_info",conn,1,1

Ifrs.recordcount>0Then
Fori=1Tors.recordcount
Response.write"<br>"&rs("user_name")&"<br>"
Ifrs.EOFThenExitFor
rs.movenext
Next
EndIf
rs.Close
Setrs=Nothing
conn.Close
Setconn=Nothing
EndSub

⑹.增加一新类cutstr

⑺.修正类代码以下:

截取字符串
Functioncutstr(str,length)
IfLen(str)>lengthThen
cutstr=Left(str,length)&"..."
Else
cutstr=str
EndIf
EndFunction

⑻.File>>Save

⑼.File>>makecourse.dll

3.注册组件:MTS和regsvr32.exe

有两种体例注册组件:MTS和利用regsvr32.exe。MTS是值得保举的,由于它具有以下长处:
n静态卸载均衡,进步组件和基于组件的使用程序的晋级性。
n包括发布和提交事务和行列组件的才能,使得更简单与多个组件团结。

要想使组件具有MTS的特征,必需对组件做少量修改。在NT和98下开辟时,必需在项目中援用MicrosoftTransactionServerTypeLibrary,在Windows2000下开辟,必需援用COM+ServiceTypeLibrary。

⑴.regsvr32注册:

regsvr32.exe是system32上面的一个可实行文件,它将组件信息读进注册表,以便Asp挪用。
利用命令行进进组件dll文件地点的目次,实行“regsvr32dll_file_name”便可。


运转regedit,在HKEY_CLASSES_ROOT下就会找到course.conn_db项和course.cutstr项,标明组件注册乐成。


⑵.利用MTS注册:

①.入手下手>>程序>>办理工具>>组件服务

②.睁开目次至以下形态:


③.依照导游,下一步,直到以下对话框,点击“创立一个空的使用程序”:


④.在接上去的对话框中,为使用程序起名为“course”,其他默许,直至完成

⑤.睁开course使用程序,右键,新建一个组件


⑥.依照提醒,持续,呈现以下对话框时,选择“导进已被注册的组件”


⑦.选择我们开辟的组件,下一步,直至完成


⑧.这时候候,能够发明course使用程序下已多了两个组件:


4.在Asp中挪用组件

asp_use_com.asp
<%
asp挪用com组件
setcutstr_obj=server.createobject("course.cutstr")
response.writecutstr_obj.cutstr("abcdefghijk",3)&"<br>"
setcutstr_obj=nothing

setconn_obj=server.createobject("course.conn_db")
conn_obj.conn_db()
setconn_obj=nothing
%>

效果:
abc...

ahyi

tuth

申明挪用乐成。

5.卸载组件

⑴.利用regsvr32注册的组件,利用-u开关卸载:


注重:先辈进组件dll地点的目次,然后利用“regsvr32Cudll_file_name”卸载;卸载后重启IIS便可。

⑵.利用MTS注册的组件,先在“组件服务”中删除对应的使用程序,然后再实行步骤⑴以完全卸载组件。


6.Dll组件寄存地位和权限设定

⑴.我们只必要把编译天生的Dll文件拷贝出来便可,其他的文件不必做处置
⑵.要把Dll放到Web站点以外,如system32目次里,避免被下载
⑶.Dll的文件权设置为System读取,Internet用户遍历文件夹/运转文件
⑷.Dll在IIS中往失落一切的权限,如读取,剧本志愿会见等
经由上述处置,能够确保Dll文件的平安。

7.其他

怎样在组件中利用Asp的工具以便利的将Asp代码移植为COM组件?


5、IIS最优化设置

1.Web站点选项卡:IP、端口、假造主机、毗连、日记
2.ISAPI选择器:到场PHP和JSP撑持
3.主目次设置选项卡:IIS权限设定(分离文件权)、实行允许、使用程序回护、映照、缓冲、父路径、堕落信息
4.其他选项卡:自界说毛病、Http头、目次平安性、文档
5.文件紧缩带来的优点和害处

6、其他

1.发送邮件(JMail;Mssmtp)

利用MicrosoftSmtp发送电子邮件
⑴.安装MicrosoftSMTPService
⑵.设置MicrosoftSMTPService
⑶.代码部分:
mail_smtp.asp
<%
subsendmail(fromwho,towho,subject,body)
dimmymail
setmymail=server.createobject("cdonts.newmail")
mymail.from=fromwho
mymail.to=towho
mymail.subject=subject
mymail.body=body
mymail.send
setmymail=nothing
endsub
%>

该子程序承受4个与以下各条对应的参数。
l邮件发送者的email地点
l邮件吸收者的email地点
l邮件主题
l邮件内容

利用办法:
<%
fromWho=…
toWho=…
Subject=…
Body=…

IFtoWho<>""THEN
sendMailfromWho,toWho,Subject,Body
ENDIF
%>

利用Jmail发送Email
略,有乐趣能够和我切磋,Jmail这个软件我也有。

2.解压Zip文件(Wscript.Shell和Winzipcommandline;Java组件)

⑴.安装Winzip8.1以上
⑵.安装Winzipcommandline
⑶.将事情目次的文件权设置为Internet用户能够读取、写进和修正
⑷.代码部分:
unzip_a_zipfile.asp
<%
用shell工具启动程序
zip_path是详细zip文件的路径,如c:        est.zip
path是寄存解压后文件的路径
ond是命令行参数
setwshshell=server.createobject("wscript.shell")
issuccess=wshshell.run("wzunzip-ond"&zip_path&""&path,1,true)

删除zip文件
setmyfileobject=server.createobject("scripting.filesystemobject")
myfileobject.deletefilezip_path

判别是不是乐成以持续操纵
ifissuccess=0then
乐成
...
else
失利
...
endif
%>

3.操纵XML文件

本次交换工夫无限,偶然间再做具体切磋

4.文件上传

⑴.安装文件上传组件Aspfileup(撑持多文件上传,文件范例及巨细判别,文件上传后更名等)
⑵.重起IIS以使上传组件失效
⑶.设置上传目次的文件权为Internet用户能够读取、写进和修正
⑷.代码部分
upload_file.htm
<styletype="text/css">
<!--
.input{background-color:#FFFFFF;border-bottom:black1pxsolid;border-left:black1pxsolid;border-right:black1pxsolid;border-top:black1pxsolid;color:#000000;font-family:Georgia;font-size:9pt;color:midnightblue;}
a:link{color:#1B629C;text-decoration:none}
a:hover{color:#FF6600;text-decoration:underline}
a:visited{text-decoration:none}
-->
</style>

<center>
<formenctype="multipart/form-data"method="post"action="upload_file.asp"name="Upload">
<inputtype="hidden"name="CopyrightInfo"value="http://www.chinaasp.com">
请选择文件:<inputtype="file"name="file1"class="input"><br><br>
请选择文件:<inputtype="file"name="file2"class="input"><br><br>
</form>
<br><br>
<ahref="javascript:document.Upload.submit();">提交</a>
</center>


upload_file.asp
<%
onerrorresumenext

界说取得文件后缀的函数
functiongetfileextname(filename)
pos=instrrev(filename,".")
ifpos>0then
getfileextname=mid(filename,pos+1)
else
getfileextname=""
endif
endfunction

界说猎取文件正名的函数
functiongetfilename(filename)
lens=len(filename)-len(getfileextname(filename))-1
getfilename=left(filename,lens)
endfunction

创立文件上传组件的工具
setfileup=server.createobject("chinaasp.upload")

轮回读取用户上传的文件,并保留在服务器上
foreachfinfileup.files

当用户没有选择文件或文件巨细凌驾10m时前往到选择上传文件的页面
iff.filename=""orf.filesize>10485500thenresponse.redirect"upload_file.htm"

猎取保留的路径
path=server.mappath("upload_file.asp")
path=left(path,len(path)-15)

保留文件
f.saveaspath&getfilename(f.filename)&"."&getfileextname(f.filename)

next

response.redirect"upload_file.htm"
%>

5.驱动器/目次/文件操纵

本次交换工夫无限,偶然间再做具体切磋

6.Asp编写与调试履历:cookies和session怎样选择、cookies数目圈套、页面过时弛缓冲设定、移植性怎样包管、怎样对付外部服务器500毛病……

1.Cookies和Session的选择:
⑴.配合特性
⑵.分歧的地方:
①.事情体例
②.过时前提
③.对服务器的功能影响

2.Cookies数目圈套:
IIS能够保留一样平常的cookies不凌驾20个,再界说新的Cookies之前的Cookies的值就丧失了,如许对年夜型使用明显范围性十分年夜,怎样办理这个成绩呢?
谜底是利用二维Cookies。

例子:

测试一维Cookies数目极限:
test_cookies_1.asp
<%
fori=1to50
response.cookies("cookies_"&i)=i
next
%>


test_cookies_2.asp
<%
fori=1to50
response.writerequest.cookies("cookies_"&i)&"<br>"
next
%>

效果:
先会见test_cookies_1.asp,再会见test_cookies_2.asp,,发明了甚么?


test_cookies_3.asp
<%
fori=1to50
response.cookies("cookies_"&i)=i
next

fori=1to50
response.writerequest.cookies("cookies_"&i)&"<br>"
next
%>

效果:
没有Cookies丧失!!!!

测试二维Cookies数目极限:
test_cookies_4.asp
<%
fori=1to301
response.cookies("tuht")("cookies_"&i)=i
next
%>


test_cookies_5.asp
<%
fori=1to301
response.writerequest.cookies("tuht")("cookies_"&i)&"<br>"
next
%>

效果:
利用这类体例可使用201*20=4020个Cookies!!!!

3.页面过时弛缓冲设定
<%
过时弛缓冲处置
response.buffer=true
response.cachecontrol="no-chache"
response.expiresabsolute=now()-1
response.expires=0
%>
html中还能够做设定:
<metacontent="no-cache"http-equiv="Pragma">
<metaHTTP-EQUIV="Expires"CONTENT="0">

4.移植性的包管
⑴.包括文件
<!--#includefile="top.asp"-->
⑵.利用server.mappath寻觅文件路径,制止在页面中间接利用相对路径
⑶.只管利用组件封装营业逻辑

5.调试外部服务器500的毛病
⑴.设置IIS显现详细的毛病信息
⑵.分步伐试,由上而下
⑶.打印某些主要的变量的值,反省是不是为我们预期
⑷.依据履历来判别毛病

7.操纵Word文档

⑴.安装Office2000,个中Word2000必选
⑵.设置IE中Internet的平安性:ActiveX控件和插件全体启用
⑶.设置事情目次的文件权为Internet及System读取/修正/写进
⑷.编写模版course.dot
⑸.详细代码:
opr_doc_inc.asp
<%
Response.write"DimVar_Num"&chr(13)
Response.write"Var_Num=2"&chr(13)
Response.write"Dimvarstrings(2)"&chr(13)
Response.write"varstrings(0)="&chr(34)&"草拟人:"&chr(34)&chr(13)
Response.write"varstrings(1)="&chr(34)&"日期:"&chr(34)&chr(13)
Response.write"DimvarValues(2)"&chr(13)
Response.write"varValues(0)="&chr(34)&"草拟人:涂海涛"&chr(34)&chr(13)
Response.write"varValues(1)="&chr(34)&"日期:"&date()&chr(34)&chr(13)
%>

Subinstead(word)
SetmyRange=word.ActiveDocument.Content
fori=0toVar_Num-1
callmyRange.Find.Execute(varStrings(i),false,false,false,false,false,false,false,false,varValues(i),2)
Next
EndSub


opr_doc.asp
<%
猎取保留的路径
path=server.mappath("opr_doc.asp")
path=left(path,len(path)-11)
filenames=path&"test.doc"

w1="word.activedocument.saveAs"&chr(32)&chr(34)&filenames&chr(34)
w2="wApp.Documents.open"&chr(32)&chr(34)&filenames&chr(34)
%>
<scriptlanguage="vbscript">
OnErrorResumeNext
天生指定文件名的Word文档
Dimword
setword=CreateObject("Word.Application")
ifErr.number>0Then
Alert"产生毛病,请确认文件是不是存在"
else
word.visible=False
word.documents.open"<%response.writepath%>course.dot"
<%Response.writew1%>
word.documents.close
setword=nothing
endif

<!--#includefile="opr_doc_inc.asp"-->

DimwApp
SetwApp=CreateObject("Word.Application")
IfErr.number>0Then
Alert"产生毛病,请确认文件是不是准确创立"
else
wApp.visible=True
<%Response.writew2%>
callinstead(wApp)
setwApp=nothing
endif
</script>

效果:看看天生了doc文件吗?这个新建的doc文件和模版文件有甚么区分?草拟人和日期产生了变更了吗?保留一下,看看重生成的doc文件的内容。


附:
1.以上全体代码在Windows2000ServerSP2+IIS5.0+MSSQLServer2000+Office2000下测试经由过程
2.设置数据库:数据库名course,用户course_user,暗码course_password,ODBC驱动为course_dsn,端口为2433,形貌表布局的剧本在共享目次下。
3.Aspfileup、Jmail、Winzip8.1、Winzipcommandline这几个软件请自行下载。
4.数据库剧本文件:
ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[output_1])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[output_1]
GO

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[return_1])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[return_1]
GO

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[user_info_1])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[user_info_1]
GO

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[user_info_2])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[user_info_2]
GO

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[user_info_3])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[user_info_3]
GO

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[user_info])andOBJECTPROPERTY(id,NIsUserTable)=1)
droptable[dbo].[user_info]
GO

CREATETABLE[dbo].[user_info](
[id][int]IDENTITY(1,1)NOTNULL,
[user_name][varchar](40)COLLATEChinese_PRC_CI_ASNOTNULL,
[password][varchar](20)COLLATEChinese_PRC_CI_ASNOTNULL
)ON[PRIMARY]
GO

ALTERTABLE[dbo].[user_info]WITHNOCHECKADD
CONSTRAINT[PK_user_info]PRIMARYKEYCLUSTERED
(
[user_name]
)ON[PRIMARY]
GO

SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSOFF
GO

CREATEPROCEDURE[output_1]
@sidintoutput
AS
set@sid=2
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO

SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSOFF
GO

CREATEPROCEDURE[return_1]
(@user_namevarchar(40),@passwordvarchar(20))
AS
ifexists(selectidfromuser_infowhereuser_name=@user_nameandpassword=@password)
return1
else
return0
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO

SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSOFF
GO

CREATEPROCEDURE[user_info_1]
(@user_namevarchar(40),@passwordvarchar(20))
AS
selectidfromuser_infowhereuser_name=@user_nameandpassword=@password
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO

SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSOFF
GO

CREATEPROCEDURE[user_info_2]
(@user_namevarchar(40),@passwordvarchar(20))
AS
SETXACT_ABORTON
BEGINTRANSACTION
deletefromuser_infowhereuser_name=@user_nameandpassword=@password
COMMITTRANSACTION
SETXACT_ABORTOFF
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO

SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSOFF
GO

CREATEPROCEDURE[user_info_3]AS
select*fromuser_info
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO

asp是基于web的一种编程技术,可以说是cgi的一种。它可以完成以往cgi程序的所有功能,如计数器、留言簿、公告板、聊天室等等。
作者: 分手快乐    时间: 2015-1-19 19:30
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
作者: 老尸    时间: 2015-1-24 22:01
交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。
作者: 因胸联盟    时间: 2015-2-2 13:06
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
作者: 蒙在股里    时间: 2015-2-7 20:42
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
作者: 柔情似水    时间: 2015-2-23 10:37
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
作者: 金色的骷髅    时间: 2015-3-7 08:10
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
作者: 小魔女    时间: 2015-3-14 15:14
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
作者: 若天明    时间: 2015-3-21 10:56
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2