仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 662|回复: 10
打印 上一主题 下一主题

[学习教程] ASP网页设计深切研讨Application和Session工具(包含...

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:56:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
SQLServer是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。application|session|工具
用ASP编写假造社区、网上购物等程序时,Application和Session工具具有无足轻重的感化,可以天真公道地使用这两个工具是进步程序质量的关头。上面让笔者依据本人在这方面的履历,向人人深切先容一下ASP的这两个内建工具。

  1、Application工具的成员概述
  Application工具成员包含Application工具的汇合、办法和事务。
  ⒈Application工具的汇合
  Contents汇合:没有利用<OBJECT>元素界说的存储于Applicaiton工具中的一切变量的汇合
  StaticObjects:利用<OBJECT>元素界说的存储于Application工具中的一切变量的汇合
  例:在default.asp中有以下赋值
  application("a")="a"
  application("b")=128
  application("c")=false
  则有contents汇合
  application.contents(1)="a"也可写为application.contents("a")="a"
  application.contents(2)=128也可写为application.contents("b")=128
  application.contents(3)=false也可写为application.contents("c")=false
  在此笔者保举你在挪用时利用类如application.contents("a")的办法,由于如许更加直不雅,假如用序号来暗示的话则要思索赋值的前后按次。
  ⒉Application工具的办法
  Contents.Remove("变量名"):从Application.Contents汇合中删除指定的变量
  Contents.RemoveAll():把Application.Contents汇合中的一切变量删除
  Lock():锁定Application工具,使得只要以后的ASP页对内容能举行会见
  Unlock():排除对Application工具的锁定
  例:在default.asp中:
  application("a")="a"
  application("b")=128
  application("c")=false
  response.writeapplication.contents(1)&"<br>"
  response.writeapplication.contents(2)&"<br>"
  response.writeapplication.contents(3)&"<br>"
  response.write"AfterRemoveb:"
  application.contents.remove("b")
  response.writeapplication.contents(1)&"<br>"
  response.writeapplication.contents(2)&"<br>"
  实行了局:
  a
  128
  False
  AfterRemoveb:
  a
  False
  假如要删除汇合中一切变量用application.contents.removeall便可,至于Lock和Unlock办法在实践中常常用到,读者也对照熟习,在此就不在包袱。
  ⒊Application工具事务
  OnStart:第一个会见服务器的用户第一次会见某一页面时产生
  OnEnd:当最初一个用户的会话已停止而且该会话的OnEnd事务一切代码已实行终了后产生,或最初一个用户会见服务器一段工夫(通常是20分钟)后仍旧没有人会见该服务器发生。
  想要界说application工具的OnStart和OnEnd事务里做甚么必要将代码写在Global.asa这个文件里(下文有举例),而且将该文件放在站点的根目次下(通常为Inetpubwwwroot)
2、Session工具的成员概述
  Session工具的成员比Application工具多一项属性,即:汇合、属性、办法、事务
  ⒈Session工具的汇合
  Contents:没有利用<OBJECT>元素界说的存储于特定Session工具的一切变量的汇合。
  StaticObject:利用<OBJECT>元素界说的、存储于Session工具中的一切变量的汇合。
  例:在default.asp中有以下赋值
  session("a")="a"
  session("b")=128
  session("c")=false
  则有contents汇合
  session.contents(1)="a"也可写为session.contents("a")="a"
  session.contents(2)=128也可写为session.contents("b")=128
  session.contents(3)=false也可写为session.contents("c")=false
  ⒉Session工具的属性
  CodePage:可读/可写。整型。界说用于在扫瞄器中显现页内容的代码页。代码页是字符集的数字值,分歧的言语利用分歧的代码页。比方,ANSI代码页为1252,日文代码页为932,简体中文代码页为936。
  LCID:可读/可写。整型。界说发送给扫瞄器的页面区域标识。LCID是独一地标识区域的一个国际尺度缩写,比方,2057界说以后区域的泉币标记是"£"。
  SessionID:只读。长整型。前往本会话的会话标识符。每创立一个会话,由服务器主动分派一个标识符。能够依据它的值判别两个用户是谁先会见服务器。
  Timeout:可读/可写。整型。为会话界说以分钟为单元的超时限制。假如用户在这个工夫内没有革新或哀求任何一个网页,则该用户发生的会话主动停止。缺省值是20。
以上属性在实践使用中感化不年夜,并且基础上不必要怎样修正,这几个属性也没甚么特别的中央。
  ⒊Session工具的办法
  Contents.Remove("变量名"):从Session.contents汇合中删除指定的变量
  Contents.Removeall():删除Session.contents汇合中的一切变量
  Abandon():停止以后用户会话而且取消以后Session工具。
  Session工具的Contents.Remove("变量名")和Contents.Removeall()办法与Application工具的基础上没甚么区分,为匡助了解,人人能够参照下面的例子将Application改成Session。这里要申明一下的是Contents.Removeall()和Abandon()的区分,实行这两个办法城市开释以后
  用户会话的一切Session变量,分歧的是Contents.Removeall()纯真地开释Session变量的值而不停止以后的会话,而Abandon()除开释Session变量外还会停止会话激发Session_OnEnd事务,但愿人人注重二者的区分。
  ⒋Session工具的事务
  OnStart:当ASP用户会话发生时触发,一旦有任一用户对本服务器哀求任一页面即发生该事务。
  OnEnd:当ASP用户会话停止时触发,当利用Abandon()办法或超时也会触发该事务。
  这两个事务和Application的OnStart、OnEnd事务一样,也是必需放在Global.asa文件里,下
面就重点和人人研讨一下这四个事务的利用。
3、Global.asa

  ASP的Application和Session工具表现了其他ASP内置工具所没有的特性--事务。每个访客会见服务器时城市触发一个OnStart事务(第一个访客会同时触发Application和Session的OnStart事务,但Application先于Session),每一个访客的会话停止时城市触发一个OnEnd事务(最初一个访客会话停止时会同时触发Application和Session的OnEnd事务,但Session先于Application)。
  OnStart和OnEnd这两个事务一样平常使用在假造社区中统计在耳目数、修正用户的在线离线形态等。要详细界说这两个事务,必要将代码写在Global.asa文件,并将该文件放在站点的根目次下(缺省是Inetpubwwwroot)。别的,Application和Session工具划定了在OnEnd事务里除Application工具外其他ASP内置工具(Response、Request、Server、Session...)一概不克不及利用。以下举一个假造社区统计在耳目数的例子来讲明怎样利用这两个事务。
  文件申明:
  global.asa位于d:Inetpubwwwroot目次下
  default.asp位于d:Inetpubwwwroot目次下,假造社区登录页面
  login.asp位于d:Inetpubwwwroot目次下,用于检测用户输出的用户名及暗码
  index.asp位于d:Inetpubwwwroot目次下,假造社区首页
  bbs.mdb位于d:Inetpubwwwroot目次下,存储用户信息的数据库
  数据库(ACCESS)布局:
  ===bbs表===
  id用户ID,长整型
  name用户名,文本型
  code暗码,文本型
  online在线形态,是/否
 
  ===global.asa===
  <scriptLANGUAGE="VBScript"RUNAT="Server">
  SubApplication_OnStart
   application("online")=0
  EndSub
  subApplication_OnEnd
  ndSub
  SubSession_OnStart
  EndSub
  SubSession_OnEnd
   ifsession.contents("pass")then判别是不是为登任命户的Session_OnEnd
    application.lock
    application("online")=application("online")-1
    application.unlock
   endif
  EndSub
  </script>
  ==============
  ===login.asp===
  ......暗码考证,毗连数据库,检测用户输出的用户名及暗码是不是准确
  if暗码考证经由过程then
   session("name")=rs("name")
   session("id")=rs("id")
   session("pass")=true
  else
   rs.close
   conn.close
   response.write"暗码毛病!"
   response.end
  endif
  application.lock
  application("online")=application("online")+1
  conn.Execute("updatebbssetonline=1whereid="&session("id"))将用户的形态设为在线
  application.unlock
  rs.close
  conn.close
  response.redirect"index.asp"初始化数据后跳转到社区首页
  ===========
  在本例中,用application("online")变量纪录已登录社区的在耳目数,由于一旦有效户会见服务器而不论用户是不是登录,城市发生OnStart事务,以是不克不及在OnStart事务里使Applicaiton("online")加一。由于不论是否是登任命户的会话停止城市发生OnEnd事务(假设有访客会见了服务器但其实不登录社区,他的会话停止后也会发生OnEnd事务),以是在Session_OnEnd事务里用了句if语句来判别是不是为已登任命户的OnEnd事务,假如是才将在耳目数减一。
  这只是一个统计在耳目数的复杂例子,关于一个完全的假造社区来讲,仅仅统计有几人在线是不敷的,在本例中数据库里有个online字段是用来纪录用户的在线形态,用户登录的时分,在login.asp里将online设为1,但用户离线时并未将online设为0,要完美它,就要修正一下Session_OnEnd事务,在该事务里将online设为0。
  ===global.sas===
  <scriptLANGUAGE="VBScript"RUNAT="Server">
  SubApplication_OnStart
   application("online")=0
   setapplication("conn")=Server.CreateObject("ADODB.Connection")
   application("db")=Server.MapPath("bs.mdb")此处最好利用相对路径bs.mdb,下文有具体先容
  EndSub
  subApplication_OnEnd
   setapplication("conn")=nothing
  EndSub
   SubSession_OnStart
  EndSub
  SubSession_OnEnd
   ifsession.contents("pass")then判别是不是为登任命户的Session_OnEnd
     application("con").open="driver={MicrosoftAccessDriver(*.mdb)};dbq="&application("db")
     application.lock
     application("online")=application("online")-1
     application("con").Execute("updatefriendssetonline=0whereid="&session.contents("id"))
     application.unlock
     application("con").close
   endif
  EndSub
  </script>
  ==============
  至此,完全的代码已完成了。由于在Application和Session的OnEnd事务里不克不及利用Server工具,以是要将数据库的毗连及数据库在服务器上的物理地点(d:inetpubwwwrootbs.mdb)存储在application变量中,并在Application_OnStart事务中事后处置。同理,在Session_OnEnd事务中不克不及用session("pass")来取代session.contents("pass")(以下有细致申明)。
  4、本文实例中值得引发注重的两点
  ⒈OnEnd事务里的session.contents
  刚入手下手打仗global.asa的伴侣常常会将下面Session_OnEnd事务里的
  ifsession.contents("pass")then 写成
  ifsession("pass")then,
  如许的话体系不会提醒毛病,可是永久也不会实行then前面的内容,这是由于在OnEnd事务里克制利用Session工具,可是能够用Session工具的汇合来挪用session变量。由于IIS并没提醒任何毛病信息,以是笔者已经在这下面华侈了良多工夫。在此但愿人人引觉得鉴!
  ⒉Application_OnStart事务里用Server.MapPath猎取数据库的物理地点时应利用相对地点为了申明这个成绩,人人能够做个实行:将下面Application_OnStart事务里的
  application("db")=Server.MapPath("bs.mdb")改成:
  application("db")=Server.MapPath("bbs.mdb")
然后在d:inetpubwwwroot目次下创建一个test子目次,写一个temp.asp在test目次里。
  ====test.asp====
  <%response.writeapplication("db")%>
  ================
再将temp.asp拷贝一份放在根目次下(d:inetpubwwwroot)。用记事本翻开global.asa,再翻开两个扫瞄器,扫瞄器A输出地点http://localhost/temp.asp,按回车,将在扫瞄器上输入:
  d:inetpubwwwrootbs.mdb
然后,在记事本的窗口上点"文件"菜单,选"保留"(使global.asa的修正工夫改动,从而使IIS重启动一切服务),再在扫瞄器B输出地点http://localhost/test/temp.asp,按回车,在扫瞄器上输入的是:
  d:inetpubwwwroot        estbs.mdb
global.asa文件固然是放在站点根目次下,可是假如在server.mappath中利用的是绝对地点,而触发Application_OnStart事务的用户第一次会见的页面又不是属于根目次的话,失掉数据库的物理地点将不会是希冀的了局,但愿人人要出格当心。

优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合activeX功能强大,很多php做不到的asp+activeX能做到,例如银行安全控件
山那边是海 该用户已被删除
沙发
发表于 2015-1-20 06:24:17 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
乐观 该用户已被删除
板凳
发表于 2015-1-20 21:26:17 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
莫相离 该用户已被删除
地板
发表于 2015-1-30 05:38:09 | 只看该作者
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-1-30 14:24:15 | 只看该作者
我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。
分手快乐 该用户已被删除
6#
发表于 2015-2-1 16:20:33 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
深爱那片海 该用户已被删除
7#
发表于 2015-2-7 08:25:54 | 只看该作者
在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
若天明 该用户已被删除
8#
发表于 2015-2-21 06:16:28 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-6 19:45:19 | 只看该作者
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
admin 该用户已被删除
10#
发表于 2015-3-13 07:08:27 | 只看该作者
尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
因胸联盟 该用户已被删除
11#
发表于 2015-3-20 16:07:19 | 只看该作者
尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-25 13:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表