AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > ASP编程

Asp深度揭密(下)

51自学网 http://www.51zixue.net


5.驱动器/目录/文件操作

本次交流时间有限,有时间再做详细探讨

6.    Asp编写与调试经验:cookies和session如何选择、cookies数量陷阱、页面过期和缓冲设定、移植性如何保证、如何应付内部服务器500错误……

1.Cookies和Session的选择:
⑴.共同特点
⑵.不同之处:
①.工作方式
②.过期条件
③.对服务器的性能影响

2.Cookies数量陷阱:
IIS可以保存一般的cookies不超过20个,再定义新的Cookies以前的Cookies的值就丢失了,这样对大型应用显然局限性非常大,如何解决这个问题呢?
答案是使用二维Cookies。

例子:

    测试一维Cookies数量极限:
    test_cookies_1.asp
<%
for i=1 to 50
response.cookies("cookies_"&i)=i
next
%>


test_cookies_2.asp
    <%
for i=1 to 50
response.write request.cookies("cookies_"&i)&"<br>"
next
%>

效果:
先访问test_cookies_1.asp,再访问test_cookies_2.asp,,发现了什么?


test_cookies_3.asp
<%
for i=1 to 50
response.cookies("cookies_"&i)=i
next

for i=1 to 50
response.write request.cookies("cookies_"&i)&"<br>"
next
%>

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

测试二维Cookies数量极限:
test_cookies_4.asp
<%
for i=1 to 301
response.cookies("tuht")("cookies_"&i)=i
next
%>


test_cookies_5.asp
<%
for i=1 to 301
response.write request.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中还可以做设定:
<meta content="no-cache" http-equiv="Pragma">
<meta HTTP-EQUIV="Expires" CONTENT="0">

4.移植性的保证
        ⑴.包含文件
        <!--#include file="top.asp" -->
        ⑵.使用server.mappath寻找文件路径,避免在页面中直接使用绝对路径
        ⑶.尽量使用组件封装业务逻辑

    5.调试内部服务器500的错误
        ⑴.设置IIS显示具体的错误信息
⑵.分步调试,由上而下
    ⑶.打印某些重要的变量的值,检查是否为我们预期
⑷.根据经验来判断错误

7.    操作Word文档

⑴.安装Office 2000,其中Word 2000必选
⑵.设置IE中Internet的安全性:ActiveX控件和插件全部启用
⑶.设置工作目录的文件权为Internet及System读取/修改/写入
⑷.编写模版course.dot
⑸.具体代码:
opr_doc_inc.asp
<%
Response.write "Dim Var_Num" & chr(13)
Response.write " Var_Num = 2 " & chr(13)
Response.write "Dim varstrings(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 "Dim varvalues(2)" & chr(13)
Response.write "varvalues(0)=" & chr(34) &"起草人:涂海涛"& chr(34) & chr(13)
Response.write "varvalues(1)=" & chr(34) & "日期:"&date()& chr(34) & chr(13)
%>

Sub instead(word)
   Set myRange = word.ActiveDocument.Content
   for i=0 to Var_Num - 1
       call myRange.Find.Execute(varStrings(i),false,false,false,false,false,false,false,false,varvalues(i),2)
   Next
End Sub


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)
%>
<script language="vbscript">
On Error Resume Next
'生成指定文件名的Word文档
Dim word
set word = CreateObject("Word.Application")
if Err.number > 0 Then
Alert "发生错误,请确认文件是否存在"
else
word.visible = False
word.documents.open "<%response.write path%>course.dot"
<%Response.write w1%>
word.documents.close
set word=nothing
end if

<!--#include file="opr_doc_inc.asp"-->

Dim wApp
Set wApp = CreateObject("Word.Application")
If Err.number > 0 Then
Alert "发生错误,请确认文件是否正确创建"
else
wApp.visible = True
<%Response.write w2%>
call instead(wApp)
set wApp=nothing
end if
</script>

效果:看看生成了doc文件吗?这个新建的doc文件和模版文件有什么区别?起草人和日期发生了变化了吗?保存一下,看看新生成的doc文件的内容。


附:
1.以上全部代码在Windows 2000 Server SP2+IIS 5.0+MS SQL Server 2000+Office 2000下测试通过
2.配置数据库数据库名course,用户course_user,密码course_password,ODBC驱动为course_dsn,端口为2433,描述表结构的脚本在共享目录下。
3.Asp fileup、Jmail、Winzip 8.1、Winzip command line这几个软件请自行下载。
4.数据库脚本文件:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[output_1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[output_1]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[return_1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[return_1]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[user_info_1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[user_info_1]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[user_info_2]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[user_info_2]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[user_info_3]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[user_info_3]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[user_info]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[user_info]
GO

CREATE TABLE [dbo].[user_info] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [user_name] [varchar] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [password] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[user_info] WITH NOCHECK ADD
    CONSTRAINT [PK_user_info] PRIMARY KEY  CLUSTERED
    (
        [user_name]
    )  ON [PRIMARY]
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE [output_1]
@sid int output
AS
set @sid=2
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE [return_1]
(@user_name varchar(40),@password varchar(20))
AS
if exists(select id from user_info where user_name=@user_name and password=@password)
return 1
else
return 0
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE [user_info_1]
(@user_name varchar(40),@password varchar(20))
AS
select id from user_info where user_name=@user_name and password=@password
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE [user_info_2]
(@user_name varchar(40),@password varchar(20))
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
delete from user_info where user_name=@user_name and password=@password
COMMIT TRANSACTION
SET XACT_ABORT OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE [user_info_3] AS
select * from user_info
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 
 

上一篇:Asp深度揭密(上)  下一篇:怎么学习asp&nbsp;给非专业的asp爱好者