新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → ASP编程入门进阶(连载)[转帖] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 65608 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: ASP编程入门进阶(连载)[转帖] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客楼主
    发贴心情 ASP编程入门进阶(连载)[转帖]

    (一) 安装配置服务器


    申明:asp编程入门进阶系列文章COPY自http://www.cnbruce.com/blog/ 部分运行代码请到该站进行在线测试
    ASP编程入门进阶(一):安装配置服务器

    鉴于ASP脚本语言是在服务器端IIS或PWS中解释和运行,并可动态生成普通的HTML网页,然后再传送到客户端供浏览的这一特点。我们要在本机上进行调试,那就要求我们的个人电脑具有服务器的功能。

    不要看到“服务器”三个字就感到担心:我的机子配置这么底,性能这么差,是不是不能配啊。放心!配个服务器,就是多装个软件,况且就自己一个人用,根本没有必要多虑。那具体的装个什么软件呢?刚才我们也看到了是在“IIS或PWS中解释和运行”,很明显,装IIS或者PWS就可以了。

    IIS为何物?IIS是Internet Information Server的缩写,它是微软公司主推的Web服务器。那PWS呢?它就显得有些古老了:)早期在WIN98,当然现在仍有人采用的操作系统,PWS(Personal Web Server)是一般用户最容易得到的web服务器: 在win98的安装盘的Add_on\pws目录下就可以找到pws的安装程序。而对于IIS是我们所推荐的,也是大部分朋友在使用的,有必要。

    1,打开控制面板

    2,在控制面板中选择“添加/删除Windows组件”,打开窗口

    3,点击“添加/删除Windows组件”后稍等片刻。出现“Windows组件向导”窗口。从中打勾“选择Internet信息服务(IIS)”

    4,在“Windows组件向导”中单击“下一步”。开始安装配置我们的服务器IIS。

    5,等待进度条跑到终点。。。终于复制文件全部完成,配置服务器也相应的结束。

    6,IIS服务器算是安装OK了,那具体有什么用处?又该如何使用呢?
    首先IIS的作用之一就是可以解释执行ASP网页代码,并将结果显示出来。当然就现在而言,你的机器充当的既是服务器端,又是客户端,该技术对你来说是透明的,你不需要也没必要去研究它的原理,就这样去理解去应用。
    那打开你的浏览器,随便IE,NS,TE还是MYIE,只要是能浏览网页的浏览器,在其地址栏输入:
    http://localhost/ 查看即可。出现当前该窗口就表示已经成功了:WEB服务正在运行!

    7,这,就行了?你知道下面怎么办呢?很是没头绪,对吧。费尽心思学到现在,就是看了人家的一个ASP页面。
    那我自己做,调试自己的ASP网页又该如何呢?
    首先,你得想好你的ASP文件总要放在一个地方吧。
    行,打开“我的电脑”,在E盘下面建立一个“myasp”文件夹,以后所有的ASP文件先暂时放到这里吧。

    8,然后,从“开始”菜单,“程序”—“附件”—打开“记事本”。
    在里面敲入

    <%=now()%>

    9,接着将文件保存到E:\myasp\文件夹里面,并且命名为time.asp

    10,一个很简单的ASP文件就OK了,下面我们怎么办?一句话:调试。
    怎么调试?还是输入我们刚才的http://localhost/ ?很显然是不行的。
    那这时候是不是难点来了:我该如何调试我自己定义的一个文件夹里的ASP文件呢?
    同样,一句话:用虚拟目录。那什么是虚拟目录?又该如何建立一个虚拟目录呢?
    (引一段话:要从主目录以外的其他目录中进行发布,就必须创建虚拟目录。“虚拟目录”不包含在主目录中,但在显示给客户浏览器时就象位于主目录中一样。虚拟目录有一个“别名”,供 Web 浏览器用于访问此目录。别名通常要比目录的路径名短,更便于用户输入。使用别名更安全,因为用户不知道文件是否真的存在于服务器上,所以便无法使用这些信息来修改文件。)
    对初学者而言不必理会,重在实践,用多了自然会理解这段话的意思。
    大体上就是让我刚才的myasp文件夹用一个代号来标记,比如就标记为myasp,那我调试的时候只要输入:http://localhost/ myasp/time.asp 就可以调试了。

    11,那如何标记呢?也就是如何建立一个虚拟目录呢?
    从“控制面板”里面打开“管理工具”

    从中选择“Internet服务管理器”

    12,弹出的窗口中右键“新建”—“虚拟目录”。

    13,弹出“虚拟目录创建向导”。

    下一步,填写别名:myasp。

    再下一步,目录:浏览到E:\myasp即可。

    紧跟一步,访问的权限一定要把“读取”和“运行脚本”打勾。

    最终点击“完成”。

    14,结果如下:

    15,那么剩下的就是调试该time.asp了。
    在“Internet信息服务”里面右键time.asp,选择“浏览”。

    16,最终页面如下:

    17,看!就这么简单,你已经ASP入门了。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:21:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客2
    发贴心情 认识表单
    (二)认识表单

    说实话,无论是asp,php还是jsp进行网络编程的时候,都离不开和用户的交互。
    而人机对话的平台,基本上是靠相应的文本、列表框进行输入,然后通过按钮提交送至数据库的。
    所以学习网络编程就一定要了解这些输入平台相关的东西:表单(form)
    其基本格式如下:
    <form name="form1" action="xxx.asp" method="post">
    <input type="text" name="yourname">
    <select name="selectwhat">
    <option>aaa</option>
    <option>aaa</option>
    </select>
    <textarea name="textinit" rows=5 cols=10></textarea>
    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
    可以总结出:表单即包括<form>...</form>之内的相关内容。
    其中内部可以分三大类:input,select,textarea

    一,首先看<form>内部参数
    参数name:用来表示该表单的唯一名称,方便一个页面建立多个表单而不混淆,当然更是为了接受页面的确认关系。
    参数action:显而易见,是表示当前的表单中所有内容将送交某个页面去处理。处理包括接受信息,数据库比较,添加,修改等。
    参数method:即表单的提交方法,含两种方法:post和get。post是传输信息内容,get是传输url值,具体用法将会在下一节“内置对象request”中介绍到

    二,再来看Input相关
    Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍。
    1,type=text
    输入类型是text,这是我们见的最多也是使用最多的,比如登陆输入用户名,注册输入电话号码,电子邮件,家庭住址等等。当然这也是Input的默认类型。
    参数name:同样是表示的该文本输入框名称。
    参数size:输入框的长度大小。
    参数maxlength:输入框中允许输入字符的最大数。
    参数value:输入框中的默认值
    特殊参数readonly:表示该框中只能显示,不能添加修改。
    <form>
    your name:
    <input type="text" name="yourname" size="30" maxlength="20" value="输入框的长度为30,允许最大字符数为20">

    <input type="text" name="yourname" size="30" maxlength="20" readonly value="你只能读不能修改">
    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    2,type=password
    不用我说,一看就明白的密码输入框,最大的区别就是当在此输入框输入信息时显示为保密字符。
    参数和“type=text”相类似。
    <form>
    your password:
    <input type="password" name="yourpwd" size="20" maxlength="15" value="123456">密码长度小于15
    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    3,type=file
    当你在BBS上传图片,在EMAIL中上传附件时一定少不了的东西:)
    提供了一个文件目录输入的平台,参数有name,size。
    <form>
    your file:
    <input type="file" name="yourfile" size="30">
    </form>


    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    4,type=hidden
    非常值得注意的一个,通常称为隐藏域:如果一个非常重要的信息需要被提交到下一页,但又不能或者无法明示的时候。
    一句话,你在页面中是看不到hidden在哪里。最有用的是hidden的值。
    <form name="form1">
    your hidden info here:
    <input type="hidden" name="yourhiddeninfo" value="cnbruce.com">
    </form>
    <script>
    alert("隐藏域的值是 "+document.form1.yourhiddeninfo.value)
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    5,type=button
    标准的一windows风格的按钮,当然要让按钮跳转到某个页面上还需要加入写JavaScript代码
    <form name="form1">
    your button:
    <input type="button" name="yourhiddeninfo" value="Go,Go,Go!" onclick="window.open('http://www.cnbruce.com')">
    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    6,type=checkbox
    多选框,常见于注册时选择爱好、性格、等信息。参数有name,value及特别参数checked(表示默认选择)
    其实最重要的还是value值,提交到处理页的也就是value。(附:name值可以不一样,但不推荐。)
    <form name="form1">
    a:<input type="checkbox" name="checkit" value="a" checked>

    b:<input type="checkbox" name="checkit" value="b">

    c:<input type="checkbox" name="checkit" value="c">

    </form>
    name值可以不一样,但不推荐

    <form name="form1">
    a:<input type="checkbox" name="checkit1" value="a" checked>

    b:<input type="checkbox" name="checkit2" value="b">

    c:<input type="checkbox" name="checkit3" value="c">

    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    7,type=radio
    即单选框,出现在多选一的页面设定中。参数同样有name,value及特别参数checked.
    不同于checkbox的是,name值一定要相同,否则就不能多选一。当然提交到处理页的也还是value值。
    <form name="form1">
    a:<input type="radio" name="checkit" value="a" checked>

    b:<input type="radio" name="checkit" value="b">

    c:<input type="radio" name="checkit" value="c">

    </form>
    下面是name值不同的一个例子,就不能实现多选一的效果了

    <form name="form1">
    a:<input type="radio" name="checkit1" value="a" checked>

    b:<input type="radio" name="checkit2" value="b">

    c:<input type="radio" name="checkit3" value="c">

    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    8,type=image
    比较另类的一个,自己看看效果吧,可以作为提交式图片
    <form name="form1" action="xxx.asp">
    your Imgsubmit:
    <input type="image" src="../blog/images/face4.gif">
    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    9,type=submit and type=reset
    分别是“提交”和“重置”两按钮
    submit主要功能是将Form中所有内容进行提交action页处理,reset则起个快速清空所有填写内容的功能。
    <form name="form1" action="xxx.asp">
    <input type="text" name="yourname">
    <input type="submit" value="提交">
    <input type="reset" value="重置">
    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    Input的Type总结下来有10个,还是不少的,呵呵

    三,接着再来看Select相关
    Select主要要来做下拉菜单,跳转菜单,(下拉)列表。
    其本身有内嵌代码<option>...</option>,option参数value值为传递被处理的值,option还有参数selected,表示默认被选中的。
    1,下拉菜单
    只是菜单式显示。
    <form name="form1">
    <select name="selectwhat">
    <option value="a">aaa</option>
    <option value="b">bbb</option>
    <option value="c" selected>ccc</option>
    </select>
    </form>
    <script>
    alert("菜单的默认选取值是 "+document.form1.selectwhat.value)
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    2,跳转菜单
    在下拉菜单基础上添加JavaScript成为跳转菜单。
    <select onChange="if(this.selectedIndex && this.selectedIndex!=0){window.open(this.value);}this.selectedIndex=0;">
    <option selected>网站连接……</option>
    <option value="http://www.cnbruce.com/">Cn-Bruce</option>
    <option value="http://www.blueidea.com/">Blue!dea</option>
    <option value="http://www.it365cn.com/">It365cn</option>
    </seclect>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    3,下拉列表
    和下拉菜单最大的区别就是select多了一个size值,该值并非长度大小,而是列表的上下高度。
    当然还有更主要的是:菜单只能选一个,而列表可以选多个,该特殊参数为multiple
    size=1简直就是一个下拉菜单
    <form name="form1">
    <select name="selectwhat" size=1>
    <option value="a">aaa</option>
    <option value="b">bbb</option>
    <option value="c">ccc</option>
    </select>
    </form>

    size>1你会发现了大不同
    <form name="form1">
    <select name="selectwhat" size=3>
    <option value="a">aaa</option>
    <option value="b">bbb</option>
    <option value="c">ccc</option>
    </select>
    </form>

    加入了multiple发现可以多个选择了,包括Shift进行快速全选及Ctrl进行点选
    <form name="form1">
    <select name="selectwhat" size=3 multiple>
    <option value="a">aaa</option>
    <option value="b">bbb</option>
    <option value="c">ccc</option>
    </select>
    </form>

    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    四,最后关注的Textarea
    可以将Textarea文本区域理解为扩大化了的文本输入框。
    其参数没有value,默认值设定在<textarea>...</textarea>之间。
    其它参数还有rows,表示文本区域的行数;参数cols,表示文本区域的列数。
    还有参数warp,当warp=off表示该文本区域中的不自动换行,当然不写默认是自动换行的。
    <form name="form1">
    <textarea name="textinit" rows="5" cols="20" wrap="off">5行20列,不自动换行</textarea>
    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    最后总结:input根据type分10类,select从option处又分菜单和列表,textarea有行有列的文本输入区域

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:23:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客3
    发贴心情 
    (三):接触脚本程序

    有了前面的html中关于form的强化知识,是不是在想,下面就可以开始ASP之旅呢?未必。
    一般系统学过ASP的编程人员都会切身体会到:在系统学习ASP的内置对象和内置组件之前,学会脚本语言永远是至关重要的。
    为什么这么说呢?为什么要学脚本语言呢?ASP和脚本语言又有什么关系呢?

    首先说说ASP是贵为何物吧。ASP是Microsoft Active Server Pages的简称,它是一种服务器端脚本环境,可用来创建交互式 Web 页并建立强大的 Web 应用程序。可以表明ASP是一种基于服务器端的脚本环境,那就明白ASP为什么需要IIS支持了,因为IIS即为常用的一类web服务器;那也就明白为什么要学脚本语言了,因为ASP提供的是一种脚本环境。

    再次需要说明的是,ASP只是一种环境,而非一种语言。如果真要形象化地说是ASP是网络编程语言的话,那也是属于一个html+脚本+asp提供的内置对象及组件的功能强大的混合语言。

    所以,学点脚本非常重要!其实无论是学脚本语言,还是其它语言,我认为首先需要了解的是该语言涵盖的各类特性,包括:数据类型、事件、方法、 对象、属性、语法等当然这都是些空谈,正如在大学课堂上的某计算机语言课一样,搞纯研究性的就是觉得有些索而无味。还是实用些的好,能解决问题的程序才是好程序(印证能逮到老鼠的猫就是好猫的经典圣语,呵呵)

    当然,语言这东西还是要你去好好钻研的,比如你写求绝对值的程序,其实一个abs()函数就搞定了。再比如你会vb脚本,但把同样程序替换成java脚本就会出错,它们的数据类型不同,语句语法也不一样啊。正如说中文和外文一样,要会发音标(数据类型),会如何发音(方法),如何说成一句话(语法)……呵呵,有点让你难受吧。行!直接了当。你以后需要注意的是语言的函数、语法。当然也不是让你全看,按照教程中的遇到一个掌握一个。教程学完,差不多也结束了。呵呵,你要相信我。

    目前有两种主要的脚本语言:VbScript和JavaScript。因为VbScript作为IIS默认的服务器脚本,所以我们所谈所学的基本是围绕VbScript为脚本的ASP的,当然也不排除有的时候使用javascript.

    举一个很简单的例子:

    <script language="vbscript">
    <!--
    sub button1_onclick
    msgbox (" 欢迎使用vbscript! " )
    end sub
    -->
    </script>

    <script language="javascript">
    <!--
    function b213()
    {
    alert("欢迎使用javascript!")

    }
    -->
    </script>
    <form>
    <input type="button" name="button1" value="vbs">

    <input type="button" name="button2" value="js" onclick="b213()">
    </form>
    vbscript中的Sub 就是一个事件过程。过程名包含两部分:一部分为按钮名,即 Button1(从 < INPUT > 标记中的 NAME 属性获取);另一部分为事件名,即 OnClick。两部分由下划线 (_) 连接。单击按钮时,Internet Explorer 查找并运行相应的事件过程,即 Button1_OnClick,而MsgBox 就是一个函数,对于它更具体的参数,你就好好看下了。
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    一时来劲,可能大家都看到网上有种狂恶心的对话框组,原理是什么呢?请看:

    <script language="vbscript">
    msgbox"你知道你会点确定的。。。。。。。"
    msgbox"不点也要点。。。。。。。。"
    msgbox"没办法是吧。。。。。。。。。。?"
    msgbox"要不网页打不开啊。。。。。。"
    msgbox"这招损人吧。。。。。。。。。"
    msgbox"真想揍揍站长。。。。。。。。。"
    </script>
    其实站长用这些玩弄别人的时候,先玩弄了自己:因为这都是他想出来的啊:)
    呵呵,我没有损大家的意思,只是为了学习。
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    在来个开页和退页弹出对话框的原理吧
    <script language="vbscript">
    <!--
    sub window_onload()
    msgbox"welcome you!"
    end sub
    sub window_onunload()
    msgbox"see you late!"
    end sub
    -->
    </script>
    开页显示“welcome you!”,关页显示“see you late!”
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    以上只是一个显示对话框msgbox,当然还有书写对话框inputbox也顺便看下吧。

    <script language="vbscript">
    <!--
    dim strname
    strname=inputbox("enter your name please:","enter your name","cnbruce")
    document.write(strname&",welcome you!<p>")
    -->
    </script>
    有关inputbox的想关参数也去看看吧。
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    再来看看几个实用的函数:
    len():返回字符串长度或者变量的字节长度 
    lef():截取一个字符串的前部分内容
    right():截取一个字符串的后部分内容
    <script language=vbs>
    text="1234567890abcdefgh"
    i=10

    lentext=len(text)
    lefttext=left(text,i)
    righttext=right(text,i)

    alert ("文本长度是:"&lentext)
    alert ("文本左取"&i&" 得的是:"&lefttext)
    alert ("文本右取"&i&" 得的是:"&righttext)
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    根据这几个,经常看到的长文章后面加“......”的情况就是如下:

    <script language=vbs>
    text="123 4567 8fds90 abcde fghxcfv"
    i=10
    if len(text)>i then '如果文本长度大于给定的值
    text=left(text,i) '则提取前段的i位的字符串
    alert (text&"...")
    else
    alert (text)
    end if
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    还有个比较重要的函数replace()
    在字符串中查找,替代指定的字符串
    replace(strtobesearched,strsearchfor,strreplacewith)
    strtobesearched是字符串; strsearchfor是被查找的子字符串;strreplacewith 是用来替代的子字符串。
    下面的一个就是很有用的文字转换程序
    <script language=vbs>
    text="妈的,我操"

    text=replace(text,"妈的","MD")
    text=replace(text,"操","CAO")
    alert (text)

    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    经常在发送EMAIL时,添加多个地址,中间采用“;”号进行分隔,那具体怎么分解接受过来的多个EMAIL地址呢?采用Split函数:Split 函数从字符串中返回数组。
    <script language=vbs>
    cnbruce="cnbruce@126.com;cnbruce@it365cn.com;root@cnbruce.com"
    MyArray = Split(cnbruce, ";")
    a=MyArray(0)
    b=MyArray(1)
    c=MyArray(2)
    alert(a)
    alert(b)
    alert(c)
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    这些都是比较现实较好玩的些,玩中学习也不错:)但毕竟我们是要编程的,说到编写程序,我知道程序结构可以分:
    1,顺序结构:就是最普通的,从上往下,从左往右执行的程序
    2,选择结构:给你两个条件,要不这样(if ... then),要不那样(else),任君选择:)
    3,循环结构:给你一个最大发挥的空间,在不超出这个范围内进行活动(循环),否则自动退出(跳出循环)。
    再复杂的程序也无非是由这三种结构综合嵌套运用过来的,你说是吧。

    顺序结构没多少要说,因为程序执行基本都是这方向。
    来看看选择结构,当然选择结构也可以嵌套。

    <body>
    hello,
    <script language="vbscript">
    <!--
    dim thishour
    thishour=hour(time)
    if thishour<=12 then
    document.bgcolor="red"
    document.fgcolor="black"
    document.write("上午好!")
    else
    if thishour<=18 then
    document.bgcolor="blue"
    document.fgcolor="white"
    document.write("下午好!")
    else
    document.bgcolor="green"
    document.fgcolor="yellow"
    document.write("晚上好!")
    end if
    end if
    -->
    </script>
    本页的作用是根据不同时间显示不同颜色和欢迎信息。
    </body>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    以上程序很简单吧,只要能认识英文就会懂程序(我是这么理解的:)
    先把现在的小时提交出来:hour(time);
    然后和12比较判断,如果<=12,肯定是上午了,否则就是下午和晚上;
    否则里面继续条件判断,如果时间再<=18的话,那肯定就是下午了;
    最后,不用说,瞎子猜猜也知道是晚上了:)

    有关上一程序中的document.bgcolor就是文档的背景色,document.fgcolor就是文档的前景色(文字色),下一程序是动态改变背景颜色的。

    <script language="vbscript">
    <!--
    sub setbgcolor(bcolor)
    document.bgcolor=bcolor
    end sub
    -->
    </script>
    <form>
    <input type="radio" name="color" onclick=setbgcolor("red")>red

    <input type="radio" name="color" onclick=setbgcolor("green")>green

    <input type="radio" name="color" onclick=setbgcolor("blue")>blue

    <input type="radio" name="color" onclick=setbgcolor("yellow")>yellow

    <input type="radio" name="color" onclick=setbgcolor("gray")>gray

    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    有关条件选择结构的嵌套再show出一个表单检测的程序

    <html><head><title>abc</title>
    <script language="vbscript">
    <!--
    sub btnsubmit_onclick
    if form1.name.value<>"" then
    if form1.addr.value<>"" then
    if form1.email.value<>"" then
    if instr(form1.email.value,"@")<>0 and instr(form1.email.value,".")<>0 then
    form1.submit
    else
    alert"email error!"
    end if
    else
    alert "enter your email!"
    form1.elements("email").focus
    end if
    else
    alert "enter your address!"
    form1.elements("addr").focus
    end if
    else
    msgbox "enter your name please!"
    form1.elements("name").focus
    end if
    end sub
    -->
    </script>
    </head>
    <body>
    <form name="form1" method=post action="bug.html">
    your name:<input type="text" name="name">

    your addr:<input type="text" name="addr">

    your email:<input type="text" name="email">

    <input type="button" name="btnsubmit" value="submit">
    </form>
    </body>
    </html>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    程序是给出来了,但看起来比较难懂,有时程序执行时间也比较重要,所以得精简程序代码。
    正所谓:写程序容易,写经典程序难啊,那上面的程序还可以换种思维方式。改用javascript(注:学的是编程思想,不要太过计较脚本类型)

    <html><head><title>abc</title>
    <script language="javascript">
    <!--
    function form1_onsubmit()
    {
    if (document.form1.name.value=="")
    {
    alert("请设定您的登陆名。")
    document.form1.name.focus()
    return false
    }
    else if(document.form1.addr.value=="")
    {
    alert("请填写您的地址。")
    document.form1.addr.focus()
    return false
    }
    else if(document.form1.email.value=="")
    {
    alert("请填写您的E-Mail地址。")
    document.form1.email.focus()
    return false
    }
    }
    -->
    </script>
    </head>
    <body>
    <form name="form1" onsubmit="return form1_onsubmit()">
    your name:<input type="text" name="name">

    your addr:<input type="text" name="addr">

    your email:<input type="text" name="email">

    <input type="submit" name="submit" value="submit">
    </form>
    </body>
    </html>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]


    最后来看下循环结构吧:1到500可不是一个一个写出来的。

    <script language=vbs>
    for i= 1 to 500
    document.write(i&"
    ")
    next
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    当然循环不只可以用for,还可以用do while...loop等
    反正程序这东西是代替我们少做了许多重复单一无聊的事——只要你合理利用程序。

    应该有些成就吧,学语言,学编程就是学语法语义,学编程架构思想。
    当然这要你有扎实的本语言的基础,基础是什么?你知道哪些函数吗?你知道怎么用程序怎么判断偶数吗(包含了运算)?你知道如何进行表单检测吗?你知道哪三种程序架构吗?

    函数参看:
    http://www.cnbruce.com/blog/showlog.asp?cat_id=26&log_id=245

    呵呵,把以上的程序吃透,最好再多看看脚本参考手册,跟我就可以开始ASP的上路了。

    补:

    Function过程与Sub过程类似,但是Function过程可以返回值。
    Function过程也可以使用由调用过程传递的常数、变量或表达式作为参数。如果Function过程无任何参数,则Function语句必须包含括号()。
    Function过程通过函数名返回一个值,这个值是在过程的语句中赋给函数名。Function返回值的数据类型总是Variant。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:24:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客4
    发贴心情 
    (四):内置对象Request

    系统学习ASP,就是先从ASP的几大内置对象开始的.
    一般称五大对象:Request、Response、Server、Session、Application
    今天先来看看Request对象。

    当然一直还没有提到的就是,ASP到底是什么样?我看代码怎么知道是ASP代码?
    很简单,当看到“<%”和“%>”就表明是ASP,并且两者之间的就是ASP源码。

    那为什么要学对象,对象的作用又是如何的?
    其实ASP所提供的这些可在脚本中使用的内建对象,使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息,从而使对象开发者摆脱了很多烦琐的工作。

    而Request对象的主要作用就是:在服务器端接受并得到从客户端浏览器提交或上传的信息。Request 对象可以访问任何基于 HTTP 请求传递的所有信息,包括从Form表单用 POST 方法或 GET 方法传递的参数、cookie 等。

    一,Request.form("name")

    这是接受上一页的信息时,常会用到的一种接受方式。Request是ASP对象,form则是Request对象所包含的对象集合(这要有区别与HTML页中的form表单,是不一样的),name也就是上一页表单中的某个文本框、密码框,或者隐藏域等的名称。并且还有一点非常重要:上一页Form表单的递交方法一定要为Post方法。
    说不如做,看下面两个页面程序。

    1,test1.html(本页是HTML的,主要提供输入信息的平台,以将信息提交到再下面的ASP页进行接受处理)
    <form action="submit1.asp" method="post">
    your name:<input tpye="text" name="yourname">

    your pwd: <input type="password" name="yourpwd">

    <input type="submit" value="submit">
    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    注意method就是post,且提交的页面action为submit1.asp。

    2,submit1.asp(ASP页面,进行从test1.html接受name="yourname"和name="yourpwd"的两个值)


    your name is:<%=request.form("yourname")%>

    your pwd is:<%=request.form("yourpwd")%>

    通过IIS进行HTTP协议的页面调试,你会发现两个页面进行了关联:test1.html中动态输入的name和pwd,在submit1.asp也则进行相应的动态显示。
    这就是接收、提取并显示信息的全过程。

    3,改进的submit1.asp


    <% for each i in request.form%>
    <%=i%>:
    <%=request.form(i)%>


    <%next%>

    采用了for循环语句,将上页所有的form标签信息进行接受、并显示。这在上表单页有很多项目时,非常快捷地出来结果。
    首先仍然是request.form,只是后面的("yourname")或("yourpwd")变成了变量 i
    通过for循环对该form集合进行遍历提取,这是一种不同于机械地“有几个就提取几个”的编程思想,注意掌握。

    二,Request.querystring("name")

    此时由Request.form变为Request.querystring,最主要的还是上页表单递交时,采用的什么方法。当采用post就用Request.form,否则当采用get时就采用Request.querystring了。

    那Request.querystring最大特色在哪里呢?Request.querystring能检索并接受 HTTP 查询字符串中变量的值,而HTTP 查询字符串则是由问号 (?) 后的值指定的。说了大半天,继续看一个程序。

    1,test2.html(本页同是HTML的,主要提供输入信息的平台,以将信息提交到再下面的ASP页进行接受处理,注意提交方法是get)
    <form action="submit2.asp" method="get">
    your name:<input tpye="text" name="yourname">

    your pwd: <input type="password" name="yourpwd">

    <input type="submit" value="submit">
    </form>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    和test1.html最大区别也就是method="get"

    2,submit2.asp(ASP页面,进行从test1.html接受name="yourname"和name="yourpwd"的两个值)


    your name is:<%=request.querystring("yourname")%>

    your pwd is:<%=request.querystring("yourpwd")%>

    注意此时的浏览器地址栏,文件后面多出了?号,?号后面附有变量名及所被赋的值,当然多个变量名之间是用&号进行连接的。
    而Request.querystring最大的功能就是能将?号后面的这些变量名分开,并且所对应的值也一一取出。

    刚才说到不同的变量名之间是用&号进行连接,但如果是相同的变量名时,request.querystring到底是提取前一个?后一个?还是两个一起?
    用例子说话。
    3,query.asp(名称是query.asp,因为在该页程序中是反馈给自己。)


    <a href="query.asp?bookname=《asp教程》">《asp教程》</a>

    <a href="query.asp?bookname=《jsp教程》">《jsp教程》</a>

    <a href="query.asp?bookname=《xsp教程》&bookname=《xml》">《xsp教程》</a>

    you chosed <%=request.querystring("bookname")%>

    很明显当点《xsp教程》时,显示的是“《xsp教程》,《xml》”,中间自动加了“,”号。

    最后仍需要说明的是:request.querystring在分页程序里面是经常用到的。象http://www.cnbruce.com/database/

    三,Request.ServerVariables("xxx")
    其中ServerVariables就是服务器的环境变量了,该变量包含的内容比较多,我们同样先采用for循环进行遍历查看下。
    1,server1.asp


    <%for each i in request.servervariables%>
    <%=i%>:
    <%=request.servervariables(i)%>
    <hr>
    <%Next%>

    可以看到一大堆环境变量,其中还有没有值的,下面摘取几个比较常用的。


    http_user_agent(客户端机器的相关环境):<%=request.servervariables("http_user_agent")%>

    http_accept_language(浏览语言):<%=request.servervariables("http_accept_language")%>

    CONTENT_LENGTH(客户端发出内容的长度):<%=request.servervariables("CONTENT_LENGTH")%>

    CONTENT_TYPE(内容的数据类型。如“text/html”。同附加信息 的查询一起使用,如 HTTP 查询 GET、POST 和 PUT):<%=request.servervariables("CONTENT_TYPE")%>

    LOCAL_ADDR(返回接受请求的服务器地址。如果在绑定多个IP地址的多宿主机器上查找请求所使用的地址时,这条变量非常重要):<%=request.servervariables("LOCAL_ADDR")%>

    REMOTE_ADDR(发出请求的远程主机client的 IP 地址):<%=request.servervariables("REMOTE_ADDR")%>

    SERVER_NAME(出现在自引用 URL 中的服务器主机名、DNS 化名 或 IP 地址):<%=request.servervariables("SERVER_NAME")%>

    SCRIPT_NAME(主机名后面的虚拟地址):<%=request.servervariables("SCRIPT_NAME")%>

    LOGON_USER(用户登录 Windows NT 的帐号):<%=request.servervariables("LOGON_USER")%>

    SERVER_PORT(发送请求的端口号):<%=request.servervariables("SERVER_PORT")%>


    根据以上的SERVER_NAME是提取的服务器主机名,SCRIPT_NAME是提取的虚拟地址,则两者的结合再加上http:// 是不是就是个完整的网址呢。
    2,server2.asp


    <%a=request.servervariables("server_name")%>
    <%b=request.servervariables("script_name")%>
    <%="http://"&a&b%>

    其中http:// 用引号引起,表示是一字符串,a和b分别是对应了具体值的变量,在ASP中进行这样的连接就是采用&号。

    根据这个结果,我们是不是就可以随时提取动态的URL地址了。

    再来看看query.asp,要求一定要保存为query.asp的,因为如果不是该文件名,程序指向就会出错。
    但现在的这个文件就随便你保存为什么文件,都一样执行。
    3,xxx.asp(随便你保存成什么文件)


    <%filepath=request.servervariables("script_name")%>
    <a href="<%=filepath%>?bookname=《asp教程》">《asp教程》</a>

    <a href="<%=filepath%>?bookname=《jsp教程》">《jsp教程》</a>

    <a href="<%=filepath%>?bookname=《xsp教程》&bookname=《xml》">《xsp教程》</a>

    you chosed <%=request.querystring("bookname")%>

    先将当前文件的地址取出并赋值给变量filepath
    然后所有的链接地址开头都只要直接引用该变量就OK了。
    是不是很有用,有点万能的感觉。

    四,Request.Cookies("name")
    不用我说,Cookie是个很重要的东西,究竟如何,等我们学完了下面的对象Response后,会有个特别Cookie的专题讲座。
    就先搁着吧。

    以上四则运用,属于Request对象的所包含的四个对象集合:form、querystring、servervarivables、cookies。当然还有个ClientCertificate就不说啦

    一个ASP内置对象除了对象集合外还有对象属性、对象方法

    Request对象的对象属性只有一个就是TotalBytes(接受的字节数),你可将


    <%=request.totalbytes%>

    该语句加入到任何一个接受数据的ASP页面中进行显示了。

    Request对象的对象方法也还是一个:BinaryRead 。
    说实话,这东东不常用,我也没用过,呵呵。

    OK~!有关Request对象的学习就差不多了,最主要是先好好理解三个对象集合,cookies不着急,下节继续学习对象Response。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:25:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客5
    发贴心情 
    (五):内置对象Response
    通过对Request对象的学习,可以了解到,Request对象是服务器端用来获取客户端的信息的。
    但作为服务器和客户端进行交互,是不是还缺少服务器端向客户端发送信息呢?对象Response正是担任此责任。
    负责将信息传递给用户的对象就是Response了,它可动态地响应客户端的请求,并将动态生成的响应结果返回给客户端浏览器。
    一,Response.write
    在Response中write方法是使用最频繁的一个了,write就是写:将指定的字符串写到当前的 HTTP 输出。

    1,write.asp


    <%
    response.write("hello,world"&"<br>")
    Randomize
    response.write "任意数是"&rnd()&"<br>"
    %>


    response.write后面为所显示的信息,可以用括号包含,也可以直接书写(注意和response.write之间有空格)。
    书写的字符串信息或者HTML代码相关,用引号包含;而ASP本身的函数或变量则不需要,直接用即可。
    并且无论字符串信息、HTML代码、函数还是变量之间进行连接都是采用&号(针对vbscript)

    以上遇到一个随机函数rnd(),该函数返回一个小于 1 但大于或等于 0 的值。
    需要注意的是在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有基于系统计时器的种子。
    若缺少Randomize,则无法继续生成随机种子。

    下面一个利用随机函数的例子,产生随机背景颜色效果:
    <script language=vbs>
    Randomize '首先Randomize产生随机种子
    suij=rnd() '接着将函数值赋变量suij
    suij=replace(suij,".","9") '然后对变量suij中小数点符号转换为数字9
    suij=left(suij,6) '再取变量中的左6位
    document.write "<body bgcolor=#"&suij&">" '最后应用到背景颜色中去
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    当然要产生指定范围的随机整数,请使用以下公式:
    Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
    这里, upperbound 是此范围的上界,而 lowerbound 是此范围内的下界。
    <script language=vbs>
    Do Until choose = vbNo
    value = Int((41 * Rnd) + 60) '产生 60 到 100 之间的随机数。
    msgbox value
    choose = MsgBox ("Roll again? ", vbYesNo)
    Loop
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
    随机函数在做考试系统的时候非常有用,当然你也可以用来自己摇奖,拿个头彩也分点我就行了

    二,Response.end
    这是Response常用的一种方法,使 Web 服务器停止处理脚本并返回当前结果,文件中剩余的内容将不被处理。
    主要放在一页多功能的ASP页中,为让程序运行到此,抑或往下的程序没必要再执行显示……

    2,end.asp


    <%response.write now()
    response.end '程序执行显示到此结束
    response.write rnd()%>


    三,Response.clear
    该方法主要作用是清除缓冲区中的所有 HTML 输出,但该方法只清除响应正文而不清除响应标题。
    该方法和end方法似相反,end是到此结束返回上面的结果,而clear却是清除上面的执行,然后只返回下面的结果。

    3,clear.asp


    <%response.write now()
    response.clear '以上程序到此全被清除
    response.write rnd()%>


    下面通过一个例子来仔细看看end and clear

    4,end2clear.asp


    <%
    filepath=request.servervariables("script_name")
    user=Request.Form("username")
    pwd=Request.Form("password")
    %>

    <form method="POST" action="<%=filepath%>">
    name:<input type="text" name="username"><br>
    pwd:<input type="password" name="password"><br>
    <input type="submit" value="submit">
    </form>

    <%
    If user="cnbruce" and pwd="cnbruce" Then
    response.write "采用clear方法,上面的程序结果将清除。"
    response.clear ' 清空存储在缓存中的页面
    Else
    response.write "采用end方法,下面的程序将停运。"
    Response.End ' 立即停止脚本处理,并将缓存中的页面输出
    End If
    %>
    如果你只看到“刷新”链接就表明clear方法已经生效<br>
    <a href="<%=filepath%>">刷新</a> 


    以上程序中,当输入用户名和密码同为cnbruce的时候会发现clear方法的处理结果,反之是另外一个效果。

    四,Response.redirect
    Redirect 方法是让浏览器立即重定向到程序指定的URL地址。这在根据客户的不同响应,为不同的客户指定不同的页面,或根据不同的情况指定不同的页面时,显得非常重要。
    该方法是立即生效的,在其后的脚本都不执行。

    5,redirect.asp


    <%response.redirect("http://www.cnbruce.com/")%>


    以上四则运用属于Response对象的几个比较重要的方法:write、end、clear、redirect等当然方法还有:AddHeader、AppendToLog、BinaryWrite、Flush……
    早说过,一个ASP对象除了对象方法外,还有对象属性

    那response对象的属性有哪些呢?

    五,Response.ContentType
    ContentType 属性指定服务器响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/html。

    6,contenttype.asp(非text/html的)


    <% Response.ContentType = "text/HTML" %>
    <% Response.ContentType = "image/GIF" %>
    <% Response.ContentType = "image/JPEG" %>
    <% Response.ContentType = "text/plain" %>
    <% Response.ContentType = "image/JPEG" %>


    六,Response.charset
    Charset 属性将字符集名称附加到 Response 对象中 content-type 标题的后面,用来设置服务器响应给客户端的文件字符编码。

    7,charset.asp


    <% Response.charset = "big5" %>
    中文显示,但采用的big5繁体的编码,所以看到的是乱码。


    当然Response.ContentType和Response.charset应用得比较少了。直接在head头部属性里面添加就OK了。

    七,Response.expires
    该属性指定了在浏览器上缓冲存储的页,距过期还有多少时间。
    如果用户在某个页过期之前又回到此页,就会显示缓冲区中的页面。
    但若设置 response.expires=0,则可使缓存的页面立即过期。
    这是一个较实用的属性,当客户通过 ASP 的登陆页面进入 WEB 站点后,应该利用该属性使登陆页面立即过期,以确保安全。
    引用一个经典的例子

    8,expires.asp


    <%
    Response.Expires = 0
    Response.Expiresabsolute = Now() - 1
    Response.AddHeader "pragma","no-cache"
    Response.AddHeader "cache-control","private"
    Response.CacheControl = "no-cache"
    %>


    八,Response.status
    设置服务器要响应的状态行的值。Response.status="状态描述字符串",字符串可以为一个三位整数或一串说明文字组成,但必须防在<html>之前。

    9,status.asp


    <% Response.Status = "401 Unauthorized" %>


    九,Response.buffer
    比较重要的一个,值为true or false。该属性指示是否缓冲页输出。
    引用:当缓冲页输出时,只有当前页的所有服务器脚本处理完毕或者调用了 Flush 或 End 方法后,服务器才将响应发送给客户端浏览器,服务器将输出发送给客户端浏览器后就不能再设置 Buffer 属性。因此应该在 .asp 文件的第一行调用 Response.Buffer。

    Response.buffer=true


    对于Response对象的属性和方法先到这里,剩下一个数据集合,即cookie。
    继续看cookies讲座吧。

    应用举例题
    表单发OutLook邮件
    <style>
    input{ border:1px solid navy; width:150}
    </style>
    <script>
    function test(){
    var NewTitle=title.value;
    var NewContent=content.value;
    document.location.href="mailto:"+aaa.value+"?cc="+bbb.value+"&bcc="+ccc.value+"&subject="+NewTitle+"&body="+NewContent;
    }
    </script>
    <pre>
    <font color=red>收件人: </font><input name=aaa><br>
    <font color=red>操送: </font><input name=bbb><br>
    <font color=red>密件操送: </font><input name=ccc><br>
    <font color=red>主题: </font><input name=title><br>
    <font color=red>内容: </font></pre><p>
    <textarea cols=30 rows=10 name=content></textarea><br>
    <input type=button value="send" onClick="test()">
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
    ASP的


    <%
    submitname=request.form("submit")
    if submitname="submit" then
    email=request.form("email")
    cc=request.form("cc")
    subject=request.form("subject")
    body=request.form("body")
    response.redirect("mailto:"&email&"?cc="&cc&"&subject="&subject&"&body="&body)
    else
    %>
    <form name="form1" method="post" action="email.asp">
    email:<input name="email"><br>
    cc:<input name="cc"><br>
    subject:<input name="subject"><br>
    body:<input name="body"><br>
    <input type="submit" name="submit" value="submit">
    </form>
    <%end if%>


    [Edit on 2004-12-27 0:18:39 By cnbruce]
    By [cnbruce] at 8:44:56 | Comments [5] | 1403 views| Go Top
    9 ASP编程入门进阶(六):Co... ∴ ∵ ASP编程入门进阶(四):内置... :

    About Comments

    suij=replace(suij,".","9") '然后对变量suij中小数点符号转换为数字9
    为什么要把小数点符号转换为数字9
    By [贝贝] at 2004-7-15 10:33:30

    9是随便设定的值

    主要是为了产生颜色的16进制代码的
    By [cnbruce] at 2004-7-16 12:04:19

    cnbruce
    document.write "<body bgcolor=#"&suij&">" 中的document.write为什么不用Response.write。document的用法是什么,是什么意思
    [Edit on 2004-8-14 13:18:27 By 7191864]
    By [7191864] at 2004-8-14 13:10:27

    随机函数rnd(),该函数返回一个小于 1 但大于或等于 0 的值。你的意思也就是说:0<rnd()《1。是这个意思吗?如果是这个意思的话,那怎么样才能产生自然数(1,2,3……)
    By [7191864] at 2004-8-14 13:17:37

    看来这位朋友没有好好看我的教程,上面不是说得好好的吗

    Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
    这里, upperbound 是此范围的上界,而 lowerbound 是此范围内的下界。

    <script language=vbs>
    Do Until choose = vbNo
    value = Int((41 * Rnd) + 60) '产生 60 到 100 之间的随机数。
    msgbox value
    choose = MsgBox ("Roll again? ", vbYesNo)
    Loop
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:27:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客6
    发贴心情 
    (六):Cookies讲座

    什么是 Cookie?Cookie 其实是一个标签,经常可能听到的中文翻译:小舔饼。当你访问一个需要唯一标识你的站址的 WEB 站点时,它会在你的硬盘上留下一个标记,下一次你访问同一个站点时,站点的页面会查找这个标记。

    每个 WEB 站点都有自己的标记,标记的内容可以随时读取,但只能由该站点的页面完成。每个站点的Cookie与其他所有站点的Cookie存在同一文件夹中的不同文件内(你可以在 win98 的 Windows 目录下的 Cookie 文件夹中找到它们,而 win2k 则在 Documents and Settings 文件夹下特定用户的 cookies 文件夹中)。

    一个 Cookie 就是一个唯一标识客户的标记,Cookie 可以包含在一个对话期或几个对话期之间某个 WEB 站点的所有页面共享的信息,使用 Cookie 还可以在页面之间交换信息。这项功能经常被使用在要求认证客户密码以及电子公告板、WEB 聊天室等 ASP 程序中。

    尽管现在听起来cookie没有什么激动人心的,但实际上利用它,你能实现许多有意义的功能!比如说:你可以在站点上放置一个调查问答表,询问访问者最喜欢的颜色和字体,然后根据这些定制用户的web界面。并且,你还可以保存访问者的登录密码,这样,当访问者再次访问这个站点时,不用再输入密码进行登录。

    当然,cookie也有一些不足。首先,由于利用cookie的功能可以编程实现一些不良企图,所以大多数的浏览器中都有安全设定,其中可以设置是否允许或者接受cookie(IE浏览器中“工具”--“Internet选项...”--“安全”--“自定义级别”--“Cookie的使用”;Netscape浏览器中“工具”--“Cookie管理器”--“管理贮存的Cookie”即可),因此这就不能保证随时能使用cookie。再者,访问者可能有意或者无意地删除cookie。当访问者的机器遇到“蓝屏”死机时,或者重新格式化硬盘、安装系统后,原来保存的cookie将全部丢失。最后一点,有一些最初始的浏览器并不能支持cookie。


    ◆ 怎样利用cooklie?
    有2种使用cookie的基本方式:
    1、将cookie写入访问者的计算机(使用 Response 命令)
    2、从访问者的计算机中取回cookie(使用 Request 命令)

    ◆ 创建cookie的基本语法: Response.Cookies(cookie)[(key)|.attribute]=value
    这里的 cookie 是指定 cookie 的名称。
    而如果指定了 key,则该 cookie 就是一个字典。
    (测试一cookie是否为一个字典可用后面代码显示布尔值:<%=Request.Cookies("cookiename").HasKeys%>。为true是字典,false则不是。 )
    Attribute 指定 cookie 自身的有关信息。Attribute 参数可以是下列之一 :

    ①Domain 若被指定,则 cookie 将被发送到对该域的请求中去。域属性表明cookie由哪个网站产生或者读取,默认情况下,cookie的域属性设置为产生它的网站,但你也可以根据需要改变它。(Response.Cookies("CookieName").Domain = "www.mydomain.com")

    ②Path 为一路径属性,该属性可以实现更多的安全要求,通过设置网站上精确的路径,就能限制cookie的使用范围。如果未设置该属性,则使用应用程序的路径。(Response.Cookies("CookieName").Path = "/maindir/subdir/path" )

    ③Expires 指定 cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上,或在许多时候,我们希望能更长时间地在访问者的计算机上保存cookie。必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后 cookie 将到期。

    后面的代码,就可以设置cookie的使用到期时间为“2010年1月1日”: Response.Cookies("CookieName").Expires=#January 01, 2010#
    后面的代码,将设定cookie的过期时间为“cookie的创建时间+365天”:Response.Cookies("CookieName").Expires=Date+365
    但最好不要随便写 Response.Cookies("CookieName").Expires=Date,这样页面之间的调用时值会为空。


    执行下面的代码将会在访问者的计算机中创建一个cookie,名字=VisitorName,值=Ken :
    Response.Cookies("VisitorName")="Ken"
    执行下面的代码将会在访问者的计算机中创建一个cookie,名字=VisitorName,值=表单中UserName的值
    Response.Cookies("VisitorName")=Request.Form("UserName")
    你可以扩展下面的代码成为Cookie子关键值(CookieSubName),即cookie字典的生成。代码如下:
    Response.Cookies("VisitorName")("FirstName")="Ken"
    Response.Cookies("VisitorName")("LastName")="Baumbach"

    ◆ 读取cookie的基本语法:Request.Cookies(cookie)[(key)|.attribute]
    cookie 指定要检索其值的 cookie。
    key 可选参数,用于从 cookie 字典中检索子关键字的值。
    attribe 指定 cookie 自身的有关信息。如:HasKeys 只读,指定 cookie 是否包含关键字。
    如果客户端浏览器发送了两个同名的 cookie,那么 Request.Cookie 将返回其中路径结构较深的一个。例如,如果有两个同名的的 cookie,但其中一个的路径属性为 /www/ 而另一个为 /www/home/,客户端浏览器同时将两个 cookie 都发送到 /www/home/ 目录中,那么 Request.Cookie 将只返回第二个 cookie。

    案例分析:

    ◆ num.asp(通过留在本地磁盘上的cookie记录一年内访问本站的次数,第一次显示“首次访问”,以后显示“第几次访问”)


    <%
    dim num
    num=request.cookies("visitnum")
    if num > "0" then
    num=num+1
    Response.write "您已是第"&num&"次访问本站点了。"
    else
    Response.write "欢迎您首次访问本站。"
    num=1
    end if
    response.cookies("visitnum")=num
    response.cookies("visitnum").expires=date+365
    %>


    ◆ showcookie.asp(从Cookies文件夹中遍历出浏览器所有的Cookie name,以及相关的字典Cookie的显示(蓝字显示))


    <%
    For each cookie in Request.Cookies
    if Request.cookies(cookie).HasKeys =false then
    Response.write cookie & "=" & Request.Cookies(cookie)
    Response.write ("<br>")
    Else
    for each key in Request.Cookies(cookie)
    Response.write ("<font color=blue>")
    Response.write cookie & ".("&key&")" & "=" & Request.Cookies(cookie)(key)
    Response.write ("</font><br>")
    next
    end if
    next
    %>


    ◆ check.asp
    '首先,设置页面。然后,检查表单变量(在同一个页面中)。如果表单变量存在,就创建cookie,并设置到期时间。


    <%@ LANGUAGE="VBSCRIPT" %>
    <%
    bgcolor = Request.Form("bgcolor")
    fgcolor = Request.Form("fgcolor")
    pwd = Request.form("pwd")

    If bgcolor <>"" or fgcolor <>"" then
    Response.cookies("check")("bgcolor") = bgcolor
    Response.Cookies("check")("fgcolor") = fgcolor
    Response.Cookies("check")("pwd") = pwd
    Response.Cookies("check").Expires=#may 01, 2004#
    End if
    '接着,读取cookie
    bgcolor = request.cookies("check")("bgcolor")
    fgcolor = request.cookies("check")("fgcolor")
    pwd = request.cookies("check")("pwd")
    '如果cookie在访问者的计算机上不存在,就创建一个表单,询问相关信息
    If bgcolor ="" and fgcolor ="" and pwd="" then
    %>
    <HTML>
    <HEAD> </HEAD>
    <body>
    <DIV ALIGN="CENTER" >
    <Form action="check.asp" method="POST">
    Bgcolor: <input type="text" name="bgcolor"><BR>
    Fgcolor: <input type="text" name="fgcolor"><BR>
    Password:<input type="password" name="pwd"><BR>
    <input type="submit" value="Submit">
    </Form>
    </DIV>
    </BODY>
    <%
    End if
    '如果cookie已经存在,并且bgcolor存在,就跳转到color.asp。
    If bgcolor <> "" then
    Response.Redirect "color.asp"
    End if
    %>


    ◆ color.asp(显示用户爱好颜色的页面特性)


    <%
    bgcolor=request.cookies("check")("bgcolor")
    fgcolor=request.cookies("check")("fgcolor")
    pwd=request.cookies("check")("pwd")
    %>
    <%response.write("<body bgcolor="&bgcolor&"><font color="&fgcolor&">")%>
    你的密码是:
    <%response.write(" "&pwd&" ")%>

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:29:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客7
    发贴心情 
    (七):内置对象Server

    Server 对象提供对服务器上的方法和属性的访问 , 其中大多数方法和属性是作为实用程序的功能服务。(IIS HELP翻译)
    有了 Server 对象,你就可以在服务器上启动 ActiveX 对象例程,并使用 Active Server 服务提供象 HTML 和 URL 编码这样的函数。
    一,Script.ScriptTimeout
    在脚本运行超过一段时间之后,即作超时处理。
    服务器一般的默认脚本运行时间是90秒。
    你可以从“Internet信息服务”中“默认Web站点”的属性弹出框中看出,你也可以自己设定。

    呵呵,上面的可不是,900秒了。
    应该是“主目录”标签中的“配置”对话框中,WINXP一样。

    在理解脚本运行时间之前,先来看一个程序,主要功能就是进行计算网页执行时间的。
    <script language=vbs>
    startime=timer()
    //以下为网页内容
    for i= 1 to 5000 step 20
    document.write("<hr width="&int(500+i)&">")
    next
    //结束时间
    endtime=timer()
    document.write ("页面执行时间:"&FormatNumber((endtime-startime)*1000,3)&"毫秒")
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    当然对应的ASP也就是看到许多站点都有的页面执行时间显示

    1,time.asp


    <%startime=timer()%>
    <a href=#bot>到下面看执行的时间</a>
    <%
    for i= 1 to 5000
    response.write("<hr width="&int(500+i)&">")
    next
    %>
    当然中间还可以添加其它内容。<br>
    <%endtime=timer()%>
    <a name=bot></a>
    <%=FormatNumber((endtime-startime)*1000,3)%>毫秒


    那如果上面的程序变成for i= 1 to 5000000
    呵呵,是不是机器快反应不过来的感觉,那这个就是脚本的执行时间了。
    为了让程序能很好的执行,就该把脚本执行时间放长了。
    怎么放长?把默认的改?呵呵,当然不是:)


    <%Server.ScriptTimeout=110%>

    时间的设定当然要是比默认90秒大的,现在的代码就是:指定服务器处理脚本在 110 秒后超时。
    还有,脚本时间的确定要看自身的程序了,一般情况100秒左右也差不多了,即使能执行出来,可能观看网页的人早就把它叉叉了。

    以上的ScriptTimeout就是Server对象唯一属性了

    二,Server.HtmlEncode
    HtmlEncode就是Server对象的其中一个方法了。它允许你对特定的字符串进行 HTML 编码,虽然 HTML 可以显示大部分你写入 ASP 文件中的文本,但是当你需要实际包含 HTML 标记中所使用的字符,就会遇到问题。这是因为,当浏览器读到这样的字符串时,会试图进行解释。

    还是看一个程序,我想在页面显示“&nbsp;”这样的代码(附:&nbsp;是空格的代码)
    那么当我进行书写的时候你会发现,浏览器已经给我解释了的。
    空格的代码是:&nbsp;<br>
    你会发现上面的代码都被执行了。
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    所以,为了要让一些特殊代码能够显示,就运用该方法了。

    2,htmlencode.asp


    <%Response.write ("这是没有采用 HTMLEncode 方法的测试。<br> 这里就另起一行,说明代码被执行。&nbsp;")%>
    <hr>
    <%Response.write Server.HtmlEncode("这是对 HTMLEncode 方法的测试。<br> 这里应该不会另起一行,也就是代码没有被执行了。&nbsp;")%>

    这在许多网站,论坛都存在的一些BUG,不信你可以到各论坛试试:敲入&nbsp;就是没有,急死你呢:)当然HtmlEncode只是其中的一个原因,最主要的还是UBB代码的转换。不过关于这点我也已经调试解决了。
    调试地址参看 http://www.cnbruce.com/juven/showart.asp
    当然经典论坛不存在这问题,要不你也不会看到效果了。

    三,Server.UrlEncode
    正如 HtmlEncode 方法使客户可以将字符串翻译成可接受的 HTML 格式一样,Server 对象的 UrlEncode 方法则是根据 URL 规则对字符串进行正确编码,当字符串数据以 URL 的形式传递到服务器时,在字符串中不允许出现空格,也不允许出现特殊字符。为此,如果你希望在发送字符串之前进行 URL 编码,可以使用 Server.URLEncode 方法。
    为方便起见,我们先看为处理送交,然后处理接受的效果。

    3,urlencode.asp


    <%filepath=request.servervariables("script_name")%>
    接受URL中的值(没有处理接受值,发现值被解释了): <%=request.querystring("cnbruce")%>
    <form action="<%=filepath%>">
    你可以输入“&lt;hr&gt”等代码看看:<input type="text" size="20" name="cnbruce"><input type="submit">
    </form>
    接受URL中的值(进行了urlencode编码,不会执行): <%=Server.URLEncode(request.querystring("cnbruce"))%>


    当然你会发现,虽然不执行了,但会出现“<”变成了“%3C”,“>”变成了“%3E”,那这就是因为没有在发送之前处理。
    不过,我们还可以通过Replace函数将这些特殊代码再逆转过来。

    4,vurlencode.asp


    <%
    function tihuan(what)
    tihuan=what
    if not isnull(what) then
    tihuan=replace(tihuan,"%3C","&lt;")
    tihuan=replace(tihuan,"%3D","=")
    tihuan=replace(tihuan,"%3E","&gt;")
    tihuan=replace(tihuan,"%26","&amp;")
    tihuan=replace(tihuan,"%20","&nbsp;")
    tihuan=replace(tihuan,"%3B",";")
    tihuan=replace(tihuan,"%22","&quot;")
    tihuan=replace(tihuan,"%2B","+")
    tihuan=replace(tihuan,"%2F","/")
    end if
    end function
    %>

    <%filepath=request.servervariables("script_name")%>

    接受URL中的值(没有处理接受值,发现值被解释了): <%=request.querystring("cnbruce")%>

    <form action="<%=filepath%>">
    你可以输入“&lt;hr&gt”等代码看看:<input type="text" size="20" name="cnbruce"><input type="submit">
    </form>
    接受URL中的值(进行了urlencode编码,不会执行): <%=tihuan(Server.URLEncode(request.querystring("cnbruce")))%>


    呵呵,其实上面我是做的无用功啦,真正应该是在发送之前就该处理下的,不过对学习该方法的举例确是个好方法:)

    四,Server.MapPath
    相信看过我写的《DW2ASP系列》的朋友,都卡在这个上了。DW毕竟是入门的好东西,但要系统学ASP编程,对这个就该好好认识了解下。
    MapPath方法,具体的就是将指定的相对或虚拟路径,映射到服务器上相应的物理目录上。
    用法,也就是语法了,如下:


    Server.MapPath(Path)

    Path 指定要映射物理目录的相对或虚拟路径。若 Path 以一个正斜杠 (/) 或反斜杠 (\) 开始,则 MapPath 方法返回路径时将 Path 视为完整的虚拟路径。若 Path 不是以斜杠开始,则 MapPath 方法返回同本文件中已有的路径相对的路径。这里需要注意的是 MapPath 方法不检查返回的路径是否正确或在服务器上是否存在。
    当然这可以和Request.ServerVariables连起来使用看看。

    5,mappath.asp


    Request.ServerVariables("APPL_PHYSICAL_PATH") : <%=Request.ServerVariables("APPL_PHYSICAL_PATH")%><p>
    Request.ServerVariables("PATH_INFO") : <%=Request.ServerVariables("PATH_INFO")%><p>
    Request.ServerVariables("SCRIPT_NAME") : <%=Request.ServerVariables("SCRIPT_NAME")%><p>
    Request.ServerVariables("URL") : <%=Request.ServerVariables("URL")%><p>
    Request.ServerVariables("PATH_TRANSLATED") : <%=Request.ServerVariables("PATH_TRANSLATED")%><hr>
    上面都是通过ServerVariables提取得出的值,下面就来运用mapath把一个虚拟地址转变为实际的物理地址。<p>
    Server.MapPath(Request.ServerVariables("URL")) :<%=Server.MapPath(Request.ServerVariables("URL"))%><p>
    或者自己随便写个不存在的路径,同样能够执行<p>
    Server.MapPath("cnbruce.asp") : <%=Server.MapPath("cnbruce.asp")%><p>
    再来个“/”的<p>
    Server.MapPath("/cnbruce.asp") : <%=Server.MapPath("/cnbruce.asp")%><br>
    Server.MapPath("\cnbruce.asp") : <%=Server.MapPath("\cnbruce.asp")%><p>
    你会发现物理地址转变到IIS默认根目录下面了。
    这就是如6to23之类的站点mappath的问题所在。还是虚拟主机好,即使是根,也还是自己站点的默认存放节点根。

    测试我的地址http://www.cnbruce.com/server.asp
    注意测试的地址和根目录下的地址,对应的是同一文件夹(这就是虚拟主机),6to23之类是不会相同的。

    有此些了解,对路径的处理应该要好多了,再返回我的站点,看看我对数据库的mappath路径的处理方法,相信又是一个理解层次了。
    数据库的mappath路径的处理方法在:
    http://www.cnbruce.com/blog/showlog.asp?cat_id=27&log_id=241

    五,Server.CreatObject
    Server.CreateObject 这个方法恐怕是 ASP 中最为实用,也是最强劲的功能了。它可用于创建已经注册到服务器上的 ActiveX 组件实例。这是一个非常重要的特性,因为通过使用 ActiveX 组件能够使你轻松地扩展 ActiveX 的能力,正是使用了 ActiveX 组件,你可以实现至关重要的功能,譬如数据库连接、文件访问、广告显示和其他 VBScript 不能提供或不能简单地依靠单独使用 ActiveX 所能完成的功能。也正是因为这些组件才使得 ASP 具有了强大的生命力。
    呵呵,不过,在我们没有谈及连接数据库之前,这个先空着,“要得好,到临了”:)等我们接触到数据库连接的时候再说不迟。

    恩,那今天就主要把Server对象学习了下,感觉好象是每个都有用的,重要啊。
    还有,需要说明的,如果您从本处转载,发现和本源件有差错,比如代码&nbsp; 、 &lt 、 &gt等等,根本就是被执行了的。都说明您的站点存在着这些问题。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:29:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客8
    发贴心情 
    (八):内置对象Session


    ASP对象中除了用于发送(Response)、接收和处理数据(requeest)、服务器访问(Server)的对象外,还有一些非常实用的标记Active Server应用程序(Application)和单个用户信息(Session)的对象。

    Session对象
    该对象在ASP使用中占相当大的比例。由于网页是一种无状态程序,无法得知用户浏览状态。在ASP中,通过Session对象来记录使用者私有的数据变量,以作为用户再次对服务器提出要求时做确认,用户在程序的Web页面之间跳转时,存在Session对象中的变量将不会消失。

    这些真的是很重要的功能,尤其是有会员的系统必须要用到的。像是会员的登入账号、时间、状态以及许许多多该记录的实时数据(如购物系统记录使用者的购物篮内的商品),这些信息属于各使用者私人所需要,通常开发者都是使用 Session 记录处理。

    在ASP中的Session是使用Cookies构成,服务器将所有的Session内记录的数据,以Cookies的方式传至用户的浏览器。通常一般浏览器会将这些Cookies存起来,每当使用者点选连结,再次与服务器做联机时,浏览器就会把这些Cookies传回Server供做处理:这即是Session的运作原理。由此可知会话状态Session仅在支持cookie的浏览器中保留,如果客户关闭了Cookie 选项Session也就不能发挥作用了。

    一、Session.SessionID
    SessionID 属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识,会话标识以长整形数据类型返回。在很多情况下 SessionID 可以用于 WEB 页面注册统计。

    利用该属性可以解决一种对用户的控制问题。该问题的主要功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块:也就是说一个会员名同时只能一个人浏览此模块。

    通过用会员名(假设为UserID,唯一)和SessionID来实现了控制。当会员登录时,给这个会员一个Session记录登录状态如:Session("Status")="Logged",同时把这个会员的Session.SessionID写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的SessionID是否与数据库记录的相同,如果不同则不能访问。

    这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的SessionID,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题,为公司保障了利益。


    <%=Session.SessionId%>
    是单独生成的唯一ID标识,可刷新调试。

    二、Session.TimeOut
    该属性设置的Session的最大间隔时间。间隔时间是指客户器端从最近一次向Web服务器提出要求,到下一次向Web服务器提出要求的时间。可以理解为:如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。Timeout 属性是以分钟为单位,为该应用程序的Session对象指定超时时限的,一般默认为20分钟。这在网吧等公共场所,登录个人信息页而忘记关闭窗口时,显得比较重要(至少可以把时间设短些)。


    <%Session.TimeOut=10%>

    以上SessionId、TimeOut属于Session对象的两个属性,下面看该对象的一个方法Abandon

    三、Session.Abandon
    该方法是Session对象的唯一方法,可以清除Session对象,用来消除用户的Session对象并释放其所占的资源。当然你如果没有明确调用Abandon方法,一旦会话超时,服务器也会将删除这些对象并释放资源。
    下面就用两个页的程序来认识Session对象以及Abandon方法的利用。

    1,login.asp


    <%
    '是提取url中变量loginout的值是否为true,若为真,就执行Session.Abandon()。
    if Request.QueryString("loginout")="true" then
    Session.Abandon()
    end if

    '只有在当点击了submit按钮的前提下,再来判断提取的东西都不为空,则建立Session对象。
    submitname=request.form("submit1")
    if submitname="submit" then
    if Request.Form("name")<>"" and Request.Form("pwd")<>"" then
    Session("name")=Request.Form("name")
    Session("pw")=Request.Form("pwd")
    end if
    end if
    %>
    <%
    '如果Session("name")不为空,则显示Session("name")的值,并且做一个到info.asp的链接。
    if Session("name")<>"" then
    response.write("你的name值是:"&Session("name"))
    response.write("<br><a href='info.asp'>显示你的资料</a>")
    else

    '否则,即Session("name")为空不存在,则显示表单用以输入建立Session的平台。
    %>
    <form action="login.asp" method="post">
    姓名:<input type="text" name="name"><br>
    密码:<input type="password" name="pwd"><br>
    <input type="submit" value="submit" name="submit1">
    </form>
    <!--同样做了一个到info.asp的链接。-->
    <a href="info.asp">显示你的资料</a>
    <%end if%>


    注意Session("name")为空和不为空的时候,都做了一个到info.asp的链接,具体调试结果如何,再来看info.asp的内容。

    2,info.asp


    <%
    '如果session对象值为空则跳转到login.asp
    if session("name")="" then
    Response.Redirect("login.asp")
    '否则就显示个人信息
    else
    Response.Write("你的姓名:"&session("name")&"<br>")
    Response.Write("你的密码:"&session("pw")&"<br>")
    end if
    %>
    <a href="login.asp">返回</a>
    <a href="login.asp?loginout=true">退出</a>


    可以看出来,info.asp页面内容的显示其实是需要条件的。那就是必须得有一个session值的存在,这样才可以显示具体的信息。这在登录系统中运用得比较多。

    你可以把login.asp想象成一个登录窗口,当然我的这个比较简单(只要输入用名和密码就生产Session了),实际情况是:判断输入的用名和密码是否和数据库中的用名和密码吻合,如果正确吻合才生成Session的。然info.asp页面的作用刚好可以做为一权限页面,因为进入该页需要Session,而Session的产生是确保用名密码正确的。

    所以当一开始出现表单窗口时,你点login.asp链接是打不开的,只有当提交了表单生成了Session后才能进入。这正是登录系统的精髓所在,Do You Know?:)

    四、Session_OnStart
    Session_OnStart属于Session对象的一类事件。它是在服务器创建新会话时发生的。服务器在执行请求的页之前先处理该脚本。Session_OnStart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。

    对象的例程每一次启动时触发Session_OnStart事件,然后运行Session_Onstart事件的处理过程。也就是说,当服务器接收到应用程序中的URL的HTTP请求时,触发此事件,并建立一个Session对象。

    当然说到Session_OnStart事件就不能不谈到一个文件Global.asa(P.S:我打算把该文件和Chat程序放在一起说的,所以现在先不作过多解释)
    具体用法先透露,写在Global.asa文件内部


    <SCRIPT RUNAT=Server Language=VBScript>
    .......
    Sub Session_OnStart
    .......
    End Sub
    .......
    </SCRIPT>


    五、Session_OnEnd
    一看也就知道是Session对象的另一类事件了。当调用Session.Abandon方法时或者在TimeOut的时间内没有刷新,这会触发Session_OnEnd事件,然后执行里面的脚本。同样具体用法在后面将写的Global.asa文件专题中详细介绍到,简单语法如下:


    <SCRIPT RUNAT=Server Language=VBScript>
    .......
    Sub Session_OnEnd
    .......
    End Sub
    .......
    </SCRIPT>


    最后,不知道大家有没有玩过这样的一个程序:很令人讨厌的,让你永远关不掉的程序页面。
    只做程序调试,不要去作弄别人。

    以下文件保存为bug.html

    <body onunload=javascript:window.open("bug.html")>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    发现该文件关不了了?(当然你要关闭,把源代码修改下)
    那现在的要求是:计算关闭的次数,如果超过多少次就可以自行关闭,那下面就采用到session

    以下文件保存为bug.asp


    <%if session("num") < 2 then%>
    <body onunload=javascript:window.open("bug.asp")>
    <%session("num")=session("num")+1%>
    <%else%>
    <script>
    self.close()
    </script>
    <%end if%>


    呵呵,当你关闭三次以后,窗口就再也不弹出了。了解吧:)
    以上就是对Session对象的系统学习。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:30:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客9
    发贴心情 
    (九):内置对象Application


    在Web应用程序中,当一个用户访问该应用时,Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据;如果另一个用户也同时访问该Web应用,他也拥有自己的Session变量,但两个用户之间无法通过Session变量共享信息,而Application类型的变量则可以实现站点多个用户之间在所有页面中共享信息。可以理解Session是局部变量,而Application则为全局变量。

    在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序。我们非但可以使用 Application 对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据。而且,Application 对象还有控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件。

    一、Application("name")=Value
    正如Session("name")=value一样,Application对象也没有内置的属性。当然用户可以自定义属性,该属性也可称为集合。

    一旦分配了Application对象的属性,它就会持久地存在,直到关闭WEB服务器服务使得 Application 停止。由于存储在 Application 对象中的数值可以被应用程序的所有用户读取,所以 Application 对象的属性特别适合在应用程序的用户之间传递信息。


    <%
    Application("MyName") = "cnbruce"
    %>


    二、Application.Lock
    Lock方法是禁止其他用户修改Application对象的属性,以确保在同一时刻仅有一个客户可修改和存取 Application 变量。如果用户没有明确调用 Unlock 方法,则服务器将会在 .asp 文件结束或超时后即解除对 Application 对象的锁定。最简单的就是进行页面记数的例子了。

    1,num.asp


    <%
    Application.Lock
    Application("NumVisits") = Application("NumVisits") + 1
    Application.Unlock
    %>
    你是本页的第<%=Application("NumVisits")%>位访问者


    当然,若如果你需要记数的初始值那就该写个判断了。


    <%
    if Application("NumVisits")<9999 then
    Application("NumVisits")=10000
    end if
    Application.Lock
    Application("NumVisits") = Application("NumVisits") + 1
    Application.Unlock
    %>
    你是本页的第<%=Application("NumVisits")%>位访问者

    上面的程序,你会发现每刷新一次,都会记数累加,如按IP值访问来记数的话,则建立一个Session

    2,vnum.asp


    <%
    if session("visitnum")="" then
    Application.Lock
    Application("NumVisits") = Application("NumVisits") + 1
    Application.Unlock
    session("visitnum")="visited"
    end if
    %>
    你是本页的第<%=Application("NumVisits")%>位访问者


    三、Application.Unlock
    与Lock方法相反,Unlock方法是允许其他用户修改 Application 对象的属性。可以看出在上面的例子中,Unlock方法解除对象的锁定,使得下一个客户端能够增加 NumVisits 的值。

    当然需要注意的是:记数要确保服务器不被重启,因为所以的访问是数值是建立在页面之上的,并未进行保存成文件或保存到数据库这样的处理。
    一般当服务器重新启动就会触发Application的事件了。

    四、Application_OnEnd
    Application_OnEnd 事件在应用程序退出时于 Session_OnEnd 事件之后发生,当然Application_OnEnd 事件的处理过程也必须写在 Global.asa 文件之中。
    比如上面的程序中,若服务器关机必然会触发Application_OnEnd事件,那么该事件就可以进行数据保存的工作,已使得下次数据的续沿。
    当然Application_OnEnd 事件在应用程序退出时于Session_OnEnd 事件之后发生


    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    .............
    Sub Application_OnEnd
    .............
    End Sub
    .............
    </SCRIPT>


    五、Application_OnStart
    Application_OnStart 事件在首次创建新的会话( 即 Session_OnStart 事件 )之前发生。当WEB服务器启动并允许对应用程序所包含的文件进行请求时就触发Application_OnStart事件。


    <SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>
    .............
    Sub Application_OnStart
    .............
    End Sub
    .............
    </SCRIPT>


    所以现在可以将Global.asa内部的代码可以想象


    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    Sub Application_OnStart
    .....................
    End Sub

    Sub Session_OnStart
    .....................
    End Sub

    Sub Session_OnEnd
    .....................
    End Sub

    Sub Application_OnEnd
    .....................
    End Sub
    </SCRIPT>

    具体Global.asa是怎么一回事?且听下回分解啊:)

    5大对象基本掌握了,来个例题练习下

    <%@ LANGUAGE = VBScript %>
    <% Option Explicit %>
    <Html>
    <title>猜数字游戏</title>
    <body>
    <%
    '设置页面不使用缓存
    Response.Expires = 0
    %>
    <%
    dim GuessNum
    on error resume next
    GuessNum=Request("Number")
    if GuessNum="" then GuessNum="0" End if
    GuessNum=Clng(GuessNum)

    Session("Count")=Session("Count") + 1
    if Session("Count") < 10 and GuessNum <> session("Number") then

    %>

    <form action="guessNumber.asp">
    <input type="text" name="Number">
    <input type="submit" value="提交">
    </form>
    <hr>
    <%
    end if
    if GuessNum<0 or guessNum>100 then
    Response.write "请输入1~100之间的整数"
    elseif GuessNum=0 then
    session("Count") = 0
    Randomize
    session("Number") = Int(rnd * 100 + 1)
    Response.write "请输入1~100之间的整数"
    elseif GuessNum > session("Number") then
    response.write "你猜的太大了"
    elseif GuessNum < session("Number") then
    response.write "你猜的太小了"
    elseif GuessNum = session("Number") then
    response.write "祝贺你,猜对了"
    end if

    Response.write "<br>共猜了" & Session("Count") & "次"
    if Session("Count")=10 then
    Response.write "答案是" & Session("Number")
    end if
    %>
    <a href="guessnumber.asp?Number=0">重新猜</a>
    </body>
    </html>

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:31:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客10
    发贴心情 
    (十):Global.asa文件


    我们已经知道Application和Session对象的OnStart、OnEnd事件的脚本,都必须是在 Global.asa 文件中声明的。那究竟Global.asa是什么样的一个文件?它的作用有何?又该如何运用呢?且听我慢慢道来。

    首先.asa是文件后缀名,它是Active Server Application的首字母缩写。Global.asa文件可以管理在ASP应用中两个非常苛刻的对象:Application、Session。

    它其实是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。该文件必须存放在应用程序的根目录内。每个应用程序只能有一个Global.asa文件。

    关于Global.asa文件最常见的错误概念是它能为一般的使用的函数和子程序用作书库。Global.asa文件仅能用于创建对象的引用和俘获启动,以及结束Application对象和Session对象。

    Global.asa文件主要基于会话级事件被访问,在以下三种情况下被调用:
    1,当Application_OnStart或Application_OnEnd事件被触发。
    2,当Session_OnStart或Session_OnEnd事件被触发。
    3,当引用一个在Global.asa文件里被实例化的对象(Object)。
    Global.asa的标准文件格式如下:


    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    Sub Application_OnStart
    'Application_OnStart 当任何客户首次访问该应用程序的首页时运行
    End Sub

    Sub Session_OnStart
    'Session_OnStart 当客户首次运行 ASP 应用程序中的任何一个页面时运行
    End Sub

    Sub Session_OnEnd
    'Session_OnEnd 当一个客户的会话超时或退出应用程序时运行
    End Sub

    Sub Application_OnEnd
    'Application_OnEnd 当该站点的 WEB 服务器关闭时运行
    End Sub
    </SCRIPT>


    一、Session_onStart
    先看一个控制用户进入页面的代码:
    1,Global.asa(放在被调试的虚拟目录的根目录下面)


    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    Sub Session_OnStart '只要是用户第一次登录本站,则会跳转到首页
    response.redirect("htp://www.cnbruce.com/")
    End Sub
    </SCRIPT>

    然后调试当前虚拟目录下的任何文件,你会发现所有页面都跳转向htp://www.cnbruce.com/
    通过此“强制进入某页”的例子,可以想象当首页需要被关注的时候是非常有必要的。

    下面就以一个“在线人数”的例子来继续观察Session_OnStart和Session_OnEnd事件

    二、Session_onEnd
    2,Global.asa(放在被调试的虚拟目录的根目录下面)


    <SCRIPT LANGUAGE=VBScript RUNAT=Server>
    Sub Application_onStart '初始值为0
    Application("OnLine") = 0
    End Sub

    Sub Session_onStart '一个用户访问进行记数加1
    Application.Lock
    Application("OnLine") = Application("OnLine") + 1
    Application.Unlock
    End Sub

    Sub Session_OnEnd '一个用户进程的结束,记数减1 (P.S.如果没有该事件程序,则执行的就是页面访问程序了。)
    Application.Lock
    Application("OnLine") = Application("OnLine") - 1
    Application.Unlock
    End Sub
    </SCRIPT>


    3,online.asp


    <%
    if request.querystring("logout")="true" then
    session.Abandon()
    response.end
    end if
    %>
    当前共有<%=Application("OnLine")%>在线
    <a href="online.asp?logout=true">退出</a>

    你发现在该页中只有一个Application("OnLine"),而且还是被显示引用的。那么其值来自何方?这正是Global.asa文件的关键所在。
    你可以在本机依次打开个窗口,进行进行关闭窗口或退出两种方法的调试。

    三、继续细化一下
    上面的程序你会发现:当进行“退出”连接后关闭窗口和直接关闭窗口效果是不一样的。因为Session存在时间的缘故,当直接进行关闭窗口,并不能触发Session_OnEnd事件,所以该如何实现这个几乎不可能的想法呢?

    大家都知道,当网页进行关闭的时候可以连带一个onunload事件,那么该onunload只要能执行Session的注销功能不就我们需要的吗?废话少说,将online.asp进行修改

    3,online.asp


    <%
    if request.querystring("logout")="true" then
    session.Abandon()
    response.end
    end if
    %>
    <body onunload=javascript:window.open("exit.asp")>
    当前共有<%=Application("OnLine")%>在线
    <a href="online.asp?logout=true">退出</a>


    注意,online.asp进行onunload的时候会打开exit.asp,那只要在exit.asp中再设置session.Abandon()不就OK了。

    4,exit.asp


    <%session.Abandon()%>
    <script>
    self.close()
    </script>

    当然,加了段Script脚本,目的是进行Session的注销以后立即进行关闭本身。
    那现在基本一个在线统计的Web应用就可以了。

    四、深入研究Global.asa
    从上面的调试中,举一反三的你,一定会提出一个问题:如何控制注册用户在线人数?
    那下面几个文件一个一个看:

    5,Global.asa(放在被调试的虚拟目录的根目录下面)


    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    Sub Application_OnStart
    application("online")=0
    End Sub

    Sub Session_OnStart
    End Sub

    Sub Session_OnEnd
    if session.contents("pass") then '判断是否为登录用户的Session_OnEnd
    application.lock
    application("online")=application("online")-1
    application.unlock
    end if
    End Sub

    Sub Application_OnEnd
    End Sub
    </SCRIPT>

    注意本Global.asa中的Session_OnStart块不做任何事件。

    因为一旦有用户访问服务器而不管用户是否登录,都会产生OnStart事件,而现在需要的只是登录用户的在线,所以不能在OnStart事件里使Applicaiton("online")加1。

    又因为不管是否是登录用户的会话结束都会产生OnEnd事件(假如有访客访问了服务器但并不登录,他的会话结束后也会产生OnEnd事件),所以在Session_OnEnd事件里用了句if语句来判断是否为已登录用户的OnEnd事件,如果是才将在线人数减1。

    并且值得注意的是:session.contents("pass")的使用,因为在OnEnd事件里禁止使用Session对象,但是可以用Session对象的集合来调用session变量。也就是说不能直接写session("pass"),而是需要写session.contents("pass")。

    6,login.asp


    <%
    if request.querystring("logout")="true" then
    session.Abandon()
    end if
    submitname=request.form("submit")
    if submitname="submit" then
    name=request.form("name")
    pwd=request.form("pwd")
    if name="cnbruce" and pwd="cnrose" then
    session("name")=name
    session("pass")=true
    else
    response.write "Error Name Or Pwd.<a href='login.asp'>Back</a>"
    response.end
    end if
    application.lock
    application("online")=application("online")+1
    application.unlock
    %>
    当前注册会员<%=application("online")%>人。
    <a href="login.asp?logout=true">退出</a>
    <%else%>
    <form action="login.asp" method="post">
    <input type="text" name="name"><br>
    <input type="password" name="pwd"><br>
    <input type="submit" name="submit" value="submit">
    <%end if%>

    只是简单地检测用名是cnbruce,密码是cnrose的时候,生成一个session("pass")=true,就是放在Global.asa中判断的。

    五,继续发挥想象
    想想,再想想。仅仅统计有多少人在线是不够的,还要判断用户的在线状态。
    可以想象办法基本,当用户登录的时候,在login.asp里将online设为1(如果有数据库则上传),但用户离线时将online设为0,要完善它,就要修改一下Session_OnEnd事件,在该事件里将online设为0(同样将为0的值上传)……

    当然,Global.asa远远不止这些。不过我们现在先不着急全部掌握,当我们接触到数据库的时候再返回过来看,继续研究该文件,相信到那时一定又会感悟到很多。所以,还是先把上面的这些吃透吧:)

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:32:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/19 21:51:27

    本主题贴数30,分页: [1] [2] [3]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    218.750ms