您好,登錄后才能下訂單哦!
asp.net基礎(chǔ)有哪些,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
1.概論 瀏覽器-服務(wù)器 B/S 瀏覽的
瀏覽器和服務(wù)器之間的交互,形成上網(wǎng)B/S模式
對(duì)于HTML傳到服務(wù)器 交給服務(wù)器軟件(IIS) 服務(wù)器軟件直接讀取靜態(tài)頁(yè)面代碼,然后返回瀏覽器
對(duì)于ASPX傳達(dá)服務(wù)器 交給服務(wù)器軟件(IIS) IIS發(fā)現(xiàn)自己處理不了aspx的文件,就去映射表根據(jù)后綴名里找到響應(yīng)的處理程序(isapi,服務(wù)器擴(kuò)展程序) 問(wèn)題:IIS如何調(diào)用可擴(kuò)展程序? 答:可擴(kuò)展程序首先就是按照IIS提供的借口實(shí)現(xiàn)代碼,所以IIS就知道如何調(diào)用.
2.什么是asp.net
!asp.net是一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù),在服務(wù)器端運(yùn)行.net代碼,動(dòng)態(tài)生成HTML,然后響應(yīng)個(gè)瀏覽器
*注意,主要的操作都是服務(wù)器進(jìn)行操作,瀏覽器只是傳輸指令
!可以使用JavaScript, Dom在瀏覽器端完成很多工作,但是有很多工作無(wú)法再瀏覽端完成,比如存儲(chǔ)數(shù)據(jù),訪問(wèn)數(shù)據(jù)庫(kù)沒(méi)復(fù)雜的業(yè)務(wù)邏輯運(yùn)算,安全性要求高的邏輯運(yùn)算等.
!服務(wù)端控件和HTML控件生成關(guān)系: 在aspx頁(yè)面中可以使用服務(wù)端控件,簡(jiǎn)化開(kāi)放. 但瀏覽器只認(rèn)html, 因此在包含服務(wù)端控件的頁(yè)面被請(qǐng)求時(shí),頁(yè)面中的服務(wù)器端控件會(huì)組裝成對(duì)應(yīng)的HTML控件代碼字符串,比如 TextBox : <input type="text" />
!asp.net:ASHX(一般處理程序) (在服務(wù)器上運(yùn)行最快的) ,WebForm,WVC3 (Model, View, Controler)
!服務(wù)器控件不是新的控件,在瀏覽器端仍然是生成html標(biāo)簽,服務(wù)端控件雖然好用,但是也有缺點(diǎn),并不是什么地方用服務(wù)器端控件都好,具體后面講.
3.aspx.net里的常用文件(重點(diǎn))
第一個(gè)小例子: 動(dòng)態(tài)登錄程序
public void ProcessRequest (HttpContext context) { string modelPath = context.Server.MapPath("LoginModel.htm"); string htmlSendBack = System.IO.File .ReadAllText(modelPath); context.Response.ContentType = "text/plain"; context.Response.Write(htmlSendBack); if (!string .IsNullOrEmpty(context.Request.Form[ "txtName"])) { if (context.Request.Form["txtName" ] == "zhu" && context.Request.Form[ "txtPassword"] == "123" ) { context.Response.Write( "登錄成功!" ); } else context.Response.Write( "登錄失敗!" ); } }
4.一般處理程序(HttpHandler)
一.一般處理程序(HttpHandler):
是一個(gè)實(shí)現(xiàn)System.Web.IHttpHandler特殊接口的類(lèi).
任何一個(gè)實(shí)現(xiàn)了IHttpHandler接口的類(lèi)都能作為一個(gè)外部請(qǐng)求的目標(biāo)程序: (凡是沒(méi)有實(shí)現(xiàn)此接口的類(lèi),都不會(huì)被瀏覽器請(qǐng)求)
二.它由支持asp.net的服務(wù)器調(diào)用和啟動(dòng)運(yùn)行.一個(gè)HttpHandler程序負(fù)責(zé)處理它對(duì)應(yīng)的一個(gè)或一組URL地址的訪問(wèn)請(qǐng)求,并接受客戶(hù)端發(fā)出的訪問(wèn)信息和產(chǎn)生相應(yīng)內(nèi)容.
三.咱可以通過(guò)創(chuàng)建一個(gè)我們自己的HttpHandler程序來(lái)生成瀏覽器代碼返回客戶(hù)端瀏覽器
四.HttpHandler程序可以完成普通類(lèi)程序能完成的大多數(shù)任務(wù):
1.湖區(qū)客戶(hù)端通過(guò)HTML的Form表單提交的數(shù)據(jù)和URL參數(shù)
2.創(chuàng)建對(duì)客戶(hù)端的響應(yīng)信息內(nèi)容
3.訪問(wèn)服務(wù)端的文件系統(tǒng)
4.連接數(shù)據(jù)庫(kù)并開(kāi)發(fā)基于數(shù)據(jù)庫(kù)的應(yīng)用
5.調(diào)用其他類(lèi)
5.請(qǐng)求相應(yīng)的過(guò)程
1.用戶(hù)在瀏覽器地址欄輸入:http://localhost:80777/FirstShower.ashx
2.服務(wù)器接收到用戶(hù)的請(qǐng)求,發(fā)現(xiàn)是請(qǐng)求.ashx文件,便將請(qǐng)求交給framework執(zhí)行,fw找到對(duì)應(yīng)的文件first.ashx,執(zhí)行后將生成的字符串(通常是html+css+javascript格式)返回瀏覽器
3.瀏覽器接收到服務(wù)器返回的數(shù)據(jù),并按照http語(yǔ)法解釋執(zhí)行,以界面的方式展示給用戶(hù)看到.(此時(shí)如果html等代碼中包含外部文件,則再次發(fā)送單獨(dú)請(qǐng)求服務(wù)器相應(yīng)文件數(shù)據(jù))
6.HTTP請(qǐng)求詳解圖
7.ashx? -HttpHandler(一般處理程序)
IHttpHandler hander = new 頁(yè)面類(lèi)();
hander.ProcessRequest(); //調(diào)用的頁(yè)面類(lèi)中的方法,這是接口的優(yōu)點(diǎn)
ContentType 標(biāo)記放回對(duì)象在網(wǎng)頁(yè)中的解釋語(yǔ)言
text/html使用html語(yǔ)言翻譯
就是設(shè)置服務(wù)器發(fā)出的響應(yīng)報(bào)文的ContentType屬性,瀏覽器根據(jù)此屬性?xún)?nèi)容,使用不同的方法處理[響應(yīng)報(bào)文]
8.編譯過(guò)程
1.每一個(gè)請(qǐng)求都會(huì)要?jiǎng)?chuàng)建 一個(gè)HttpWorkerRequest和HttpApplication
2.HttpWorkerRequest 里面 放的是 每一個(gè)請(qǐng)求報(bào)文里的數(shù)據(jù)
3.HttpApplication對(duì)象里面放的是 每一個(gè)請(qǐng)求要執(zhí)行的代碼
4.為每個(gè)請(qǐng)求創(chuàng)建單獨(dú)的HttpApplication對(duì)象, 那么針對(duì)此次請(qǐng)求的所有運(yùn)行過(guò)程都在此對(duì)象中完成
Factory的理解:: HttpApplication池,每次HttpApplicationFectory都會(huì)在這個(gè)池里找有沒(méi)有空閑的HttpApplication對(duì)象,如果有,就直接拿出來(lái)用,沒(méi)有就創(chuàng)建新的使用.
服務(wù)器做的事情: 接受瀏覽器請(qǐng)求, 創(chuàng)建頁(yè)面類(lèi)的對(duì)象, 實(shí)現(xiàn)接口, 調(diào)用里面的方法, 返回相應(yīng)的東東
HttpRuntime里面,由此類(lèi),處理所有的請(qǐng)求,它的工作
1.分析請(qǐng)求報(bào)文,并將報(bào)文數(shù)據(jù)封裝入一個(gè)叫做HttpWorkerRequest類(lèi)對(duì)象
2.創(chuàng)建HttpContext對(duì)象, 次對(duì)象是當(dāng)前請(qǐng)求的上下文環(huán)境,里面包含處理請(qǐng)求的所有參數(shù)數(shù)據(jù),其中最重要的就是HttpRequest和HttpResponse兩個(gè)類(lèi)(方便取值)
3.HttpRequest主要包含了所有的請(qǐng)求信息,這些信息來(lái)源于HttpWorkRequest對(duì)象,對(duì)象包含屬性:Form(客戶(hù)連接數(shù)據(jù))QueryString(客戶(hù)端url參數(shù))
4.HttpResponse主要包含了一個(gè)FileStream對(duì)象, 用來(lái)保存頁(yè)面類(lèi)執(zhí)行過(guò)程中要輸出給瀏覽器的數(shù)據(jù)
5.通過(guò)調(diào)用HttpApplicationFectory的類(lèi)的一個(gè)靜態(tài)方法來(lái)創(chuàng)建HttpApplication類(lèi)對(duì)象中對(duì)應(yīng)屬性
6.因?yàn)樵贖ttpApplication里要運(yùn)行被請(qǐng)求的頁(yè)面類(lèi)對(duì)象里的ProcessRequest方法,所以,需要將HttpContext對(duì)象傳入到HttpApplication中來(lái) ( IHttpHandler hander = 通過(guò)反射方式創(chuàng)建被請(qǐng)求的頁(yè)面類(lèi)對(duì)象 )?
執(zhí)行HttpApplication的ProcessRequest方法 ( 可以將此方法的執(zhí)行過(guò)程看成一個(gè)管道 ) 此方法中, 要先后按照順序執(zhí)行19個(gè)委托事件
?在其中第8個(gè)事件時(shí),創(chuàng)建 被請(qǐng)求的頁(yè)面類(lèi)的對(duì)象
?在11個(gè)和12個(gè)中間,執(zhí)行了 被創(chuàng)建的頁(yè)面類(lèi)的ProcessRequest方法
9.服務(wù)器怎么接受和發(fā)送數(shù)據(jù)?
HTTP Request Response
9.1 Request(HttpRequest) & Response(HttpResponse)
一, 瀏覽器提交數(shù)據(jù)方式
1 表單 (數(shù)據(jù)藏在請(qǐng)求報(bào)文體中, 格式txtname=jamws&txtpwd=123)
<form action="login.ashx" method="post"> <input type="text" name="txtname"/> <input type="password" name="txtpwd"/> </form>
2地址欄URL參數(shù)(和表單的Get方式一樣):鍵值對(duì) 瀏覽器請(qǐng)求屬性 http://127.0.0.1/login.ashx?txtname 1=jordan&txtpwd 1=123
二,服務(wù)器如何獲取瀏覽器提交的數(shù)據(jù)?
1獲取表單數(shù)據(jù) context.Request.Form["txtname"]
2獲取URL參數(shù): context.Request.QueryString["txtname1"]
三,服務(wù)器如何向?yàn)g覽器輸出參數(shù)
context.Response.Write("我是從服務(wù)器輸出到瀏覽器的數(shù)據(jù)!");
當(dāng)用戶(hù)在瀏覽器點(diǎn)擊提交按鈕時(shí),瀏覽器自動(dòng)幫我們將表單中帶name的控件的值以賦值對(duì)字符串的方式,作為[http請(qǐng)求報(bào)文體]提交到服務(wù)器.
Request本身也可以看做一個(gè)客戶(hù)端提交過(guò)來(lái)的所有參數(shù)
Request.Form 包含的只有客戶(hù)端通過(guò)post方式提交過(guò)來(lái)的數(shù)據(jù)
Reuqest.QueryString 包含的只有客戶(hù)端通過(guò)get方式提交過(guò)來(lái)的數(shù)據(jù)
get : 獲得,拿去--當(dāng)瀏覽器發(fā)送請(qǐng)求報(bào)文是為了從服務(wù)器獲得數(shù)據(jù)的時(shí)候,就用get
post : 傳遞,有地,發(fā)送過(guò)去. --當(dāng)瀏覽器發(fā)送請(qǐng)求報(bào)文傳遞參數(shù)過(guò)去,就用post
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; System.Text. StringBuilder sbHTML = new System.Text.StringBuilder(); sbHTML.Append( "<html><head><title>登錄頁(yè)面</title></head><body><form action='03Login.ashx' method='post'>"); sbHTML.Append( "用戶(hù)名:<input type='text' name='txtname' /> <br />" ); sbHTML.Append( "密碼:<input type='password' name='txtpwd' /> <br/>" ); sbHTML.Append( "<input type='submit' value='登錄'/><a href='04Reg.ashx?a=222'>注冊(cè)</a> <br/>"); sbHTML.Append( "</form></body></html>" ); context.Response.Write(sbHTML.ToString()); //獲得瀏覽器表單post方式傳遞來(lái)的值 string strUserName = context.Request.Form["txtname"]; if (!string .IsNullOrEmpty(strUserName)) { context.Response.Write( "Form中的值:" + strUserName); } //獲得瀏覽器表單get方式傳遞來(lái)的值 string strUserNameGet = context.Request.QueryString["txtname"]; if (!string .IsNullOrEmpty(strUserNameGet)) { context.Response.Write( "Url中得到的值:" + strUserNameGet); } }
9.2 Request(HttpRequest) 重要成員
重定向原理圖如下:
------------------模擬wubForm的用戶(hù)控件數(shù)據(jù)保持------------------
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; string strNum1 = context.Request.Form["txtNum1" ]; string strNum2 = context.Request.Form["txtNum2" ]; //判斷是否格式正確 string result = "0" ; int num1 = 0, num2 = 0; if (!string .IsNullOrEmpty(strNum1) && ! string.IsNullOrEmpty(strNum2)) { if (int .TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2)) { result = (num1+num2).ToString(); } else { result = "輸入格式錯(cuò)誤" ; } } System.Text. StringBuilder sbHTML = new System.Text.StringBuilder(); sbHTML.Append( "<!DOCTYPE><html><head><title>計(jì)算器</title></head><body><form action='06Calculate.ashx' method='post'>"); sbHTML.Append( "<input type='text' name='txtNum1' value='" + num1.ToString() + "' /> + <input type='text'name='txtNum2' value='" + num2.ToString() + "'/> = <input type='text' readonly='readonly' value='" + result.ToString() + "' <br/>"); sbHTML.Append( "<input type='submit' value='計(jì)算'/><br />" ); sbHTML.Append( "</form></body></html>" ); context.Response.Write(sbHTML.ToString()); }
------------------模擬WebForm回傳檢查機(jī)制------------------
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; string strNum1 = context.Request.Form["txtNum1" ]; string strNum2 = context.Request.Form["txtNum2" ]; //判斷是否格式正確 string result = "0" ; int num1 = 0, num2 = 0; //如果包含隱藏域的話, 才執(zhí)行相加操作 if (!string .IsNullOrEmpty(context.Request.Form[ "hidIsPostBack"])) { if (!string .IsNullOrEmpty(strNum1) && ! string.IsNullOrEmpty(strNum2)) { if (int .TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2)) { result = (num1 + num2).ToString(); } else { result = "輸入格式錯(cuò)誤" ; } } } System.Text. StringBuilder sbHTML = new System.Text.StringBuilder(); sbHTML.Append( "<!DOCTYPE><html><head><title>計(jì)算器</title></head><body><form action='06Calculate.ashx' method='post'>"); sbHTML.Append( "<input type='text' name='txtNum1' value='" + num1.ToString() + "' /> + <input type='text'name='txtNum2' value='" + num2.ToString() + "'/> = <input type='text' readonly='readonly' value='" + result.ToString() + "' <br/>"); sbHTML.Append( "<input type='submit' value='計(jì)算'/><br />" ); sbHTML.Append( "<input type='hidden' name='hidIsPostBack' value='1' /></form></body></html>" ); context.Response.Write(sbHTML.ToString()); }
----------------------------基于面向?qū)ο蟮挠?jì)算器----------------------------
//---------------------------------類(lèi)定義-------------------------------------------- /// <summary> ///一個(gè)計(jì)算器類(lèi) /// </summary> public class Class1 { //第一個(gè)操作數(shù) public int num1 { get; set; } //第二個(gè)操作數(shù) public int num2 { get; set; } //操作符 public string calculateChar{ get; set; } //結(jié)果 public string result { get; set; } public Class1() { } /// <summary> /// 計(jì)算結(jié)果 /// </summary> /// <param name="a"> 第一個(gè)操作數(shù) </param> /// <param name="b"> 第二個(gè)操作數(shù) </param> /// <param name="oper"> 操作符</param> public void GetResult(int a, int b, string oper) { this.num1 = a; this.num2 = b; this.calculateChar = oper; switch (this .calculateChar) { case "+" : result = (num1 + num2).ToString(); break; case "-" : result = (num1 - num2).ToString(); break; case "*" : result = (num1 * num2).ToString(); break; case "/" : result = (num1 / num2).ToString(); break; } } } //------------------------------------------------------頁(yè)面類(lèi)---------------------------------------------------------- public class _07CalculateFour : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; //實(shí)例化一個(gè)計(jì)算器對(duì)象 Class1 calcu = new Class1(); string strNum1 = context.Request.Form["txtNum1" ]; string strNum2 = context.Request.Form["txtNum2" ]; string strOper = context.Request.Form["optionOper" ]; int num1 = 0; int num2 = 0; if (!string .IsNullOrEmpty(context.Request.Form[ "hidIsPostBack"])) { //模擬回訪 if (!string .IsNullOrEmpty(strNum1) && ! string.IsNullOrEmpty(strNum2)) { //判斷為空 if (int .TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2)) { //判斷格式 calcu.GetResult(num1, num2, strOper); } else { calcu.result = "參數(shù)格式不正確" ; } } } System.Text. StringBuilder sbHTML = new System.Text.StringBuilder(); sbHTML.Append( "<!DOCTYPE ><html><head></head><body><form action='07CalculateFour.ashx' method='post'>"); sbHTML.Append( "<input type='text' name='txtNum1' value='" +calcu.num1.ToString()+"'/>"); sbHTML.Append( "<select name='optionOper'><option value='"+calcu.calculateChar+ "'>"+calcu.calculateChar+"</option><option value='+'>+</option><option value='-'>-</option><option value='*'>*</option><option value='/'>/</option></select>" ); sbHTML.Append( "<input type='text' name='txtNum2' value='" +calcu.num2.ToString()+"'/> = "); sbHTML.Append( "<input type='text' readonly='readonly' name='txtResult' value='" +calcu.result+"'/>"); sbHTML.Append( "<input type='submit' value='計(jì)算'/>" ); sbHTML.Append( "<input type='hidden' name='hidIsPostBack' value='1'/></form></body></html>" ); context.Response.Write(sbHTML.ToString()); }
10.注意,關(guān)于提交表單的內(nèi)容
?只能為input, textarea, select三種類(lèi)型的標(biāo)簽, 只有input(文本框/CheckBox等)用戶(hù)才可以填寫(xiě)值,<label>,<p>,<font>等標(biāo)簽僅提供顯示用,沒(méi)有提交到服務(wù)器的必要.
?只有value屬性的值才會(huì)提交給服務(wù)器, 以input標(biāo)簽為例, input標(biāo)簽有title,type,disabled等屬性,但這些屬性都是供顯示用的,用戶(hù)不能修改,只有value屬性才是用戶(hù)輸入的屬性,因此只有value屬性的值才會(huì)被提交到服務(wù)器
?標(biāo)簽必須設(shè)置name屬性. 學(xué)習(xí)Dom的時(shí)候我們知道,如果通過(guò)Javascript操作標(biāo)簽,必須為標(biāo)簽設(shè)定id屬性. 如果要將標(biāo)簽的value屬性提交到服務(wù)器,則必須為標(biāo)簽設(shè)定name屬性,提交到服務(wù)器會(huì)以"name=value"的鍵值對(duì)方式提交給服務(wù)器,用&隔開(kāi),除了單選按鈕等少數(shù)標(biāo)簽,那么可以重復(fù),其他name都不能重復(fù). name是給服務(wù)器用的,id是給dom用的,對(duì)于RadioButton,同name的為一組,選中的radiobutton的value被提交到服務(wù)器.
?如果設(shè)置了控件的disabled屬性的話,瀏覽器不會(huì)把數(shù)據(jù)交給服務(wù)器
?放到form標(biāo)簽內(nèi),只有放到form標(biāo)簽才可能會(huì)被提交到服務(wù)器,form之外的input等標(biāo)簽被忽略.
11.使用模版來(lái)清晰代碼,利用虛擬模版網(wǎng)頁(yè)
?使用隱藏字段, 模擬IsPostBack, <input type="hidden" name="hidIsPostBack" value="true" />
?在模版網(wǎng)頁(yè)中,涉及到修改值得時(shí)候, 可以使用占位符, 之后, 直接替換就可以了, 使用{name}的形式即可
public class _08Cal : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; //--------------------讀取html內(nèi)容模版---------------------- //根據(jù)虛擬路徑獲得物理路徑 string path = context.Server.MapPath("CalculateModel.htm"); //這里仔細(xì)記住 string strHTML = System.IO.File.ReadAllText(path); //這里也要好好記住 //------------------獲得瀏覽器提交的內(nèi)容--------------------------- string strNum1 = context.Request.Form["txtNum1"]; string strNum2 = context.Request.Form["txtNum2"]; int num1 = 0; int num2 = 0; string result = ""; if (!string.IsNullOrEmpty(context.Request.Form["hidIsPostBack"])) { if (!string.IsNullOrEmpty(strNum1) && !string.IsNullOrEmpty(strNum2)) { if (int.TryParse(strNum1, out num1) && int.TryParse(strNum2, out num2)) { result = (num1 + num2).ToString(); } else { result = "輸入格式錯(cuò)誤"; } } } //-------------------------輸出html到瀏覽器------------------------ //字符串替換,進(jìn)行賦值 strHTML = strHTML.Replace("{num1}", num1.ToString()).Replace("{num2}", num2.ToString()).Replace("{result}", result.ToString()); context.Response.Write(strHTML); } public bool IsReusable { get { return false; } } }
//---------------------------------模版網(wǎng)頁(yè)顯示--------------------------------------- <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> < html> < head> < title> 計(jì)算器 </title > </ head> < body> < form action ='06Calculate.ashx' method ='post'> < input type ='text' name ='txtNum1' value ='{num1}' /> + < input type ='text' name ='txtNum2' value ='{num2}' /> = < input type ='text' readonly ='readonly' value ='{result}' />< br /> < input type ='submit' value ='計(jì)算' /> < input type ='hidden' name ='hidIsPostBack' value ='1' /> </ form> </ body> </ html>
12.表單的提交方式Get與Post
get傳遞的數(shù)據(jù)量是有限的, post發(fā)送的數(shù)據(jù)量沒(méi)有限制
post會(huì)產(chǎn)生刷新重新提交表單的問(wèn)題, get就沒(méi)有這樣的問(wèn)題, 可以通過(guò)地址欄重敲解決該問(wèn)題
Get方式URL數(shù)據(jù)格式, ? 后面 & 分割, URL中有漢字會(huì)進(jìn)行URL編碼
表單域只有設(shè)定了name的才會(huì)傳參, get看得清楚, submit如果有value, 也會(huì)傳遞
13.數(shù)據(jù)自增
?http是無(wú)狀態(tài)的, 瀏覽器每次請(qǐng)求服務(wù)器的頁(yè)面類(lèi)時(shí),服務(wù)器都會(huì)創(chuàng)建一個(gè)該類(lèi)的對(duì)象,并調(diào)用里面的方法執(zhí)行,最后返回輸出結(jié)果給瀏覽器,然后對(duì)象銷(xiāo)毀斷開(kāi)連接
?瀏覽器和服務(wù)器都是不認(rèn)識(shí)對(duì)方的
Connection: Keep-Alive 告訴服務(wù)器瀏覽器希望使用的長(zhǎng)連接 短連接是相當(dāng)于一次性連接
短連接的缺點(diǎn): 盡管客戶(hù)只想訪問(wèn)一個(gè)頁(yè)面,html但依然向?yàn)g覽器發(fā)送了多次新的連接請(qǐng)求,建立了多次新的連接,消耗了雙方的時(shí)間的資源
http短連接: 服務(wù)器在每次響應(yīng)完瀏覽器的一個(gè)請(qǐng)求后立馬關(guān)閉當(dāng)前連接(socket).
長(zhǎng)連接: 服務(wù)器不會(huì)立刻在發(fā)送完數(shù)據(jù)后關(guān)閉連接通道(套接字),而是會(huì)等一段時(shí)間(2秒),兩秒之內(nèi),如果相同瀏 覽器再次發(fā)送請(qǐng)求過(guò)來(lái),那么繼續(xù)使用此連接通道向?yàn)g覽器輸出數(shù)據(jù),然后再登一段時(shí)間,直到2秒后,沒(méi)有新的請(qǐng)求過(guò)來(lái),那么服務(wù)器關(guān)閉連接通道
反編譯工具不停去找,去理解原理,運(yùn)行機(jī)制 --- 牛人
一般處理程序_簡(jiǎn)單請(qǐng)求, 關(guān)于ContentType, 獲得url參數(shù)(http參數(shù)get/post傳遞本質(zhì)). (請(qǐng)求過(guò)程原理; 總體請(qǐng)求過(guò)程原理,頁(yè)面編譯過(guò)程), 請(qǐng)求數(shù)據(jù)和接受數(shù)據(jù)以及定向原理, 模擬WebForm回傳檢查機(jī)制, 模擬wubForm的用戶(hù)控件數(shù)據(jù)保持, 自增(解決http的無(wú)狀態(tài)), 登錄過(guò)程
接下去的學(xué)習(xí):
加法計(jì)算器, 增刪查改, 搭建三層構(gòu)架, 列表和刪除, 刪除信息功能, 新增
上傳單個(gè)文件, 生成縮略圖, 一般處理程序輸出圖片(簡(jiǎn)單驗(yàn)證碼圖片), 輸出水印圖片, 下載, 復(fù)習(xí)總結(jié)。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。