溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

asp.net基礎(chǔ)有哪些

發(fā)布時(shí)間:2021-09-16 16:00:28 來(lái)源:億速云 閱讀:126 作者:柒染 欄目:開(kāi)發(fā)技術(shù)

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)用.

asp.net基礎(chǔ)有哪些

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))

asp.net基礎(chǔ)有哪些

第一個(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)求詳解圖 

asp.net基礎(chǔ)有哪些

7.ashx? -HttpHandler(一般處理程序)

asp.net基礎(chǔ)有哪些

 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ò)程 

asp.net基礎(chǔ)有哪些

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方法 

asp.net基礎(chǔ)有哪些

9.服務(wù)器怎么接受和發(fā)送數(shù)據(jù)?

HTTP Request Response

asp.net基礎(chǔ)有哪些

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 

asp.net基礎(chǔ)有哪些

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) 重要成員

asp.net基礎(chǔ)有哪些

重定向原理圖如下: 

asp.net基礎(chǔ)有哪些

------------------模擬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)閉連接通道 

asp.net基礎(chǔ)有哪些

反編譯工具不停去找,去理解原理,運(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ì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI