320 likes | 535 Views
ASP.NET 常用对象. 学习内容. Page 类 Request 对象 Response 对象 Server 对象 Session 对象 Cookie 对象 Application 对象. ASP.NET 内置对象. ASP.NET 提供了大量的对象类库,在这些类库中包含了许多封装好的内置对象,我们只需要直接使用这些对象的方法和属性,就能简单快速地完成很多的功能。 Pege 类、 Request 对象、 Response 对象和 Serve 对象主要用来连接服务器和客户端浏览器之间的联系 。
E N D
学习内容 • Page类 • Request对象 • Response对象 • Server对象 • Session对象 • Cookie对象 • Application对象
ASP.NET内置对象 • ASP.NET提供了大量的对象类库,在这些类库中包含了许多封装好的内置对象,我们只需要直接使用这些对象的方法和属性,就能简单快速地完成很多的功能。 • Pege类、Request对象、Response对象和Serve对象主要用来连接服务器和客户端浏览器之间的联系 。 • Cookie对象、Session对象和Application对象则主要用于网站状态管理。
ASP.NET内置对象 Page类 • 在ASP.NET Framework中,Page类为ASP.NET应用程序从.aspx文件构建的所有对象提供基本行为。该类在命名空间 System.Web.UI命名空间中定义,从TemplateControl中派生出来,实现了IHttpHandler接口。 • Page类通常与扩展名为.aspx的文件相关联,这些文件在运行时被编译为Page对象,并被缓存在服务器内存中。
ASP.NET内置对象 • ASP.NET页面的工作过程: • 客户端浏览器向Web应用程序进行一个页面的请求。 • 服务器端Web应用程序接收到这个请求,先查看这个页面是否被编译过,如果没有被编译过,就编译这个Web页面,然后对这个页面进行实例化产生一个Page对象。 • Page对象根据客户请求,把信息返归给IIS,然后信息由IIS返回给客户端浏览器。 • 在这个过程中,每个页面都被编译成一个类,当有请求的时候就对这个类进行实例化。
ASP.NET内置对象 • 对于页面生命周期,一共要关心5个阶段: • 页面初始化:在这个阶段,页面及其控件被初始化。页面确定这是一个新的请求还是一个回传请求。页面事件处理器Page_PreInit和PageInit被调用。另外,任何服务器控件的PreInit和Init被调用。 • 载入:如果请求是一个回传请求,控件属性使用从视图状态和控件状态的特殊页面状态容器中恢复的信息来载入。页面的Page_Load方法以及服务器控件的Page_Load方法事件被调用。 • 回送事件处理:如果请求是一个回传请求,任何控件的回发事件处理器被调用。 • 呈现:在页面呈现状态中,视图状态保存到页面,然后每个控件及页面都是把自己呈现给输出相应流。页面和控件的PreRender和Render方法先后被调用。最后,呈现的结果通过HTTP响应发送回客户机。 • 卸载:对页面使用过的资源进行最后的清除处理。控件或页面的Unload方法被调用。
ASP.NET内置对象 • Page类中的常见属性和方法
ASP.NET内置对象 • Page类的常见的事件
ASP.NET内置对象 • 由于Pgae_Load在每次页面加载时运行,因此其中的代码即使在回传的情况下也会被运行,在这个时候Page的IsPostBack属性就可以用来解决这个问题,这个属性是用来识别Page对象是否处于一个回送的状态下,也就弄清楚是请求页面的第一个实例,还是请求回送的原来的页面。可以在Pgae类的Page_Load事件中使用该属性,以便数据访问代码只在首次加载页面时运行,具体代码如下所示。 protected void Page_Load(object sender,EventAge e{ if(!IsPostBack){ BindDropDownList() } }
ASP.NET内置对象 Request对象 • Request 对象是System.Web.HttpRequest类的实例。当用户在客户端使用Web浏览器向Web应用程序发出请求时,就会将客户端的信息发送到Web服务器。Web服务器就接收到一个HTTP请求,它包含了所有查询字符串参数或表单参数、Cookie数据以及浏览器的信息。在ASP.NET中运行时把这些客户端的请求信息封装成Request对象。 • Request对象的常用方法 • BinaryRead:执行对当前输入流进行指定字节数的二进制读取。 • MapImageCoordinates:将传入图象字段窗体参数影射为适当的x/y坐标值。 • MapPath:为当前请求将请求的URL中的虚拟路径映射到服务器上的物理路径。 • SaveAs:将HTTP请求保存到磁盘。 • ValidateInput:验证由客户端浏览器提交的数据,如果存在具有潜在危险的数据,则引发一个异常。
ASP.NET内置对象 • Request对象的常用属性
ASP.NET内置对象 Server对象 • Server对象是System.Web.HttpServerUtility类的实例,它包含了一些与服务器相关的信息。使用它可以获得有关最新的错误信息、对HTML文本进行编码和解码、访问和读写服务器端的文件等功能。 • Server对象的属性 • MachineName:获取服务器的计算机名称。 • ScriptTimeout:获取或设置请求超时值(以秒计)。
ASP.NET内置对象 • Server对象的方法
ASP.NET内置对象 Response对象 • Response对象是System.Web.HttpResponse类的实例,Response对象封装了Web服务器对客户端请求的响应,它用来操作HTTP相应的信息,用于将结果返回给请求者。虽然ASP.NET中控件的输出不需要我们去写HTML代码,但是在很多的时候我们希望能自己手动控制输流,比如文件的下载、重定向、脚步输出。 • Response对象的方法 • BinaryWrite:将一个二进制字符串写入HTTP输出流。 • Clear:清除缓冲区流中的所有内容输出。 • Close:关闭到客户端的套接字连接。 • End:将当前所有缓冲的输出发送到客户端,停止该页的执行,并引发 Application_EndRequest 事件。 • Flush:向客户端发送当前所有缓冲的输出。 • Redirect:将客户端重定向到新的 URL。Write将信息写入 HTTP 输出内容流。 • WriteFile将指定的文件直接写入HTTP内容输出流。
ASP.NET内置对象 • Response对象的常用属性
ASP.NET内置对象 • ASP.NET程序和桌面程序一个显著的区别是:对于ASP.NET程序,无法保存程序运行的状态。由于这个原因,状态管理对于Web应用程序来说是非常重要的。 • ASP.NET提供了多种状态管理的机制,包括Session对象、Application对象、Cookie对象等。
ASP.NET内置对象 Session对象 • Session对象实际上操作System.Web命名空间中的HttpSessionState类 。 • Session对象可以为每个用户的会话存储信息。 • Session对象中的信息只能被用户自己使用,而不能被网站的其他用户访问,因此可以在不同的页面间共享数据,但是不能在用户间共享数据。 • 利用Session进行状态管理是一个ASP.NET的显著特点。它允许程序员把任何类型的数据存储在服务器上。
ASP.NET内置对象 • ASP.NET采用一个具有120位的标识符来跟踪每一个Session。ASP.NET中利用专有算法来生成这个标识符的值,从而保证了(统计上的)这个值是独一无二的,这个特殊的标识符就被称为SessionID • SessionID是传播于网络服务器和客户端之间的唯一的一个信息。当客户端出示它的SessionID,ASP.NET找到相应的Session,从状态服务器里获得相应的序列化数据信息,从而激活该Session,并把它放到一个可以被程序所访问的集合里。
ASP.NET内置对象 • 为系统能够正常工作,客户端必须为每个请求保存相应的SessionID,获取某个请求的SessionID的方式有两种: • 使用Cookies。在这种情况下,当Session集合被使用时,SessionID被ASP.NET自动转化一个特定的Cookie(被命名为ASP.NET_SessionID)。 • 使用改装的URL。在这种情况下,SessionID被转化一个特定的改装的URL。ASP.NET的这个新特性可以让程序员在客户端禁用Cookies时创建Session。
ASP.NET内置对象 • ASP.NET对于Session内容的存储也提供了多种的模式: • InProc(默认):Session存储在IIS进程中(Web服务器内存)。InProc拥有最好的性能,但牺牲了健壮性和伸缩性。 • StateServe:Session存储在独立的Windows服务进程asp.net_state.exe中(可以不是Web服务器)。 • SqlServer:Session存储在SqlServer数据库的表中,可以用aspnet_regsql.exe配置它(SqlServer服务器)
ASP.NET内置对象 • Session对象的常用方法
ASP.NET内置对象 • Session对象的属性 • Count:获取会话状态下Session对象的个数。 • TimeOutSession:获取对象的生存周期。 • SessionID:用于标识会话的唯一编号。 • Session对象具有两个事件: • Session_OnStart事件在创建一个Session时被触发, • Session_OnEnd事件在用户Session结束时被调用。可以在Global.asax文件中为这两个事件增加处理代码。
ASP.NET内置对象 • Session对象的使用:在Session里存储一个DataSet的示例代码如下: Session["dataSet"] = dataSet; //dataSet为DataSet的一个实例 • 可以通过如下的示例代码从Session里取得该DataSet: dataset = (DataSet) Session["dataSet"]; • 对于当前用户来说,Session对象是整个应用程序的一个全局变量,程序员在任何页面代码里都可以访问该Session对象。但以下情况下,Session对象有可能会丢失: • 用户关闭浏览器或重启浏览器。 • 如果用户通过另一个浏览器窗口进入同样的页面,尽管当前Session依然存在,但在新开的浏览器窗口中将找不到原来的Session。 • Session过期。 • 程序员利用代码结束当前Session。
ASP.NET内置对象 Cookie对象 • Cookie对象是System.Web命名空间中HttpCookie类的对象。 • Cookie对象为Web应用程序保存用户相关信息提供了一种有效的方法。当用户访问某个的站点时,该站点可以利用Cookie保存用户首选项或其他信息,这样当用户下次再访问该的站点时,应用程序就可以检索以前保存的信息。 • 当用户第一次访问某个站点时,Web应用程序发送给该用户一个页面和一个包含日期和时间的Cookie。用户的浏览器在获得页面的同时还得到了这个Cookie,并且将它保存在用户硬盘上的某个文件夹中。以后如果该用户再次访问这个站点上的页面,浏览器就会在本地硬盘上查找与该网站相关联的Cookie。如果Cookie存在,浏览器就将它与页面请求一起发送到网站,Web应用程序就能确定该用户上一次访问站点的日期和时间。
ASP.NET内置对象 • Cookie中保存的信息片断以“键/值”对的形式储存,一个“键/值”对仅仅是一条命名的数据。一个网站只能取得它放在用户的电脑中的信息,它无法从其它的Cookies文件中取得信息,也无法得到用户的电脑上的其它任何东西。 • 使用Cookies的优点可以归纳如下几点: • 可配置到期规则。Cookies可以在浏览器会话结束时到期,或者可以在客户端计算机上无限期存在。 • 不需要任何服务器资源。Cookies存储在客户端并在发送后由服务器读取。 • 简单性。Cookies是一种基于文本的轻量结构,包含简单的键值对。 • 数据持久性。Cookies通常是客户端上持续时间最长的数据保留形式。
ASP.NET内置对象 • Cookies对象的属性 • Domain:获取或设置将此Cookies与其关联的域。 • Expires:获取或设置此Cookie的过期日期和时间。 • Name:获取或设置Cookies的名称。 • Path:获取或设置输出流的HTTP字符集。 • Secure:获取或设置一个值,该值指示是否通过SSL(即仅通过HTTPS)传输Cookie。 • Value:获取或设置单个Cookies值。 • Values:获取在单个Cookies对象中包含的键值对的集合。 • Cookies对象的方法 • Add:添加一个Cookies变量。 • Clear:清除Cookies集合中的变量。 • Get:通过索引或变量名得到Cookies变量值。 • GetKey:以索引值获取Cookies变量名称。 • Remove:通过Cookies变量名称来删除Cookies变量。
ASP.NET内置对象 • 对象Request和Response都提供了一个Cookies集合。可以利用Response对象设置Cookies的信息,而使用Request对象获取Cookies的信息。 • 为了设置一个Cookie,只需要创建一个System.Web.HttpCookie的实例,把信息赋予该实例,然后把它添加到当前的页面的Response对象里面,创建HttpCookie实例的代码如下: HttpCookie cookie = new HttpCookie("test"); //创建一个cookie实例 cookie.Values.Add("Name","张三"); //添加要存储的信息,采用键/值结合的方式 Response.Cookies.Add(cookie); //把cookie加入当前页面的Response对象里面 • 可以利用Cookie的名字从Request.Cookies集合取得信息,代码如下: HttpCookie cookie1 = Request.Cookies["test"]; string name; //声明一变量用来存储从Cookie里取出的信息 if (cookie1 != null) {//判断cookie1是否为空 name = cookie1.Values["Name"]; }
ASP.NET内置对象 • 删除Cookie是修改Cookie的一种形式。由于Cookie位于用户的计算机中,所以无法直接将其删除。但可以让浏览器来删除Cookie。将其有效期设置为过去的某个日期,就会删除这个已过期的Cookie。 • 删除一个Cookie的方式就是利用一个过期的Cookie来代替它,代码如下: HttpCookie cookie = new HttpCookie("test"); cookie.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(cookie);
ASP.NET内置对象 Application对象 • Application对象是System.Web命名空间中的HttpApplicationState类的实例。 • Application对象为经常使用的信息提供了一个有用的Web站点存储位置,Application中的信息可以被网站的所有页面访问,因此可以在不同的用户间共享数据。 • Application的原理是在服务器端建立一个状态变量,来存储所需的信息。要注意的是,首先,这个状态变量是建立在内存中的,其次是这个状态变量是可以被网站的所有页面访问的。
ASP.NET内置对象 • Application对象具有的特点: • 数据可以在Application对象内部共享。 • 一个Application对象包含事件,可以触发某些Applicatin对象脚本。 • 个别Application对象可以用Internet Service Manager来设置而获得不同属性。 • 单独的Application对象可以隔离出来在它们自己的内存中运行. • 可以停止一个Application对象(将其所有组件从内存中驱除)而不会影响到其他应用程序。 • 一个网站可以有不止一个Application对象。典型情况下,可以针对个别任务的一些文件创建个别的Application对象。 • Application对象成员在服务器运行期间持久地保存数据。Application对象成员的生命周期止于关闭IIS或使用Clear方法清除。 • 因为多个用户可以共享一个Application对象,所以必须要有Lock和Unlock方法,以确保多个用户无法同时改变某一属性。
ASP.NET内置对象 • Application对象的属性 • AllKeys:获取HttpApplicationState集合中的访问键。 • Count:获取HttpApplicationState集合中的对象数。 • Application对象的方法
ASP.NET内置对象 • Application对象是一个集合对象,并在整个ASP.NET网站内可用,不同的用户在不同的时间都有可能访问Application对象的变量,因此Application对象提供了Lock方法用于锁定对HttpApplicationState变量的访问以避免访问同步造成的问题。 • 在对Application对象的变量访问完成后,需要调用Application的UnLock方法取消对HttpApplicationState变量的锁定。 • 下面的代码通过Lock和UnLock方法实现了对Application变量的修改操作。 Application.Lock(); Application["Online"] = 21; Application["AllAccount"]= Convert.ToInt32(Application["AllAccount"]) + 1; Application.UnLock();