面向.NET的Web应用程序设计内置对象PPT课件_第1页
面向.NET的Web应用程序设计内置对象PPT课件_第2页
面向.NET的Web应用程序设计内置对象PPT课件_第3页
面向.NET的Web应用程序设计内置对象PPT课件_第4页
面向.NET的Web应用程序设计内置对象PPT课件_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020 4 23 1 面向 NET的Web应用程序设计 梁辉 2020 4 23 2 第7章ASP NETWebForms 7 2Page对象 7 3Response对象 7 4Request对象 7 5Server对象 7 7Session对象 7 7Application对象 7 1创建WebForms 2020 4 23 3 7 1创建WebForms ASP NET引入了一种新的Web编程方法 对于使用传统编程语言如VisualBasic或C 的人 这种方法是很熟悉的 作为程序员 我们再也不必将HTML和代码混在一起 再也不必从上往下一行一行的写代码了 ASP NET让代码和表现分开 ASP NET的页面是事件驱动和面向对象的 就是说 程序员能为事件提供代码 如按钮的点击 页面的调用等等 在页面中能被编程访问的每个标记都有一个runat server的属性 尽管标准的HTML控件仍能被使用 但ASP NET提供了更加强大的服务端控件 这些控件提供了一套自己的方法和属性 通过它们能充分的定制控件的输出 这些控件和页面一起被编译 它们依据客户端浏览器的版本输出不同的HTML 这就使得我们不需要考虑浏览器兼容的问题 一个页面可以在任何的浏览器上运行 B 第7章目录 2020 4 23 4 7 1创建WebForms 一 CODEBEHIND简介CODEBEHIND就是所谓的代码分离 自从MICROSOFT公司推出了ASP NET以后 CODEBEHIND就是一个热门的话题 在一般的ASP NET文件中 CODEBEHIND主要是用二个文件来创建一个ASP NET的页面 其中一个是设计文件 一般以 ASPX或者 ASCX做为扩展名 而另外一个是程序代码文件 一般以 VB或者 CS做为扩展名 其程序设计语言主要是VB NET或者是C 第7章目录 2020 4 23 5 7 1创建WebForms 二 CODEBEHIND优点用过ASP编过程序的人都知道 ASP程序是把界面设计和程序设计混合在一起的 因此当程序设计人员要修改应用程序界面布局的时候 就往往需要更改大量与界面无关的代码 对于一个小程序 工作量不是很大 如果对于代码量很大的程序 就是一项工作量不小的事情 第7章目录 2020 4 23 6 7 1创建WebForms 第7章目录 2020 4 23 7 7 1创建WebForms 而CODEBEHIND把界面设计代码和程序设计代码以不同的文件分开 对于代码的重复使用 程序的调试和维护都是革命性的 还有一点是 当你发布你的网站的时候 你就可以利用这种技术来有效的保护你的代码 这对于程序的安全性是一个提高 CODEBEHIND技术的出现有点象过去VB或者是DELPHI出现一样 这也就是他为什么一出现就成为一个热门话题的原因 第7章目录 2020 4 23 8 7 2Page对象 理解类与对象在ASP NET中 对象都是由类来定义的 类用于描述对象的字段 属性 方法和事件 对象则是类的实例 定义了一个类以后 可以用该类来创建所需的任何数量的对象 每个类都拥有各自的属性 方法 集合和事件 属性用于描述对象的性质 表示对象的静态特性 方法用于描述对象的行为 表示对象的动态特性 集合是由一组相关的值或对象组成 集合提供了一种对相关对象进行分组和管理的方法 事件则是指对象在一定条件下产生的信息 访问对象的属性 调用对象的方法 集合本身也有属性和方法 例如 利用集合的Count属性可以获取集合中包含的对象数目 利用集合的Add方法可以将一个指定的对象追加到集合的结尾 通过索引值可以获得对集合中成员的引用 而且允许使用ForEach in循环依次获取集合的成员 第7章目录 2020 4 23 9 7 2Page对象 ASP NET内置对象 第7章目录 2020 4 23 10 7 2Page对象 7 2 1Web窗体代码模型1 ASP NETPage类虽然一个Web窗体由两个单独的文件组成 但这两个文件在应用程序运行时形成了一个整体 项目中所有Web窗体的代码隐藏类文件都被编译成由项目生成的一个动态链接库文件 dll 存放Web窗体视觉元素的 aspx页文件也会被编译 但编译的方式稍有不同 当用户第一次浏览到 aspx页时 ASP NET自动生成表示该页的 NET类文件 并将其编译成另一个 dll文件 2 从Page类派生当VisualStudio NET为Web窗体创建页和类文件时 它将生成从Page基类继承的代码 例如 如果创建新的Web窗体并将其命名为WebForm1 则会从System Web UI Page类派生一个名为WebForm1的新类 3 单文件Web窗体在单文件模型中 用户界面元素和程序代码位于同一文件中 单文件Web窗体在功能上与由两个文件组成的页非常类似 例如 在两种类型的页上使用的是相同的控件 用户仍使用相同的文件扩展名 aspx来请求页 页仍使用服务器端代码来运行 并且页会以流的形式将HTML发送到客户端 单文件页具有易于部署的优点 第7章目录 2020 4 23 11 7 2Page对象 WebServer对页面的处理原理MicrosoftInternet信息服务 IIS 所收到的对某MicrosoftASP NET页面的每个请求都被移交给ASP NETHTTP管线 HTTP管线由一系列托管对象组成 这些对象按顺序处理该请求 并完成从URL到普通HTML文本的转换 HTTP管线的入口点是HttpRuntime类 ASP NET基础结构为辅助进程中所承载的每个AppDomain创建此类 何类 的一个实例 请注意 该辅助进程为当前正在运行的每个ASP NET应用程序维护一个不同的AppDomain HttpRuntime类从内部池中选取一个HttpApplication对象 并让其处理该请求 HTTP应用程序管理器所完成的主要任务就是找出将实际处理该请求的类 如果请求 aspx资源 则处理程序就是一个页面处理程序 即某个继承自Page的类的一个实例 资源类型和处理程序类型之间的关联关系存储于该应用程序的配置文件中 更准确地说 在machine config文件的部分中定义默认的一组映射关系machine config 然而 应用程序也可以在本地的web config文件中自定义自己的HTTP处理程序列表 下面的程序行举例说明了定义用于 aspx资源的HTTP处理程序的代码 第7章目录 2020 4 23 12 7 2Page对象 扩展名可关联到一个处理程序类 或者更普遍地关联到一个处理程序工厂 handlerfactory 类 在所有情况下 负责处理请求的HttpApplication对象都会获得一个实现IHttpHandler接口的对象 如果根据HTTP处理程序来解析关联资源 类 那么所返回的类将直接实现该接口 如果资源绑定到处理程序工厂 则需要另外一个步骤 处理程序工厂类实现IHttpHandlerFactory接口 而该接口的GetHandler方法返回一个基于IHttpHandler的对象 HTTP运行时如何能完成整个循环并处理页面请求呢 IHttpHandler接口特别提供了ProcessRequest方法 通过对代表所请求页面的对象调用此方法 ASP NET基础结构启动相应过程 从而针对浏览器生成输出 第7章目录 2020 4 23 13 7 2Page对象 页面生存周期一旦完全确定HTTP页面处理程序类 ASP NET运行时就调用该处理程序的ProcessRequest方法以处理请求 通常情况下 无需更改此方法的实现方式 因为它是由Page类提供的 此实现方法一开始就调用FrameworkInitialize方法 以此建立页面的控件树 此方法是TemplateControl类 Page类本身就是从该类派生出来的 的一个受保护的虚拟成员 任何针对 aspx资源而动态生成的处理程序都重写FrameworkInitialize 在此方法中 该页面的完整控件树得以构建 接下来 ProcessRequest使该页面经历若干阶段 初始化 加载视图状态信息和回发数据 加载页面的用户代码并执行回发服务器端事件 随后 该页面进入呈现模式 收集更新后的视图状态 生成HTML代码然后将其发送到输出控制台 最后 卸载页面 并认为已完成对该请求的处理 第7章目录 2020 4 23 14 7 2Page对象 在各个阶段中 页面都会激发一些Web控件和用户定义的代码所能截获并处理的事件 其中的一些事件是嵌入式控件专用的 因而并不能在 aspx代码级进行处理 如果页面想要处理某个事件 它应该显式地注册相应的处理程序 然而 为了向后兼容早期的VisualBasic编程风格 ASP NET也支持一种隐式的事件挂起形式 在默认情况下 页面将尝试把特定的方法名与事件匹配起来 如果找到匹配的方法 就认为该方法是该事件的处理程序 ASP NET提供了六个方法名的特定识别 它们是Page Init Page Load Page DataBind Page PreRender和Page Unload 这些方法被当作是Page类所提供的相应事件的处理程序 HTTP运行时将自动把这些方法与页面事件绑定起来 这样一来 开发人员就不必编写所需的粘接代码 例如 名为Page Load的方法与页面的Load事件绑定 就像已编写以下代码一样 第7章目录 2020 4 23 15 7 2Page对象 this Load newEventHandler this Page Load 这种自动识别特殊名称的功能由 Page指令的AutoEventWireup属性控制 如果将该属性设置为false 则任何想要处理某个事件的应用程序都需显式地连接到该页面事件 如果页面不使用自动事件关联功能 就不必进行额外的操作以匹配各名称和事件 从而其性能也稍有提升 应该注意的是 所有的MicrosoftVisualStudio NET项目在创建时都禁用了AutoEventWireup属性 然而 此属性的默认设置为true 意味着诸如Page Load等方法会被识别并被绑定到相关的事件 第7章目录 2020 4 23 16 7 2Page对象 页面的执行过程包括下面表格中所列的一系列阶段 并以具有一些应用程序级事件和 或受保护且可重写的方法为特征 第7章目录 2020 4 23 17 7 2Page对象 执行的各个阶段页面生存周期中的第一个阶段是初始化 这一阶段的标志就是Init事件 在成功创建页面的控件树后 对应用程序激发这个事件 换而言之 当Init事件发生时 在 aspx源文件中静态声明的所有控件都已实例化并取其默认值 控件可挂起Init事件 以便初始化在传入的Web请求的生存周期中所需的任何设置 例如 此时控件可以加载外部模板文件或设置各个事件的处理程序 应该注意到 这时还没有视图状态信息可供使用 在初始化之后 页面框架立即加载该页面的视图状态 所谓视图状态就是一些名称 值对的集合 控件和页面本身可将那些对所有Web请求都必须始终有效的任何信息存储在其中 视图状态表示页面的调用上下文 一般情况下 其中包含上次在服务器中处理该页面时各控件的状态 首次在会话中请求页面时 视图状态为空 在默认情况下 视图状态被存储在一个隐藏字段中 而该字段是自行添加到页面中的 该字段名称为 VIEWSTATE 通过重写LoadViewState方法 Control类的一个受保护且可重写的方法 组件开发人员可控制如何还原视图状态以及如何将其内容映射到内部状态 第7章目录 2020 4 23 18 7 2Page对象 一旦还原了视图状态 页面树中的各个控件的状态就与浏览器上次呈现该页面时这些控件所处的状态相同 下一步包括更新这些控件的状态以加入客户端的变更 回发数据处理阶段使各个控件有机会更新其状态 以便准确地反映相应的HTML元素在客户端的状态 例如 一个服务器TextBox控件对应的HTML元素是 在回发数据阶段 TextBox控件将检索标记的当前值并用它刷新其内部状态 每个控件负责从已发送的数据中提取相应值 并更新其某些属性 TextBox控件将更新其Text属性 而CheckBox控件将刷新其Checked属性 服务器控件和HTML元素之间的匹配关系由二者的ID确定 在回发数据处理阶段结束时 页面中的所有控件都根据客户端上所输入的更改来更新原先的状态 此时 对页面激发Load事件 第7章目录 2020 4 23 19 7 2Page对象 如果在处理两个不同的请求时某个敏感的属性被修改 则页面上可能有些控件需要完成某些任务 例如 如果在客户端修改了某个文本框控件的文本 则该控件激发TextChanged事件 如果利用来自客户端的值对该控件的一个或多个属性进行修改 每个控件可以决定激发一个适当的事件 对控件而言 如果这些更改是至关重要的 则这些控件实现IPostBackDataHandler接口 在Load事件之后立即调用该接口的LoadPostData方法 通过编写LoadPostData方法的代码 一个控件可以确认自最近一次请求以来是否发生了任何关键的更改 并激发自己的更改事件 第7章目录 2020 4 23 20 7 2Page对象 页面生存周期内的关键事件就是 它被调用来执行与客户端上所激发的某个事件相关联的服务器端代码 当用户单击某个按钮时 页面回发数据 已发送值的集合中包含该按钮 该按钮启动整个操作 的ID 如果已知该控件实现了IPostBackEventHandler接口 按钮和链接按钮将实现此接口 则页面框架调用RaisePostBackEvent方法 此方法所进行的操作取决于相应控件的类型 对于按钮和链接按钮 此方法查找Click事件处理程序并运行相关的委托 在处理回发事件后 页面就准备进行呈现 这一阶段的标志是PreRender事件 各个控件可利用这个很好的时机 以便执行任何需要在保存视图状态和呈现输出结果的前一刻完成的最后一些更新操作 下一个状态为SaveViewState 在这一状态中所有控件以及页面本身可以刷新自己的ViewState集合的内容 所得到的视图状态随后得以序列化 进行哈希运算 进行Base64编码并关联到 VIEWSTATE隐藏字段 第7章目录 2020 4 23 21 7 2Page对象 通过重写Render方法 即可更改各个控件的呈现机制 该方法获取一个HTML编写器对象 并使用该对象聚集所有将针对该控件生成的HTML文本 Page类的Render方法的默认实现方式包括对所有成员控件的递归调用 对于每个控件 页面都调用Render方法并将HTML输出放入高速缓存 一个页面的最后生存标志就是Unload事件 该事件在页面对象被解除之前发生 在此事件中 您应该释放可能占用的任何关键资源 例如 文件 图形对象 数据库连接 终于 在此事件之后 浏览器收到HTTP响应数据包并显示页面 第7章目录 2020 4 23 22 7 2Page对象 7 2 2Page对象的属性P70ApplicationCacheClientTargetControlsEnableViewStateErrorPageIsPostBackIsValidRequestResponseServerSessionTraceValidators7 2 3Page对象的方法DataBind FindControl id HasControls IsClientScriptBlockRegistered key IsStartupScriptRegistered key LoadControl virtualPath MapPath virtualPath ParseControl content RegisterClientScriptBlock key script RegisterHiddenField hiddenFieldName hiddenFieldInitialValue RegisterOnSubmitStatement key script ResolveUrl relativeUrl Validate 第7章目录 2020 4 23 23 7 2Page对象 7 2 4Page对象的事件AbortTransaction 当用户中止事务时发生CommitTransaction 当事务完成时发生DataBinding 当该页上的服务器控件绑定到数据源时发生Disposed 当从内存释放服务器控件时发生 这是请求ASP NET页时服务器控件生存期的最后阶段Error 当引发未处理的异常时发生Init 当该页上的服务器控件初始化时发生 这是控件生存期的第一步Load 当该页上的服务器控件加载到Page对象中时发生PreRender 当该页上的服务器控件将要呈现给其包含的Page对象时发生Unload 当该页上的服务器控件从内存中卸载时发生 第7章目录 2020 4 23 24 7 3Response对象 7 3 1Response对象概述P45主要属性BufferOutputCacheCacheControlCharsetContentEncodingContentTypeExpiresExpiresAbsoluteIsClientConnected主要方法AppendHeader name value AppendToLog param BinaryWrite buffer ClearContent ClearHeaders End Flush Redirect url Write str WriteFile filename 第7章目录 2020 4 23 25 7 3Response对象 7 3 2输出信息使用Response对象的Write方法可以将信息写入HTTP输出内容流 Write方法有多种语法格式 最常用的语法格式如下 Response Write str 其中参数str给出要写入HTTP输出流的字符串 既可以是字符串常量 也可以是字符串类型的表达式 7 3 3输出文件使用Response对象的WriteFile方法可以将指定的文件直接写入HTTP内容输出流 WriteFile方法有多种语法格式 最常用的语法格式如下 Response WriteFile filename 其中参数filename指定要写入HTTP输出的文件名 第7章目录 2020 4 23 26 7 3Response对象 7 3 4重定向网址在某些情况下 可能需要将用户重新定向到其他页面上 例如 如果用户想访问一个要求登录的页面 可以将用户引导到登录页面上 如果用户输入的表单信息不完整 可以将用户引导到该表单处重新输入 使用Response对象的Redirect方法可以使浏览器尝试连接到其他网址 有以下两种语法格式 Response Redirect url Response Redirect url endResponse 其中参数url是要重定向的目标位置 可以为该参数指定一个绝对URL或相对URL 但有些浏览器可能不接受相对URL 参数endResponse指示当前页的执行是否应终止 第7章目录 2020 4 23 27 7 4Request对象 7 4 1Request对象概述P47主要属性ApplicationPathBrowserContentEncodingContentLengthContentTypeCookiesCurrentExecutionFilePathFilePathFilesFormHttpMethodItemParamsPathPathInfoPhysicalApplicationPathPhysicalPathQueryStringRequestTypServerVariablesTotalBytesUrlUserHostAddressUserHostName主要方法MapPath virtualPath SaveAs filename includeHeaders 第7章目录 2020 4 23 28 7 4Request对象 7 4 2读取窗体变量1 使用Request Form属性读取窗体变量例如 Request Form txtUserName Request Form txtPassword 2 使用Request QueryString属性读取窗体变量例如 Request QueryString txtUserName Request QueryString txtPassword 3 使用Request Param属性读取窗体变量例如 Request Param txtUserName Request Param txtPassword 4 通过服务器控件的属性直接读取窗体变量例如 txtUserName TexttxtPassword Text 第7章目录 2020 4 23 29 7 4Request对象 7 4 3读取查询字符串变量查询字符串变量可以通过以下几种方式生成 1 若将HtmlForm控件的Method属性设置为get 则当用户提交网页时 窗体数据将作为查询字符串变量附在网址后面被发送到服务器端 2 使用 标记或HyperLink控件创建超文本链接时 可以将查询字符串放在目标URL后面 并使用问号 来分隔URL与查询字符串 若要通过查询字符串发送多个变量 则使用 符号分隔各个变量 3 调用Response Redirect方法时 若在网址参数后面附有变量名 值对 则打开目标网页时这些变量值附在该网址后面被发送到服务器端 4 在浏览器地址栏中键入请求URL时 在URL后键入问号 和查询字符串 例如 http server test aspx UserName 张三丰 Age 20在上述场合 均可通过Request QueryString属性来检索查询字符串变量 例如 Request QueryString UserName Request QueryString Age 第7章目录 2020 4 23 30 7 4Request对象 7 4 4读取服务器变量通过Request对象的ServerVariables属性可以获取Web服务器变量的集合 该属性值是包含服务器变量的NameValueCollection对象 7 4 5读取客户端浏览器功能信息使用Request对象的Browser属性获取有关正在请求的客户端的浏览器功能的信息 该属性值是列出客户端浏览器功能的HttpBrowserCapabilities对象 第7章目录 2020 4 23 31 7 4Request对象 7 4 7读取客户端Cookiep51Cookie是在HTTP协议下服务器或脚本可以维护客户工作站上信息的一种方式 Cookie是由Web服务器保存在用户浏览器上的小文本文件 它可以包含有关用户的信息 这些信息以名 值对的形式储存在文本文件中 无论何时 只要用户连接接到服务器 Web站点就可以访问Cookie信息 临时的Cookie只在浏览器上保存一段时间 一旦超过规定的时间该Cookie就会被系统清除 持续的Cookie则保存在用户的Cookie文件中 当下一次用户返回时 仍然可以对它进行调用 Cookies集合是由一些Cookie对象组成的 Cookie对象的类名为HttpCookie HttpCookie类的主要属性如下 DomainExpiredExpiresHasKeysNamePathSecureValueValues 第7章目录 2020 4 23 32 7 5Server对象 7 5 1Server对象概述P54两个属性MachineNameScriptTimeout常用方法ClearError CreateObject progID Execute path GetLastError HtmlDecode s HtmlEncode s MapPath path Transfer path UrlDecode s UrlEncode s UrlPathEncode s 第7章目录 2020 4 23 33 7 5Server对象 7 5 2执行其他ASP NET网页使用Server对象的Execute方法可以在当前页面中执行同一Web服务器上的另一页面 当该页面执行完毕后 控制流程将重新返回到原页面中发出Server Execute方法调用的位置 被调用的页面应是一个 aspx网页 而且在该页面中可以访问原页面的表单数据和查询字符串集合 因此 通过Server Execute方法调用可以将一个 aspx页面的输出结果插入到另一个 aspx页面中 Server Execute方法有以下两种语法格式 Server Execute path Server Execute path writer 上述两种语法格式都使用指定URL位置的另一页执行当前请求 但在第二种语法格式中将使用TextWriter对象来捕获该页的输出 TextWriter是StreamWriter和StringWriter的抽象基类 它们将字符分别写入流和字符串 通过创建一个TextWriter实例 可以将对象写入字符串 或将字符串写入文件 或序列化XML 第7章目录 2020 4 23 34 7 5Server对象 7 5 3将流程控制转移到其他ASP NET网页使用Server对象的Transfer方法可以终止当前页的执行 并将执行流程转入同一Web服务器的另一个页面 被调用的页面应是一个 aspx页面 在页面跳转过程中 Request Session等对象保存的信息不变 这意味着从页面A跳转到页面B后可以继续使用页面A中提交的数据 此外 由于Server Transfer方法调用是在服务器端进行的 客户端浏览器并不知道服务器端已经执行了一次页面跳转 所以实现页面跳转后浏览器地址栏仍将保存页面A的URL信息 这样还可以避免不必要的网络通信 从而获得更好的性能和浏览效果 Server Transfer方法有以下两种语法格式 Server Transfer path Server Transfer path preserveForm 使用上述两种语法格式都可以终止当前页的执行 并使用指向一个新页的指定URL路径来开始执行此新页 参数path指定在服务器上要执行的新页的URL路径 在此URL后面也可以附加一些查询字符串变量的名称 值对 参数preserveForm指定是否保存QueryString和Form集合 若该参数为True 则保存这些集合 若为False 则清除它们 默认为False 第7章目录 2020 4 23 35 7 5Server对象 7 5 4将虚拟路径转换为物理文件路径在Web窗体页中经常需要访问文件或文件夹 此时往往要求将虚拟路径转换为物理文件路径 这个路径转换的任务可以通过Server对象的MapPath方法来完成 语法如下 Server MapPath path 其中参数path指定Web服务器上的虚拟路径 执行MapPath方法后 将返回与path相对应的物理文件路径 7 5 5字符串的编码与解码在某些情况下 可能需要在网页中显示 段落标记 之类的内容 而不希望浏览器将其中的解释为HTML语言中的段落标记 也可能想通过查询字符串发送字母和数字之外的字符 例如 空格 逗号 引号或感叹号等 在上述场合 应当调用Server对象的HtmlEncode方法对要在浏览器中显示的字符串进行编码 或者调用UrlEncode方法对字符串进行URL编码并返回已编码的字符串 反过来 若要将经过编码的内容译码还原 则可以使用Server对象的HtmlDecode或UrlDecode方法 第7章目录 2020 4 23 36 7 7Session对象 7 7 1Session对象概述p60常用属性CodePageContentsCountIsCookielessIsNewSessionIsReadOnlyItemKeysLCIDModeSessionIDStaticObjectsTimeout常用方法Abandon Add name value Clear Remove RemoveAll RemoveAt index 两个事件 StartEnd上述事件只能在global asax文件中使用 第7章目录 2020 4 23 37 7 7Session对象 7 7 2保存会话信息通过调用Session对象的Add方法可以将新的会话变量添加到会话状态中 语法如下 Session Add 变量名 值 例如 下面的代码将文本框中输入的用户名保存到会话变量中 Session Add UserName txtUserName Text 使用Session对象的Count属性可以获取会话状态集合中包含的对象数目 使用其Keys属性可以获取会话变量名的集合 使用其Item属性可以获取个别会话变量的值 此时Item关键字也可以省略 例如Session Item UserName 也可以写成Session UserName 第7章目录 2020 4 23 38 7 7Session对象 7 7 3强制结束会话通过调用Session对象的Abandon方法强制结束会话 Abandon方法到当前页面上的所有程序代码执行结束后才会起作用 在调用该方法后的该页上会话变量会继续保留其值 这意味着在调用Abandon方法的同一页面上仍然可以读取存储在Session对象中的变量 但在随后打开的页面上不能读取这些变量 例如 在下面的程序代码中 第三行的语句输出字符串 李逍遥 这是因为直到服务器处理完这些脚本后 才会消毁Session对象 Session Abandon Session Add UserName 李逍遥 Response Write Session UserName 第7章目录 2020 4 23 39 7 7Session对象 7 7 4判断是否创建了新的会话使用Session对象的IsNewSession属性可以判断指示会话是否是与当前请求一起创建的 如果会话是与当前请求一起创建的 则该属性值为True 表明创建了一个新的会话 否则为False 表明仍处在先前开始的一个会话中 7 7 5设置会话的有效期限每一个与Web服务器建立连接的客户端都拥有独立的会话进程 Web服务器管理这些进程时需要占用一定的系统资源 在现实生活中 有些用户在浏览网页的过程中 可能要去处理其他事件而没有关闭与服务器的连接 在这种情况下 如果服务器一直在管理与此相关的会话进程 就会造成系统资源的浪费 由于这个缘故 当用户联机后在一段时间内没有刷新或请求网页 就可以考虑结束会话进程 若要设置在会话状态提供程序终止会话之前各请求之间所允许的超时期限 设置Session对象的Timeout属性即可 默认值为20分钟 第7章目录 2020 4 23 40 7 7Session对象 7 7 7处理会话事件Session对象有两个事件 即Start事件和End事件 通过对这两个事件编写事件处理程序可以在会话开始和结束时执行指定的操作 这些事件处理程序的代码必须包含在一个名为Global asax的文件中 每当在VisualStudio NET中创建Web项目时总会自动创建该文件 1 Session Start事件当会话开始时发生Session Start事件 因为Session对象仅用于保存单个用户的信息 所以 如果在某段时间内有100个用户访问Web服务器 那么Session对象的Start事件就会发生100次 如果希望在创建会话时就执行一段程序 将这段程序放在Session Start事件过程中即可 2 Session End事件当调用Session Abandon 方法或在指定的时间内没有请求或刷新页面 便发生该事件并执行Session End事件过程 相应的Session对象随之自动结束 第7章目录 2020 4 23 41 7 7Application对象 7 7 1Application对象概述p57常用属性AllKeysContentsCountItemStaticObjects常用方法Add name value Clear Get name index GetKey index Lock Remove RemoveAll RemoveAt index Set name value UnLock 常用事件StartEndBeginRequestEndRequestErrorAuthenticateRequest上述事件的处理程序必须在Global asax文件中编写 第7章目录 2020 4 23 42 7 7Application对象 7 7 2保存应用程序状态使用Application对象保存信息时 标准作法是首先使用Add方法添加应用程序变量 然后使用Set方法更改该变量 通过调用Application Add方法将新的对象添加到应用程序状态集合中 语法如下 Application Add 变量名 值 例如 下面的语句将名为AppVar1和AppVar2的应用程序变量添加到Application集合中 Application Add AppVar1 Object1 Application Add AppVar2 Object2 第7章目录 2020 4 23 43 7 7Application对象 7 7 3处理应用程序事件1 Start事件Application Start事件在应用程序启动时发生 2 End事件Application End事件在应用程序结束时发生 即当Web服务器关机或重新启动时发生End事件 3 BeginRequest事件Application BeginRequest事件在客户端向服务器端发送处理请求后发生 即在ASP NET响应请求时作为HTTP执行管线链中的第一个事件发生 4 EndRequest事件Application EndRequest事件在每个客户端请求处理结束时发生 即在ASP NET响应请求时作为HTTP执行管线链中的最后一个事件发生 5 Error事件Application Error在应用程序出现错误时发生 7 AuthenticateRequest事件Application AuthenticateRequest在尝试进行身份验证请求时发生 第7章目录 2020 4 23 44 7 7Application对象 7 7 4Global asax文件Global asax文件称为ASP NET应用程序文件 它是一个可选文件 其中包含用于响应ASP NET或HttpModule引发的应用程序级别事件的代码 Global asax文件驻留在基于ASP NET的应用程序的根目录中 在运行时 分析Global asax文件并将其编译到一个动态生成的 NETFramework类 该类是从HttpApplication基类派生的 Global asax文件本身被配置为自动拒绝对它的任何直接URL请求 外部用户无法下载或查看在该文件中编写的代码 Global asax文件是可选的 如果不定义该文件 ASP NET页框架假设未定义任何应用程序或会话事件处理程序 当将更改保存到活动Global asax文件时 ASP NET页框架检测到该文件已被更改 它完成应用程序的所有当前请求 将Application OnEnd事件发送到任何侦听器 并重新启动应用程序域 实际上 这会重新启动应用程序 关闭所有浏览器会话并刷新所有状态信息 当来自浏览器的下一个传入请求到达时 ASP NET页框架将重新分析并重新编译Global asax文件并引发Application OnStart事件 第7章目录 2020 4 23 45 Global asax的事件 2020 4 23 46 Global asax文件作用有 1 存储于应用程序的根目录中 2 定义应用程序的边界 3 初始化应用程序级或会话级变量 4 连接到数据库 5 发送Cookie 2020 4 23 47 ASP NET的全局应用文件Global asax 续1 在应用程序项目中的Global asax文件是在建立项目时自动生成的 下面通过两个例子来说明Global asax文件在全局中的作用 2020 4 23 48 ASP NET的全局应用文件Global asax 续2 例 应用程序计数器 统计在线人数 建立项目 Applicationcount 在Global asax文件中放入如下代码protectedvoidApplication Start Objectsender EventArgse Application count 0 该事件启动程序时发生 现为在线人数起始值 protectedvoidSession Start Objectsender EventArgse Application Lock 并发控制加锁Application count int Applic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论