ASP.Net概述

 

                     ASP.Net概述

    ASP.Net是一种动态网页技术,在服务器端运行.Net代码,动态生成HTML,然后响应给浏览器。

    过程如下:当浏览器地址栏写入一个请求页面路径并回车后,浏览器会向服务器发送一个请求报文。服务器接收到后,将请求交给指定的端口的软件IIS。如何是静态网页则直接返回被请求的网页.如果IIS发现是动态页面,自己处理不了,就去映射表,根据后缀名里找到相应的IIS扩展程序ASPNET_isapi.dll(服务器扩展程序,是微软的framework部门按照IIS部门提供的接口开发)来处理。

ASP.Net概述_第1张图片

    在其中,通过HttpRuntime类创建一个HttpWorkerRequest对象,这个对象保存了指向外部的扩展程序isapi.dll的指针,通过这个指针能够读取请求报文,并可以用它来将生成的响应报文数据转给IIS并发回给浏览器。因为HttpWorkerRequest对象实在太敏感了,所以要将他封装进一个供程序员使用的HttpContext类。HttpContext类包含:请求报文对象(HttpRequest)、响应报文对象(HttpResponse)、服务器帮助类(Server)、Session等。同时,HttpRuntime类还通过HttpApplicationFactory来创建一个HttpApplication对象,并将HttpContext对象传给它。

    接下来,大部分处理都是由HttpApplication来完成的!包括调用处理管道(一系列过滤器---本质上就是调用一系列委托)以及创建被请求的页面类的对象并调用里面的ProcessRequest方法(类似于Main函数,就是这个页面的入口)。在这里通过访问context.Request获得访问者的请求参数等,然后在ProcessRequest中通过context.Response向浏览器发回数据给浏览器。 ProcessRequest结束之时就是服务器为这个浏览者本次访问服务完成之时。

 

ASP.Net技术包括三部分:

一般处理程序(ashx),WebForm(aspx)、MVC(Model, View ,Controler)

一般处理程序

       一般处理程序(HttpHandler):是一个实现System.Web.IHttpHandler接口的特殊类。任何一个实现了IHttpHandler接口的类,是作为一个外部请求的目标程序的前提。凡是没有实现此接口的类,就不能被浏览器请求。它由支持ASP.NET的服务器调用和启动运行。 一个HttpHandler程序负责处理它所对应的一个或一组URL地址的访问请求,并接收客户端发出的访问请求信息(请求报文)和产生响应内容(响应报文)。

HttpHandler程序可以完成普通类程序所能完成的大多数任务:

    A.获取客户端通过HTMLForm表单提交的数据和URL参数

    B.创建对客户端的响应消息内容

    C.访问服务器端的文件系统

    D.连接数据库并开发基于数据库的应用

    E.调用其他类

 

     一般处理程序分ashx和 ashx.cs两个文件,ashx里只有一个指令集,没有任何其他代码;ashx.cs就是页面处理代码。如果有大量html,需要通过ashx来拼接字符串或读取模板的方式完成。一般处理程序输出响应内容,输出的内容有可能是图片、html等其他页面,浏览器根据响应报文体内容不知道接收到的是什么,需要判断响应报文头里的Content-Type来决定将报文体内容作为何种格式的数据来显示。

一般处理程序内部:

public void ProcessRequest (HttpContext context)

 { 

    context.Response.ContentType ="text/html";

   context.Response.Write("");

 }

 public bool IsReusable

        {

           get { return false; }

        }

(1)HttpContext:请求上下文对象,包含:请求报文对象(HttpRequest),响应报文对象(HttpResponse),服务器帮助类(Server),Session等。

(2)FrameWork在接收到请求后,通过反射技术创建请求路径对应的类的对象,并强制转换成IHttpHandler接口对象(HttpHandler实现了IHttpHandler,之后的转换相当于将子类强转为父类),统一调用ProcessRequest方法处理。

(3)IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用。

WebForm

       WebForm类继承于Page类;而一般处理程序类实现于 IHttpHandler接口。但是,Page类也实现了IHttpHandler接口,所以,WebForm类也实现了这个接口。WebForm分 aspx 和aspx.cs两个前后台文件,aspx主要用来当做“html模板”用,而aspx.cs就是页面处理代码。

1)前台页面:

(A)页面类指令集(给编译器用):

<%@PageLanguage="C#"CodeBehind="01WebForm.aspx.cs"Inherits="_01WebForm._01WebForm" %>

(B)CodeBehind:指定对应的后台文件名称

(C)Inherits:指定了前台类继承于哪个后台类。

(D)AutoEventWireup:用来打开页面生命周期方法的自动注册机制,默认为打开(控件事件除外)。当某个页面开启事件自动注册机制,那么被浏览器请求时,asp.net内部机制会自动的创建被请求的前台页面类对象,同时,扫描后台页面类里的所有方法名,一旦找到符合约定的方法名,如:Page_Load,就会将其自动添加到Page类父类Control里的一个对应的事件委托中。

 

2)后台页面:

(A)直接通过Page类的属性访问到当前请求上下文对象里对应的属性

protectedvoid Page_Load(object sender, EventArgs e)

{

//Response -> context.Response

//Request -> context.Reqeust

//Session -> context.Session

}

(B)Page_Load方法被 Page类里的ProcessRequest调用:

    Page类的事件自动注册机制会自动的根据后台类里的事件方法名来找到Page_Load方法,将此方法注册到 Page类一个 OnLoad事件(委托)中。

    在页面被请求执行的时候,在11-12事件中间调用Page类的ProcessRequest方法, 里面就会调用这个Page的页面生命周期,其中就会调用 OnLoad事件从而执行注册在里面的 Page_Load方法。

 

(3)后台向前台页面输出数据方式:

(A)直接在后台通过Page_Load方法,执行Response.Write。

     缺点:生成的HTML代码全都输出在页面的最上面。因为PageProcessReqeust方法会先执行Load事件,此时就通过事件调用执行了我们的后台类里写的Page_Load方法;在页面生命周期最后,才调用RenderControl方法,按照前台页面类的代码生成整个HTML页面;所以,Load里输出的在前,前台页面的在后。

 (B)使用<%%>在前台指定输出.因为前台页面可以访问后台页面中的非私有成员.

你可能感兴趣的:(ASP.Net概述)