ASP.NET(一)--一般处理程序和WebForm


 

ASP.NET(一)--一般处理程序和WebForm

  转载

一、静态页面 VS 动态页面

静态页面:在服务器就相当于直接读取文件字符串然后返回客户端浏览器;(任何时候访问看到的都是一样的界面。)

动态页面:在服务器是先交给某语言环境虚拟机编译运行,按照语法生成代码返回客户端浏览器。(不同条件和时候访问看到的都界面也不同,因为会在数据库中按条件读取不同数据。)

 

二、ASP.Net概述:

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

2.服务器和客户端交互的简述:

    当浏览器地址栏写入一个请求页面路径并回车后,浏览器会向服务器发送一个请求报文。服务器接收到后,将请求交给指定80端口的软件IIS。IIS发现是动态页面,自己处理不了,就去映射表,根据后缀名里找到相应的IIS扩展程序ASPNET_isapi.dll(服务器扩展程序,乃微软的framework部门按照IIS部门提供的接口开发)来处理。
    在其中,通过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结束之时就是服务器为这个浏览者本次访问服务完成之时。

 

三、一般处理程序(ashx)

1、ASP.Net:一般处理程序(ashx),WebForm(aspx)、MVC4(Model, View , Controler)

 

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

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

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

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

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

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

    E.调用其他类

 

4.分ashx和 ashx.cs 两个文件,ashx里只有一个指令集,没有任何其他代码;ashx.cs就是页面处理代码。如果有大量html,需要通过ashx来拼接字符串或读取模板的方式完成。


5.一般处理程序输出响应内容,输出的内容有可能是图片、html等其他页面,浏览器根据响应报文体内容不知道接收到的是什么,需要判断响应报文头里的Content-Type来决定将报文体内容作为何种格式的数据来显示。

6.一般处理程序内部:
public void ProcessRequest (HttpContext context)

 { 

    context.Response.ContentType = "text/html";
    context.Response.Write("ASP.NET小札(一)--一般处理程序和WebForm");
 }

 public bool IsReusable
        {
            get { return false; }
        }

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

(2)FrameWork在接收到请求后,通过反射技术创建请求路径对应的类的对象,并强制转换成IHttpHandler接口对象(HttpHandler实现了IHttpHandler,之后的转换相当于将子类强转为父类),统一调用ProcessRequest方法处理。
(3)IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用。

四、WebForm:

1.WebForm类继承于 Page类;而一般处理程序类实现于 IHttpHandler 接口。但是,Page类实现了IHttpHandler接口,所以,WebForm类也实现了这个接口。

 

2.WebForm:分 aspx 和aspx.cs 两个前后台文件,aspx主要用来当做“html模板”用,而aspx.cs就是页面处理代码。

(1)前台页面:
(A)页面类指令集(给编译器用):
<<A href='mailto:%@PageLanguage="C'>%@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代码全都输出在页面的最上面。因为Page类ProcessReqeust方法会先执行Load事件,此时就通过事件调用执行了我们的后台类里写的Page_Load方法;在页面生命周期最后,才调用 RenderControl方法,按照前台页面类的代码生成整个HTML页面;所以,Load里输出的在前,前台页面的在后。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM