网络编程:第6章 HTTP请求、响应及状态管理_第1页
网络编程:第6章 HTTP请求、响应及状态管理_第2页
网络编程:第6章 HTTP请求、响应及状态管理_第3页
网络编程:第6章 HTTP请求、响应及状态管理_第4页
网络编程:第6章 HTTP请求、响应及状态管理_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第6章HTTP请求、响应及状态管理2本章要点:掌握HttpRequest对象的应用掌握HttpResponse对象的应用掌握HttpServerUtility对象的应用,理解不同方法的页面重定向掌握跨页面提交的应用掌握Cookie、Session、Application、Profile应用3目录6.1HTTP请求6.2HTTP响应6.3HttpServerUtility6.4跨网页提交4目录6.5状态管理6.5.1ViewState6.5.2HiddenField控件6.5.3Cookie6.5.4Session6.5.5Application6.5.6Profile6.6小结56.1HTTP请求(Request对象)Request对象从System.web命名空间中的HttpRequest类派生,它封装了HTTP请求信息。Request能很好地控制请求数据,如访问客户端的浏览器信息、查询字符串、Cookie等信息。6Request对象的功能主要工作:从客户端获取信息,包括浏览器的种类,用户输入在表单中的数据。通过其QueryString属性获取从查询字符串中由用户提交的数据。7HttpRequest对象的数据集合对应表数据集合说明QueryString从查询字符串中读取用户提交的数据。Cookies获得客户端的Cookies数据。ServerVariables获得服务器端或客户端环境变量信息。ClientCertificate获得客户端的身份验证信息。Browser获得客户端浏览器信息。获取HttpRequest对象的Browser数据集合的语法格式:Request.Browser。8.aspx页面间传值从一个网页链接到另一个网页时,可能需要传递一些数据到另一个网页。一般采用如下格式:

URL?数据名称=数据值&数据名称=数据值……

其中?表示URL后边要传递数据,数据传递的格式为:数据名称=数据值,两个数据之间用&分割。当数据传递到另一个网页时,另一个网页用Request.QueryString[“数据名称”]的方法取出这个数据。9

stringusername=TextBox1.Text;Response.Redirect("welcome.aspx?name="+username);

接收页面:

stringstr=Request.QueryString[“name"]传值变量10实例6-1QueryString的使用当单击QueryString1.aspx页面上链接后,页面重定向到QueryString2.aspx;在页面QueryString2.aspx中显示从QueryString1.aspx传递过来的查询字符串数据信息。源程序:QueryString1.aspx源程序:QueryString2.aspx11ServerVariables数据集合可很方便地取得服务器端或客户端的环境变量信息,如客户端的IP地址等。语法格式如下:

Request.ServerVariables["环境变量名"]12常用的环境变量表环境变量名说明CONTENT_LENGTH发送到客户端的文件长度。CONTENT_TYPE发送到客户端的文件类型。LOCAL_ADDR服务器端的IP地址。REMOTE_ADDR客户端IP地址。REMOTE_HOST客户端计算机名。SERVER_NAME服务器端计算机名。SERVER_PORT服务器端网站的端口号。13Browser数据集合用于判断用户的浏览器类型、版本等,以便根据不同的浏览器编写不同的网页。语法格式为:

Request.Browser["浏览器特性名"]。14浏览器特性名对应表名称说明Browser浏览器类型。Version浏览器版本号。MajorVersion浏览器主版本号。MinorVersion浏览器次版本号。Frames逻辑值,true表示支持框架功能。Cookies逻辑值,true表示支持Cookie。。JavaScript逻辑值,true表示支持JavaScript。ActiveXControls逻辑值,true表示支持ActiveXControl控件。15实例6-2ServerVariables和Browser应用界面显示信息为ServerVariables和Brower数据集合中相应值。源程序:Request.aspx

166.2HTTP响应(Response对象)Response对象是从System.Web命名空间中的HttpResponse类派生而来。Response对象用于回应客户浏览器,可以输出信息到客户端,包括直接发送信息给浏览器、重定向浏览器到另一个URL,保存Cookie等。17输出数据跳转页面传递参数输出文件Response对象的功能18HttpResponse对象的常用属性和方法表Buffer属性逻辑值,true表示先输出到缓冲区,在处理完整个响应后再将数据输出到客户端浏览器;false表示直接将信息输出到客户端浏览器Clear()当属性Buffer值为true时,Response.Clear()表示清除缓冲区中数据信息End()终止ASP.NET应用程序的执行Flush()立刻输出缓冲区中的网页Redirect()页面重定向,可通过URL附加查询字符串在不同网页之间传递数据Write()在页面上输出信息WriteFile(filename)将filename指定的文件写入HTTP内容输出流AppendToLog()将自定义日志信息添加到IIS日志文件中19Response对象的常用方法

(1)使用Write方法

使用Response对象的Write方法可以将信息写入HTML输出内容流。Write方法的语法格式如下:

Response.Write(string);string可以是字符串常量,字符串变量,也可以是包含<script>和</script>说明的脚本语言Response.Write("<ahref=''>访问网易</a><br>");

//向浏览器写入带有超链接的文字信息Response.Write("<ahref='javascript:window.opener=null;window.close()'>关闭窗口</a>");

//向浏览器写入带有脚本的文字信息Response.Write("<script>alert('用户名或密码错');</script>");a和href属性:HTML用<a>来表示超链接,格式:<ahref=‘url’>链接的显示文字</a>20

Response.Write("欢迎光临");Response.End();Response.Write("我的网站");(2)使用Response.End()方法当执行到Response.End()语句时,对程序代码的执行将会立即终止,缓冲区中现有的内容将全部被输出到浏览器上。同时,在End()方法之后的语句都将得不到执行。21(3)使用Response.Redirect()方法利用Response对象的Redirect可以自动引导客户至另一个页面,将客户端定位到新URL。Redirect()方法之后的语句完全没有执行的机会。语法:

Response.Redirect("URL");Redirect()方法说明:使用该方法实现跳转时,浏览器地址栏显示目标URL;执行该方法时,重定向操作发生在客户端,涉及两个不同页面或两个Web服务器之间的通信,第一阶段是对原页面的请求,第二阶段是对目标URL的请求;该方法执行后内部控件保存的信息将丢失,若要从A页面传递数据到B页面,可以通过URL参数中的“?”来传递。

例:用LinkButton控件,要求按照用户输入的地址,将用户引导至相应的网站。Response对象23Response对象(4)WriteFile方法使用该方法可将指定的文件直接写入HTML内容输出流,语法为:Response.WriteFile(filename);filename为文件的名称及路径//文件的路径stringpath=Server.MapPath("DownLoad\\实验六.doc");//创建当前路径中文件的一个实例FileInfofile=newFileInfo(path);Response.Clear();//设置输出的编码Response.ContentEncoding=System.Text.Encoding.UTF8;//添加头信息,为"文件下载/另存为"对话框指定默认文件名Response.AddHeader("Content-Disposition","attachment;filename="+Server.UrlEncode(file.Name));//添加头信息,指定文件大小,让浏览器能够显示下载进度Response.AddHeader("Content-Length",file.Length.ToString());//指定文件类型Response.ContentType="application/octet-stream";Response.WriteFile(file.FullName);//把文件流发送到客户端24实例6-3Write()方法应用利用Write()方法除可以输出提示信息、变量值外,也可以输出XHTML文本或JavaScript脚本等。源程序:Write.aspx

25实例6-4Redirect()方法应用选择“教师”后,页面重定向到教师页面Teacher.aspx面,选择“学生”后页面重定向到学生页面Student.aspx。源程序:Redirect.aspx

源程序:Teacher.aspx

266.3HttpServerUtilityPage类的属性Server(即HttpServerUtility对象)封装了服务器端的一些操作,如转换XHTML元素标志、获取网页的物理路径等。27HttpServerUtility对象的常用属性和方法表ScriptTimeout属性获取和设置请求超时值,如:Server.ScriptTimeout=60;//设置最长时间为60秒Execute()停止执行当前网页,转到新的网页执行,执行完毕后返回到原网页,继续执行后续语句。HtmlEncode()将字符串中的XHTML元素标记转换为字符实体,如将“<”转换为<。HtmlDecode()与HtmlEncode作用相反。

MapPath()获取网页的物理路径。Transfer()停止执行当前网页,转到新的网页执行,执行完毕后不再返回原网页。UrlEncode()将字符串中某些特殊字符转换为URL编码,如将“/”转换为“%2f”,空格转换为“+”等。UrlDecode()与UrlEncode作用相反。28

MapPath方法Web应用程序执行时需要访问存放在服务器中的某一文件,此时需要将文件的虚拟路径转换成服务器端对应的物理路径。MapPath方法可以实现将虚拟路径转化为物理路径。其语法如下:

Server.MapPath(文件的虚拟路径);Server对象例:使用Server对象的MapPath方法获取站点的根路径及虚拟目录对应的物理路径。Response.Write("当前站点的根目录为:"+Server.MapPath("~")+"<br>");Response.Write("当前虚拟目录的物理路径为:"+Server.MapPath("DownLoad")+"<br>");Response.Write("当前页面的物理路径为:"+Server.MapPath("default.aspx"));29FileUpload控件使用方法1.先获取客户端使用FileUpload控件上载的文件名称语句:

stringfilename=FileUpload1.FileName;

2.得到文件上传到的文件夹在服务器端的物理路径。3.保存客户端文件到服务器指定文件夹。使用:

控件名.SaveAs()30具体实现上传的代码如下:stringfilename=FileUpload1.FileName;stringpath=Server.MapPath("upload");//取得upload文件夹在服务器端的物理路径FileUpload1.SaveAs(path+"\\"+filename);31区分Response.Redirect()、Server.Execute()和Server.Transfer()Redirect()方法尽管在服务器端执行,但重定向实际发生在客户端,可从浏览器地址栏中看到地址变化;而Execute()和Transfer()方法的重定向实际发生在服务器端,在浏览器的地址栏中看不到地址变化。Redirect()和Transfer()方法执行完新网页后,并不返回原网页;而Execute()方法执行完新网页后会返回原网页继续执行。32区分Response.Redirect()、Server.Execute()和Server.Transfer()(续)Redirect()方法可重定向到同一网站的不同网页,也可重定向到其它网站的网页;而Execute()和Transfer()方法只能重定向到同一网站的不同网页。利用Redirect()方法在不同网页之间传递数据时,状态管理采用查询字符串形式;而Execute()和Transfer()方法的状态管理方式与Button按钮的跨网页提交方式相同。33实例6-5HttpServerUtility对象应用Server.HtmlEncode()方法常用于在页面输出XHTML元素,若直接输出,浏览器会将这些XHTML元素解释输出。Server.UrlEncode()常用于处理链接地址,如地址中包含空格等。单击“Student.aspx链接”时将丢失“张”后面的信息。单击“Student.aspx(UrlEncode)链接”时,因使用了Server.UrlEncode()方法不再丢失“张”后面的信息。源程序:Server.aspx

34能将HTML标记当做纯文本输出,而不再看做HTML标记HtmlEncode方法当需要输出HTML标记本身(如需用浏览器输出HTML教程)的时候,可以使用Server.HtmlEncode方法,它可以将字符串中的HTML标记字符串转换为字符实体输出。35

ScriptTimeout属性当服务器端的某些应用程序陷入了死循环,或者服务器过载时,用户不可能一直等待页面显示,这时,需要一个属性来限制脚本文件的执行时间,ScriptTimeout就是这样一个属性,它的默认值为90秒。超过90秒,该页面将表示为“该页无法显示”。修改ScriptTimeout属性的语法如下:Server.ScriptTimeout=时间(单位为秒);Server对象366.4跨网页提交要实现页面重定向,在ASP.NET3.5网页中可以采用<a>元素、HyperLink控件、Response.Redirect()、Server.Execute()和Server.Transfer()方法。利用Button类型控件方式实现跨网页提交,这种方式设置方便并具有安全的状态管理功能。376.4跨网页提交(续)在实现跨网页提交时,需要将源网页上Button类型控件的属性PostBackUrl值设置为目标网页路径。而在目标页上,需要在页面头部添加PreviousPageType指令,设置属性VirtualPath值为源网页路径,如: <%@PreviousPageType

VirtualPath="~/chap6/Cross1.aspx"%>386.4跨网页提交(续)从目标网页访问源网页中数据的方法利用PreviousPage.FindControl()方法访问源网页上的控件;在源网页上定义公共属性,再在目标网页上利用“PreviousPage.属性名”获取源网页中数据。39区分跨网页提交还是调用了Server.Execute()或Server.Transfer()方法需要在目标网页的.cs文件中判断属性PreviousPage.IsCrossPagePostBack的值。如果是跨网页提交,那么属性IsCrossPagePostBack值为true;如果是调用Server.Execute()或Server.Tranfer()方法,那么属性IsCrossPageBack值为false。40实例6-6跨网页提交应用在Cross1.aspx中输入“用户名、密码”后单击“确定”,此时页面提交到Cross2.aspx,在该页面中显示Cross1.aspx中输入的数据信息。源程序:Cross1.aspx源程序:Cross2.aspx416.5状态管理客户端状态是将信息保留在客户端计算机上,当客户端向服务器端发送请求时,状态信息会随之发送到服务器端。具体实现时可选择ViewState、HiddenField、Cookie和前面提及的查询字符串。服务器状态是指状态的信息保存于服务器。具体实现时可选择Session状态、Application状态或数据库支持。42比较客户端状态和服务器端状态客户端状态由于状态数据保存在客户端,所以不消耗服务器内存资源,但容易泄露数据信息,安全性较差。服务器端状态将消耗服务器端内存资源,但具有较高的安全性。Cookie的工作原理可以通过访问网站的过程来说明:假设用户请求访问网站上的某个页面时,应用程序发送给该用户的不仅仅只有一个页面,还有一个包含日期和时间信息的Cookie,用户的浏览器在获得页面的同时还得到了这个Cookie,并把它保存在用户硬盘上某个文件夹中。以后,如果该用户再次访问该网站上的页面,当用户输入时,浏览器就将它与页面请求一起发送到网站,应用程序就能读取Cookie信息,从而能确定该用户上一次访问网站的日期和时间。程序可以根据这些信息向用户输出相应的消息。Cookie是与Web站点而不是与具体页面关联的,所以无论用户请求浏览网站中的哪个页面,浏览器和服务器都将交换的Cookie信息。用户访问其他网站时,每个网站都可能会向用户浏览器发送一些Cookie,而浏览器会将所有这些Cookie分别保存。6.5.1Cookie44Cookie是一小段文本信息,伴随着用户请求和页面在Web服务器和浏览器之间传递。用户每次访问站点时,Web应用程序都可以读取Cookie包含的信息。Cookie用来保存相关信息,但Cookie将信息保存在客户端硬盘或内存中,也就是说,无论何时用户连接到服务器,Web站点都可以访问cookie信息。这样,既方便用户的使用,也方便了网站对用户的管理。Cookie对象45ASP.NET提供System.Web.HttpCookie类来处理Cookie,常用的属性是Value和Expires。与网站关联,而不是与特定的网页关联。用户访问不同站点时,各个站点都可能会向用户的浏览器发送一个Cookie,浏览器会分别存储所有的Cookie。Cookie文本文件存储于“盘符:\DocumentsandSettings\<用户名>\Cookies”文件夹。46每个Cookie一般都会有一个有效期限,当用户访问网站时,浏览器会自动删除过期的Cookie。没有设置有效期的Cookie将不会保存到硬盘文件中,而是作为用户会话信息的一部分。当用户关闭浏览器时,Cookie就会被丢弃。这种类型的Cookie很适合用来保存只需短时间存储的信息,或者保存由于安全原因不应写入客户端硬盘文件的信息。47使用Response.Cookies数据集合建立Cookie。

Response.Cookies["Name"].Value=“张三”;也可以先创建HttpCookie对象,设置其属性,然后通过Response.Cookies.Add()方法添加。HttpCookiecookie=newHttpCookie("Name");

cookie.Value="张三";

cookie.Expires=DateTime.Now.AddDays(1);

Response.Cookies.Add(cookie);1.创建Cookie482.读取Cookie使用Request.Cookies数据集合获取Cookie值。 stringname=Request.Cookies.["Name"].Value;49实例6-7Cookie应用本实例主要实现利用Cookie确认用户是否已登录,其中Cookie.aspx页面只有在用户登录后才能显示。源程序:Cookie.aspx

源程序:CookieLogin.aspx

程序说明:测试时先浏览Cookie.aspx,此时因无用户名Cookie信息,页面重定向到CookieLogin.aspx,输入用户名单击确定将用户名信息存入Cookie。关闭浏览器。再次浏览Cookie.aspx可看到欢迎信息。506.5.2

Application对象

Application对象是一个应用程序级的对象,它包含的数据可以在整个Web站点中被所有用户使用,并且可以在网站运行期间持久地保存数据。Application是HttpApplicationState的一个实例,这个实例在一个应用程序中只存在一个,

Application创建于服务器第一次被请求时。作用:Application对象可以在给定的应用程序的多个用户之间共享信息,它是共有的对象(即所有用户都可以对某个特定的Application对象进行访问)。51Application对象

使用Application,先添加一个asax文件,它的作用是初始化应用程序级或会话级变量。

Application对象在实际网络开发中的用途就是记录整个网络的信息,如统计历史访问人数、在线人数。52运用Global.asax

文件—全局文件Global.asax必须存储在站点的根目录下,是应用程序启动时被加载的第一个文件,用来处理应用程序级别的事件。事件说明Application_Start调用当前应用程序目录(或其子目录)下的第一个ASP.NET页面时触发。Application_End应用程序的最后一个会话结束时触发。用Internet服务管理器管理单元停止Web应用程序时也会触发Session_Start每次新的会话开始时触发Session_End会话结束时触发。说明:当用户在客户端直接关闭浏览器退出Web应用程序时,并不会触发Session_End事件,因为关闭浏览器的行为是一种典型的客户端行为,是不会被通知到服务器端的。Session_End事件只有在服务器重新启动、用户调用了Session_Abandon()方法或未执行任何操作达到了Session.Timeout设置的值(超时)时才会被触发。53由于Application对象中存放的信息是共有的,有可能发生在同一时间内多个用户同时操作同一Application对象的情况,为了避免此类问题导致的出错,Application对象增加了Lock()方法和UnLock()两个方法,用于更改Application对象值时将其锁定,在更改完毕后再解除锁定。

Application对象的常用方法

使用方法如下:Application.Lock();Application["变量名"]="变量值";Application.UnLock();54Application对象的常用事件Application对象的常用事件有如下两个:

1)Start事件:该事件在应用程序启动时被触发。

2)End事件:Application_End事件在应用程序结束时被触发,即Web服务器关闭或重新启动时被触发。55

1.向Application对象写入数据

在向Application对象中保存数据时可使用如下所示的语法格式:

Application["对象名"]=对象值;

Application对象中的数据存取设置Application对象的count值为0:Application[“count”]=0;2.

修改Application对象中的数据

Application是面对所有用户的,当要修改Application状态值时,首先要调用Application.Lock()方法锁定,值修改后再调用Application.UnLock()方法解除锁定。修改Application对象中的count值,使其增1:Application.Lock();Application[“count"]=(int)Application[“count"]+1;Application.UnLock();563.读取Application对象中的数据

读取Application对象中数据的方法如下所示:

stringuser;

user=(String)Application("username);

注意:Application("对象名")的返回值是一个Object类型的数据,操作时应注意数据类型的转换。

Application对象中的数据存取Response.AddHeader("Refresh","5");AddHeader()的作用是:将一个HTTP头添加到输出流第一个参数为:要添加的HTTP头名称。第二个参数为:要添加到头中的字符串。

576.5.3Session

Session即会话,是指一个用户在一段时间内对某一个站点的一次访问。

Session对象在.NET中对应HttpSessionState类,表示“会话状态”,可以保存与当前用户会话相关的信息。

Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息。用户在应用程序的页面切换时,Session对象的变量不会被清除。

581.Session的工作原理

当用户请求一个ASP.NET页面时,系统将自动创建一个Session(会话),退出应用程序或关闭服务器时该会话撤销。系统在创建会话时将为其分配一个长长的字符串(SessionID)标识,以实现对会话进行管理和跟踪。SessionID具有的随机性和惟一性保证了会话不会冲突,也不会被怀有恶意的人利用新SessionID推算出现有会话的SessionID。59Session对象常用的属性、方法和事件表Contents属性获取对当前会话状态对象的引用。IsCookieless属性逻辑值,确定SessionID嵌入在

URL中还是存储在Cookie中。true表示存储在Cookie中。IsNewSession属性逻辑值,true表示是与当前请求一起创建的。Mode属性获取当前会话状态的模式。SessionID属性获取会话的唯一标识ID。Timeout属性获取或设置会话状态持续时间,单位为分钟,默认为20分钟。Abandon方法取消当前会话。Remove方法删除会话状态集合中的项。Session_Start事件用户请求网页时触发,相应的事件代码包含于Global.asax文件中。Session_End事件用户会话结束时触发,相应的事件代码包含于Global.asax文件中。602.向Session对象中存入数据

向Session对象中存入数据的方法十分简单,下面的语句使用户单击按钮时将3个字符串分别存入2个Session对象和1个Application对象中。protectedvoidButton1_Click(objectsender,EventArgse){Session["myval1"]="这是Session传递的数据1";stringstrVal2="这是Session传递的数据2";Session["myval2"]=strVal2;}61Session对象3.从Session对象中取出数据

下面的语句表示了当目标页面装入时如何从Session对象中取出数据的方法。protectedvoidPage_Load(objectsender,EventArgse){Label1.Text=(string)(Session["myval1"]);Label2.Text=(string)(Session["myval2"]);}62只有在web.config

文件中的sessionstate

模式设置为InProc时,才会引发Session_End事件。如果会话模式设置为StateServer或SQLServer,则不会引发该事件。对Session状态的赋值:

Session["Name"]="张三";

Session.Contents["Name"]="张三";注意:Session使用的名称不区分大小写,因此不要用大小写区分不同变量。63Session状态的存储方式可以在web.config中通过<SessionState>元素的mode属性来指定,共有Off、InProc、StateServer、SQLServer和Custom五个枚举值供选择,分别代表禁用、进程内、独立的状态服务、SQLServer和自定义数据存储。在实际工程项目中,一般选择StateServer,而对于大型网站常选用SQLServer。64某考试系统的Session状态设置<configuration><system.web><sessionStatemode="StateServer"stateConnectionString="tcpip=StateServerName:42424"cookieless="false"timeout="90"></sessionState></system.web></configuration>65实例6-8Session应用本实例能保护某些网页,如要进入Session.aspx页面,则首先要通过登录认证。源程序:Session.aspx

程序说明:当用户直接访问Session.aspx时,会判断Session["Name"]状态值,若为空则重定向到SessionLogin.aspx,否则显示欢迎信息。在SessionL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论