电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 网络编程
.NET之ASP Web Application快速入门
作者:未知 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
世界软件巨擘微软公司提出的.NET概念给全世界的IT产业指明了新的发展方向,无论是IT业内人士、还是企业决策者,快速领会这个新概念的含义及深远影响,都显得非常必要。

  本文就通过原理与实例讲述.NET之ASP Web Application的内容,旨在带领你快速理解其相关概念、含义及作用。全文包括:

什么是ASP Web Application
创建Application
Application的生存期
关于多线程
文件Global.asax
Application 或 Session作用范围内的事件
Application 或 Session作用范围内的对象
什么是HttpHandlers 和 Factories
配置HttpHandlers 和 Factories
创建自定义HttpHandler
结 语

什么是 ASP.NET Application ?

ASP.NET这么定义Application:它是运行在Web应用服务器上的一个虚拟目录及其子目录下的所有文件、页面、模块以及可执行代码的总和。比如说,一个叫做"order"的application可能就是Web服务器的一个"/order"虚拟目录。虚拟目录可以通过Internet

Services Manager设置,它可以包含任何子目录。

Web服务器上的每一个ASP.NET application 运行在一个独特的.NET运行时间应用域中,它保证了类隔离(不会产生译文或者命名冲突)、安全盒(防止对特定机器或者网络资源的访问)以及静态变量的隔离。

在一个Web Application的整个生存过程中,ASP.NET维护着一个HttpApplication实例池,自动地分配这些实例中的一个以处理application接收到的每个HTTP请求。被分配的特殊HttpApplication实例负责管理整个生命期的请求,只有当请求结束时,它才能被再使用。这表示其中的用户代码不需用再进入。

创建Application

要创建一个ASP.NET Application,我们可以使用存在的虚拟目录,或者创建一个新的虚拟目录。比如,在安装了包含IIS的Windows

2000服务器上,大概会有一个目录C:\InetPub\WWWRoot;我们使用Internet Services Manager来配置IIS,在"Start

-> Programs -> Administrative Tools"下,用鼠标右键单击存在的目录,或者选择new来创建一个新的虚拟目录,或者选择Properties来提升一个存在的普通目录为虚拟目录。

现在看看如何触发ASP.NET application。我们可以编写一个simple.aspx文件,将它放置到虚拟目录下,然后在浏览器中访问它。为对照方便,我们列出了使用VB、C#以及JScript三种语言编写的代码:

C#
<%@Page Language="C#"%>

<html>
<body>

<h1>hello world, <% Response.Write(DateTime.Now.ToString()); %></h1>

</body>
</html>

VB

<%@Page Language="VB"%>

<html>

<body>

<h1>hello world, <% Response.Write(DateTime.Now.ToString()) %></h1>

</body>

</html>

JScript

<%@Page Language="JScript"%>

<html>
<body>

<h1>hello world, <% Response.Write(DateTime.Now.ToString()); %></h1>

</body>
</html>

代码很简单,只是在浏览器中打印出当前时间的信息。我们可以添加些代码来使用Application对象,比如将对象保存为application范围类型。通过创建一个global.asax文件,我们还可以定义各种事件处理程序,比如Application_OnStart事件触发器。

Application的生存期 一个ASP.NET application创建于服务器第一次被请求时,在那之前不会有ASP.NET代码在执行。接受第一次请求后,一个HttpApplication实例池被创建,并激活了Application_OnStart事件。 HttpApplication实例处理这个请求及随后发生的请求,直到最后的实例退出,接着就触发Application_OnEnd事件。

注意,在每一个实例中HttpApplication的Init以及Dispose方法都被调用,因此在Application_OnStart 和 Application_OnEnd事件间将被调用多次。在一个ASP.NET

application中,只有这些事件在所有HttpApplication实例中被共享。

关于多线程

如果我们以application范围类型使用对象,我们就应该注意ASP.NET是并发处理请求的,从而Application对象可以被多个线程所访问。因此,如果下面例子中的代码在同一时间被不同的客户机访问,它就是危险的,可能不会达到预期目的。为对照方便,我们列出了使用VB、C#以及JScript三种语言编写的代码:

C#

<%

Application["counter"] = (Int32)Application["counter"] + 1;

%>

VB

<%

Application("counter") = CType(Application("counter") + 1, Int32)

%>

JScript

<%

Application("counter") = Int32(Application("counter") + 1);

%>

为了实现安全的线程处理,我们可以通过Lock和Unlock方法处理这个Application对象。请看下面使用VB、C#以及JScript三种语言编写的代码:

C#

<%

Application.Lock();

Application["counter"] = (Int32)Application["counter"] + 1;

Application.UnLock();

%>

VB

<%

Application.Lock()

Application("counter") = CType(Application("counter") + 1, Int32)

Application.UnLock()

%>

JScript

<%

Application.Lock();

Application("counter") = Int32(Application("counter") + 1);

Application.UnLock();

%>
文件Global.asax 除了编写UI(Use Interface:用户界面)以外,我们还可以在Web Application中添加"application"级别的控制逻辑代码以及事件触发程序。 这些代码不会去操作产生UI,并且基本上不会响应于单独的页面请求,它们负责的是处理高级别的application事件,包括Application_Start、Application_End、Session_Start和Session_End。这些控制逻辑代码位于Web

application所在虚拟目录结构根目录下的Global.asax文件中,ASP.NET自动地解析这个文件并编译为动态.NET框架类。这个类扩充了HttpApplication基类,当位于application名字空间内的任意资源或URL被首次访问时,它就被创建。

Global.asax文件本身经过了设置,任何关于它的直接URL请求都会被自动拒绝,从而保证了外部用户无法下载它并浏览其内容。

Application 或 Session作用范围内的事件

我们可以在Global.asa文件中编写方法以定义有关HttpApplication基类的事件触发程序,方法的命名要匹配于字符串"Application_事件名称"。比如,请看下面使用VB、C#以及JScript三种语言编写的代码:

C#

<script language="C#" runat="server">

void Application_Start() {

// Application startup code goes here

}

</script>

VB

<script language="VB" runat="server">

Sub Application_Start()

’ Application startup code goes here

End Sub

</script>

JScript

<script language="JScript" runat="server">

function Application_Start() : void {

// Application startup code goes here

}

</script>

如果事件触发代码需用输入另外的名字空间,我们可以在.aspx页面中编写类似如下代码的输入标识:

<%@ Import Namespace="System.Text" %>

下面的例子图解了Application、Session 和Request 的生存期:





Application1.aspx


[点击这里运行例程]

| [查看源代码]



页面首次打开时,将激活application和session的Onstart事件。关于这些事件触发程序,请看下面使用VB、C#以及JScript三种语言编写的代码: C#

void Application_Start() {

Response.Write("Application is Starting...");

}

void Session_Start() {

Response.Write("Session is Starting...");

Session.Timeout = 1;

}

VB

Sub Application_Start()

Response.Write("Application is Starting...")

End Sub

Sub Session_Start()

Response.Write("Session is Starting...")

Session.Timeout = 1

End Sub

JScript

function Application_Start() : void {

Response.Write("Application is Starting...");

}

function Session_Start() : void {

Response.Write("Session is Starting...");

Session.Timeout = 1;

}

每次请求发生时,都会激活BeginRequest 和EndRequest 事件。比如,当页面被刷新时,来自BeginRequest、EndRequest

和Page_Load 方法的信息将显现出来。注意,当放弃当前的session时(点击"End this session"按钮),将产生一个新session,接着再次触发Session_OnStart事件。
Application 或 Session作用范围内的对象
在Global.asax文件中,我们可以通过object标记定义静态对象,这些对象可以是.NET框架类,也可以是经典的COM组件。其作用范围可以是appinstance、session或者application中的任一种。 如果一个对象的作用范围是Appinstance,就表示这个对象明确属于HttpApplication的一个实例,并且不被共享。

请看下面定义对象作用范围的例子:

<object id="id" runat="server" class=".NET

Framework class Name" scope="appinstance">


<object id="id" runat="server" progid="Classic

COM ProgID" scope="session"/>


<object id="id" runat="server" classid="Classic

COM ClassID" scope="application"/>

什么是HttpHandlers 和 factories(Http处理器和工厂)

ASP.NET提供了一套低级别的请求/响应API,利用它们我们就可以使用.NET框架类服务于输入的HTTP求,它们就是HTTPHandlers

和Factories。HTTPHandlers 和Factories可以说是ASP.NET框架的中枢。Factories(工厂)将每个请求分配给一个handler(处理器),由这个处理器再负责处理请求。具体实现步骤就是创建支持System.Web.IHTTPHandler接口的类,并执行ProcessRequest()方法。当不要求高级别页面框架提取的服务处理HTTP请求时,处理器经常很有用途。处理器的一般用途包括过滤器和仿CGI应用,特别是那些返回二进制数据的应用。

ASP.NET接收的每一个HTTP输入请求最终被一个特殊的类实例IHTTPHandler所处理,IhttpHandlerFactory提供了处理器到IHTTPHandler实例的基础下部组织。ASP.NET自带3个标准的IhttpHandlerFactory类:PageHandlerFactory,RestrictedResourceFactory和WebServiceHandlerFactory。我们还可以有选择的创建并注册附加factories(工厂)以支持更丰富的请求决定和激活场合。

配置HttpHandlers 和 Factories

HTTPHandlers 和factories 作为config.web文件的一部分进行配置。ASP.NET定义了一个"httphandlers"配置节,在这里可以添加和删除HTTPHandlers和factories。这些配置信息可以通过子目录而继承下来。

比如,下面这些代码位于config.web文件的头部,目的就是映射所有关于.aspx文件的请求到PageHandlerFactory类:

<httphandlers>

...

<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"

/>

...

</httphandlers>
创建自定义HttpHandler

要自定义一个handler,可以执行IhttpHandler,并在config.web文件的httphandlers一节中添加类信息。下面举例说明如何创建自定义一个HttpHandler,将所有的请求对应到"SimpleHandler.aspx"中:





SimpleHandler


[点击运行程序]

| [查看源代码]



自定义HttpHandler可以通过执行IhttpHandler接口来创建,这个接口只有两个方法。通过调用IsReusable,一个HTTP

factory就能够查询handler(处理器)以判断是否同一实例可以用于服务多个请求。ProcessRequest方法接受HttpContext实例作为参数。这里的例子中,请求数据被忽略,一个常量字符串作为响应发送到客户端。请看下面使用VB、C#以及JScript三种语言编写的代码:

C#

public class SimpleHandler : IHttpHandler {

public void ProcessRequest(HttpContext context) {

context.Response.Write("Hello World!");

}

public bool IsReusable() {

return true;

}

}

VB

Public Class SimpleHandler : Inherits IHttpHandler

Public Sub ProcessRequest(context As HttpContext)

context.Response.Write("Hello World!")

End Sub

Public Function IsReusable() As Boolean

Return(True)

End Function

End Class

JScript

public class SimpleHandler implements IHttpHandler {

public function ProcessRequest(context:HttpContext) : void {

context.Response.Write("Hello World!");

}

public function IsReusable() : Boolean {

return true;

}

}

将编译的处理器集合放置到application的/bin目录下面后,我们就可以指定处理器类到请求的目标上。在这里,所有对"SimpleHandler.aspx"的请求将被路由到SimpleHandler类的一个实例上,它生存于名字空间Acme.SimpleHandler中。

结 语

以上通过原理与实例讲述了.NET之ASP Web Application的概念及使用,我们看到了如何使用三种不同的编程语言达到目的。你会发现,我们正在慢慢地触及.NET的神奇思想,领会.NET的震撼力量。我们有理由相信,凭借如此强大的工具,开发人员将更具创造力!
   
文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·ASP教程:第五篇 脚本变量、函数、过程和条件语句
·ASP教程:第十八篇 堵住ASP漏洞
· ASP教程:第十七篇 ADO 存取数据库时如何分页显示
·ASP教程:第十六篇 其它的ASP常用组件
· ASP教程:。
·ASP教程:第十四篇 ActiveX 组件
· ASP教程:第十三篇 数据库查询语言(2)
·ASP教程:第十二篇 数据库查询语言(1)
· ASP教程:第十一篇 ASP内建对象Server
·ASP教程:第十篇 Global.asa文件的使用及Chat程序

最新文章
·FreeBSD上面的Proftpd安装与配置
·用Sendmail在Linux下架设邮件服务器
·Linux操作系统中如何安装MySQL数据库
·WinXP+Mac OS X+Linux的多操作系统安装
·Linux和Windows共存的模式下分区要小心
·Linux系统下的C语言开发都需要学些什么
·Linux操作系统中安装JAVA JDK1.6的方法
·Linux操作系统程序启动引导过程详细剖析
·Linux操作系统Vim/Vi编程提速
·用户认证功能的SQUID代理服务器


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号