第四篇应用程序 第一章什么是应用程序 在 asp. net中,可以这样来定义一个 Application:能够在一个web应用服务器的子目录 或者虚拟目录上运行的所有的文件、页面、操作、模块或者能被执行的代码。比方说,在 个web服务器上,一个“ order“应用程序将会在“/ order“这个目录下被发布 web服务器上的 asp. net应用程序在一个被称作应用程序域运行空间( AppDomain)环境 中被执行,以保证类的隔离(没有版本、名称上的冲突)、安全屏蔽(防止有权访问某些机 器/网络的资源)、静态变量的隔离。 在一个web应用程序的生命周期中, asp. net维护一个 HttpapplicaTion实例池。Asp.net 对一个Htp的请求会自动分配一个来处理,这个特别的 HttpapplicatIon实例对管理这个在 全部的生命周期里的请求是可靠的,并且在处理完成后可以被重用 在应用程序环境下, ASPNET并发处理客户端的请求,所以可能存在多线程对 Application对象的同时存取。在这种情况下,对 Application对象的草率处理,可能会导致 不可预知的错误。例如以下代码 <%Application("counter")=CType(Application("counter")+ 1, Int32)%> 原本希望对实例进行计数,但如果同时到达两个以上请求时,则有可能产生漏计。正确 的方法应该是在操作以前,对 Application对象上锁,操作完成以后,再对 Application对象 解锁。代码如下: Application. LockO Application("counter")=CType(Application("counter")+ 1, Int32) Application. UnLock( 411配量应用程序的步骤 4.1.1.1设置应用程序的目录结构 个WEB站点可以有多个应用程序运行,而每一个应用程序可以用唯一的URL来访问, 所以首先应利用IS开放应用程序的目录为“虚拟目录”。各个应用程序的“虚拟目录”可
第四篇 应用程序 第一章 什么是应用程序 在 asp.net 中,可以这样来定义一个 Application:能够在一个 web 应用服务器的子目录 或者虚拟目录上运行的所有的文件、页面、操作、模块或者能被执行的代码。比方说,在一 个 web 服务器上,一个“order“应用程序将会在“/order“这个目录下被发布。 Web 服务器上的 asp.net 应用程序在一个被称作应用程序域运行空间(AppDomain)环境 中被执行,以保证类的隔离(没有版本、名称上的冲突)、安全屏蔽(防止有权访问某些机 器/网络的资源)、静态变量的隔离。 在一个 web 应用程序的生命周期中,asp.net 维护一个 HttpApplication 实例池。Asp.net 对一个 Http 的请求会自动分配一个来处理,这个特别的 HttpApplication 实例对管理这个在 全部的生命周期里的请求是可靠的,并且在处理完成后可以被重用。 在应用程序环境下,ASP.NET 并发处理客户端的请求,所以可能存在多线程对 Application 对象的同时存取。在这种情况下,对 Application 对象的草率处理,可能会导致 不可预知的错误。例如以下代码: <% Application("counter") = CType(Application("counter") + 1, Int32) %> 原本希望对实例进行计数,但如果同时到达两个以上请求时,则有可能产生漏计。正确 的方法应该是在操作以前,对 Application 对象上锁,操作完成以后,再对 Application 对象 解锁。代码如下: <% Application.Lock() Application("counter") = CType(Application("counter") + 1, Int32) Application.UnLock() %> 4.1.1 配置应用程序的步骤 4.1.1.1 设置应用程序的目录结构 一个 WEB 站点可以有多个应用程序运行,而每一个应用程序可以用唯一的 URL 来访问, 所以首先应利用 IIS 开放应用程序的目录为“虚拟目录”。各个应用程序的“虚拟目录”可
以不存在任何物理上的关系。例如: 应用URL: 物理路径: http://www.my.com c: \inetpublwwwroot http:/1v http://www.my.com/myapp/myappl licomputer 2\test'lmyapp 从“虚拟目录”上看来,htp//www.my.com/myapp和htp/wwmy.com/myapp/myappl 是乎存在某种联系,但实际情况却是,我们看到两者完全分布于不同的机器上,更不用说物 理目录了 4.1.1.2.设置相应的配置文件 根据应用的具体需要,可以拷入相应的 global asax和 config web配置文件,并且设置相 应的选项。(配置文件的设置具体见相关章节) global asax主要配置 application start、 applicatoin end、 session start、 session end等事 件 4.1.1.3.把应用所涉及的各种文件放入“虚拟目录“中 把aspx文件、ascx文件以及各种资源文件分门别类放入应用目录中,把类引用所涉及 的集合放入应用目录下的bin目录中 4.1.2应用程序框架 <% Application attribute="value"[attribute=value .%> <% Assembly Name="assemblyname"9> script> <form runatserver>
以不存在任何物理上的关系。例如: 应用 URL: 物理路径: http://www.my.com c:\inetpub\wwwroot http://www.my.com/myapp c:\myapp http://www.my.com/myapp/myapp1 \\computer2\test\myapp 从“虚拟目录”上看来,http://www.my.com/myapp 和 http://www.my.com/myapp/myapp1 是乎存在某种联系,但实际情况却是,我们看到两者完全分布于不同的机器上,更不用说物 理目录了。 4.1.1.2.设置相应的配置文件 根据应用的具体需要,可以拷入相应的 global.asax 和 config.web 配置文件,并且设置相 应的选项。(配置文件的设置具体见相关章节) global.asax 主要配置 application_start、applicatoin_end、session_start、session_end 等事 件。 4.1.1. 3.把应用所涉及的各种文件放入“虚拟目录“中 把.aspx 文件、.ascx 文件以及各种资源文件分门别类放入应用目录中,把类引用所涉及 的集合放入应用目录下的 bin 目录中。 4.1.2 应用程序框架 <%@ Application attribute="value" [attribute=value … ]%> <%@ Import namespace="value" %>… <%@ Assembly Name="assemblyname" %> <script language=”vb” runsat=server> … </script> <body> <form runat=server> … </form>
body> 说明 1. <% Application attribute="value"[attribute=value. % 让 ASPNET运行环境动态从另一个应用中动态编译出一个类来继承使用。 例如: <%(@ Application Inherits"My App. Object"Description="Ourapp"%> 指定应用环境从 Myapp应用中动态编译一个 MyApp. Object的类以供使用,它的说明为 Ourapp 2. <% Import namespace="value"%>. 显视导入一个命名空间到应用程序,这样应用程序就可以使用命名空间中定义的各种类 和接口来完成特定的功能,大大加快了程序的开发速度 例如 <% Import Namespace="System. IO"% c%@ImportNamespace="System.NET"%> 就可以利用系统为我们提供的大量文件和网络对象,快速的开发自己的文件和网络应用 程序。 3. <% Assembly Name="assemblyname"%> 在页面编译时产生到 assemblyname的连接,这样就可以使用集合中类及接口。缺省情 况下,应用会把应用程序目录下bin中的集合都动态载入。该项功能也可以在应用程序的 config.web中配置,缺省情况下, config. web中有如下形式: <add assembly=*7 即缺省情况下,加载bin下的所有集合 又如 <%(@ Assembly Name="myassembly. dll"%> 加载bin下 myassembly dll集合 4.其他 < script>、< script>对之间的代码通常是各种事件的定义,诸如页面开始时、某个按件被 触发时所要做的事情。<body>、<body>和<form>、<om>之间通常是页面的界面要素,为 显示给客户端的可视界面
</body> </html> 说明: 1.<%@ Application attribute="value" [attribute=value … ]%> 让 ASP.NET 运行环境动态从另一个应用中动态编译出一个类来继承使用。 例如: <%@ Application Inherits="MyApp.Object" Description="Ourapp" %> 指定应用环境从 Myapp 应用中动态编译一个 MyApp.Object 的类以供使用,它的说明为 “Ourapp”。 2.<%@ Import namespace="value" %>… 显视导入一个命名空间到应用程序,这样应用程序就可以使用命名空间中定义的各种类 和接口来完成特定的功能,大大加快了程序的开发速度。 例如: <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.NET” %> 就可以利用系统为我们提供的大量文件和网络对象,快速的开发自己的文件和网络应用 程序。 3.<%@ Assembly Name="assemblyname" %> 在页面编译时产生到 assemblyname 的连接,这样就可以使用集合中类及接口。缺省情 况下,应用会把应用程序目录下 bin 中的集合都动态载入。该项功能也可以在应用程序的 config.web 中配置,缺省情况下,config.web 中有如下形式: <assembly> <add assembly="*"/> </assembly> 即缺省情况下,加载 bin 下的所有集合。 又如: <%@ Assembly Name="myassembly.dll" %> 加载 bin 下 myassembly.dll 集合 4.其他 <script>、</script>对之间的代码通常是各种事件的定义,诸如页面开始时、某个按件被 触发时所要做的事情。<body>、</body>和<form>、</form>之间通常是页面的界面要素,为 显示给客户端的可视界面
41.3创建应用程序的典型步骤 4.1.3.1配置 config. web 主要定义为gb2312字符集,以利于中文显示 <contiguration> globalization requestencoding="gb23 12 responseencoding=gb2312"/ configuratio 4.1.3.2配置 global.asax 主要定义应用初始化、结束,会话开始、结束,请求开始、结束等事件发生时,应用要 做的事情。 <script language="VB"runat="serve Sub Application Start(Sender As Object, EAs EventArgs) End sub Sub Application End(Sender As Object, E As EventArgs) Sub Session Start( Sender As Object, E As EventArgs) End Sub Sub session end As Object, E As EventArgs) End Sub Sub Application Begin Request( Sender As Object, E As EventArgs) End sub Sub Application End Request( Sender As Object, E As EventArgs) End Sub /script> 4.1.3.3主程序 创建一个应用程序我们可以先在web服务器上创建一个虚拟目录或者在发布目录下t
4.1.3 创建应用程序的典型步骤 4.1.3.1 配置 config.web 主要定义为 gb2312 字符集,以利于中文显示 <configuration> <globalization requestencoding="gb2312" responseencoding="gb2312" /> </configuration> 4.1.3.2 配置 global.asax 主要定义应用初始化、结束,会话开始、结束,请求开始、结束等事件发生时,应用要 做的事情。 <script language="VB" runat="server"> Sub Application_Start(Sender As Object, E As EventArgs) End Sub Sub Application_End(Sender As Object, E As EventArgs) End Sub Sub Session_Start(Sender As Object, E As EventArgs) End Sub Sub Session_End(Sender As Object, E As EventArgs) End Sub Sub Application_BeginRequest(Sender As Object, E As EventArgs) End Sub Sub Application_EndRequest(Sender As Object, E As EventArgs) End Sub </script> 4.1.3.3 主程序 创建一个应用程序我们可以先在 web 服务器上创建一个虚拟目录或者在发布目录下创
建一个新的目录。装过 Windows2000 Advance Server的读者会知道,安装完成后,会有 个c/ inetpub/wwwroot的目录,你可以通过IS管理工具来创建一个新的目录或者虚拟目录 一个应用程序可能含有大量的aspx文件、ascx文件、由其他工具产生的 assembly集合以及 页面中用到的各种资源文件(声音、图片、动画等等),这里就不再一一介绍了。 下面我们就创建一个简单的aspx页面来说明一个 Application的应用,它只含有 个aspx文件,在用户浏览时显示“ hello world",可谓最简单的web应用了。 !-文件名: application/FormAppHellp aspx-> guage="ⅤB"%> <htm> <title> hello world body> <hI><% Response. Write("Hello World! )%></h1> center> /body> /htmI> 下面就是我们的运行效果
建一个新的目录。装过 Windows 2000 Advance Server 的读者会知道,安装完成后,会有一 个 c:/inetpub/wwwroot 的目录,你可以通过 IIS 管理工具来创建一个新的目录或者虚拟目录。 一个应用程序可能含有大量的.aspx 文件、.ascx 文件、由其他工具产生的 assembly 集合以及 页面中用到的各种资源文件(声音、图片、动画等等),这里就不再一一介绍了。 下面我们就创建一个简单的 aspx 页面来说明一个 Application 的应用,它只含有一 个.aspx 文件,在用户浏览时显示“hello world”,可谓最简单的 web 应用了。 <!-- 文件名:application/FormAppHellp.aspx --> <%@Page Language="VB"%> <html> <head> <title> hello world </title> </head> <body> <center> <h1><% Response.Write("Hello World!") %></h1> </center> </body> </html> 下面就是我们的运行效果: