Asp.Net管道模型和页面生命周期以及六大对象

ASP.NET页面请求过程及生命周期管道事件

(补充)、什么浏览器?:1.就是一个Socket客户端,可以向服务器发送请求通信。2.渲染引擎:(加载html标签,渲染Css样式,执行JavaScript代码)。3.收集信息并展示信息的平台(软件)。
一、Asp.Net请求处理响应简要:
1.用户向服务器的某IP端口发送请求,此端口通过Http.sys来管理,请求报文被Http.sys接收,Http.sys在注册表中找能处理这个请求类型的应用程序,最终找到IIS,请求被提交到IIS服务器处理,IIS判断请求的类型。
如果请求的是静态文件,那么IIS会直接处理,在本地找到请求的静态文件,然后发送给浏览器。
如果是动态文件,如aspx或者ashx等动态文件,IIS就会去它的映射表里面去找,实现它接口的那个扩展程序可以处理这样的动态文件,然后IIS发现有个叫做aspnet_isapi的一个扩展程序可以处理处理像.aspx和.ashx这样后缀名的文件,那么IIS则把请求交给aspnet_isapi来处理。
2.aspnet_isapi将启动CLR(公共语言运行时),CLR负责启动asp.net框架的域,然后将请求交给asp.net框架来处理,框架里面有个一HttpRuntime类的对象,拿到用户的请求后,它负责将请求封装成HttpContext对象,调用application对象的ProcessRequest方法(HttpContext对象作为参数)处理请求 (Asp.Net管道和页面生命周期) ,最后处理完成后,返回给IIS,IIS再返回给浏览器,浏览器解析渲染呈现给用户。


二、ASP.NET WebForm或ASP.NET MVC 都是基于ASP.Net 管道模型的,换句话说,管道模型是整个asp.net的核心。
在System.Web的命名空间中处理HTTP请求主要使用管道模型。管道模型如下图所示。在管道模型开始运行前,首先HTTP的请求被传到HttpRuntime类的一个实例中,然后这个实例对象检查请求并找到被接受的那个应用程序。接下来,管道模型就使用HttpApplicationFactory对象来创建一个HttpApplication对象来处理这个请求,一个HttpApplication可以包含一系列HTTP module对象。其中最重要的就是HttpModule和HttpHandler。
在这里插入图片描述

HttpModule,可以看做是一个拦截器,给我们在特定的事件处理请求的机会。HttpModule有很多应用,例如,我们要在每个请求的页面事件前加载Session数据,那么就用到SessionModule等等;asp.net4.0提供了路由机制也是建立在一个UrlRouteModule上面的,它在请求映射到具体程序前拦截,然后重新映射。MVC又是建立在路由机制的基础上的。
HttpHandler,可以看做一个处理器,它负责处理请求,输出数据。aspx,ashx或者说实现了IHttpHandler的都是HttpHandler。

19个标准事件:
在这里插入图片描述


Asp.Net六大对象:

  1. Application: Application对象是个应用程序级的对象,在所有用户间共享信息。维护整个应用程序的一组变量,这些变量可以由所有访问该应用程序和用户共享,并可以在Web应用程序运行期间持久地保持数据。Application对象没有内置的属性,可以自行创建属性
    Application对象除了基本的初始化事件,还有与start相对应的End事件,Applicaton_End事件,通常写程序关闭时要运行的代码。在程序运行出现错误的时候,提供了Application_Error事件来处理错误,可以写程序出错时要运行的代码。Application位于Global.asax文件中。
  2. Session: 该对象用于存储在多个页面之间调用特定用户的信息。Session类型的变量可以提供该用户在Web应用的所有页面中的共享数据。两个用户之间无法通过Session变量共享信息。而Application类型的变量可以实现站点多个用户之间在所有页面中共享信息。
  3. Server:Server对象提供对服务器上的方法和属性的访问。
 //执行另一个页面的代码  Execute:执行(可以放到标签内放入另一个页面的执行内容)
        Server.Execute("/aspx-存储过程分页/FenStudents.aspx");
        //在视图页面:<%Server.Execute("/stu.aspx"); %>
        //页面的跳转(服务器端的接管响应)
		
		string str = Server.UrlEncode("张三");
        string result = Server.UrlDecode(str);//解码   ,,一般用于下载对url地址的处理,或者中文乱码问题
         
         //将文本编码成可以在浏览器可以正常浏览的格式
           string strhtml = "<html><head></head><body><h2>整体显示</h2></body></html>";
           string newhtml = Server.HtmlEncode(strhtml);//标签也显示
         //再转换回来
           string newnewhtml=Server.HtmlDecode(newhtml);
           Response.Write(newnewhtml);        

        Server.Transfer("/aspx-存储过程分页/FenStudents.aspx");
        Response.Redirect("/aspx-存储过程分页/FenStudents.aspx");//客户端的二次请求(客户端行为)
      //1.他们两个的跳转是有区别的,这个跳转是通过响应报文
      //发送给浏览器,浏览器重新请求指定跳转页面,有两次请求(任意网页url地址),而Server.Transfer这个方法是在服 务器              端server对象中处理(只能重定向本网站网页)
      //,浏览器并不知道的跳转引入别的页面
  1. Request:该对象用于检索从浏览器向服务器发送的请求报文中的数据。
string UserId=Request.UserHostAddress;//获取访问者的id
string userurl = Request.Url.ToString();//请求来源
Request.MapPath();//将相对路径转换成绝对路径
Context.Server.MapPath();//内部也是调用Request.MapPath();
  1. Respones:该对象用于将数据从服务器发送回浏览器,接受服务器中返回的信息。
//响应缓冲区:写给SocKet客户端的那些字符串字节数组都是放在这里面,默认启用
Response.Buffer = false;//禁用缓冲区
Response.Flush();//立即输出缓冲区现有内容
Response.Clear();//清空缓冲区数据
Response.ContentEncoding = Encoding.Default;//响应报文的编码格式
Response.OutputStream;//拿到当前的输出流

在这里插入图片描述

6.ViewState: 本质上就是一个隐藏域。提供在一个页面多次请求之间保持状态信息的方法,仅在页面提交到服务器之前有效,保存页面的状态信息,如页面当前页码

发布了83 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/MrLsss/article/details/104325919