重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
asp.net基礎有哪些,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
成都創新互聯是一家集網站建設,濮陽企業網站建設,濮陽品牌網站建設,網站定制,濮陽網站建設報價,網絡營銷,網絡優化,濮陽網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。1.概論 瀏覽器-服務器 B/S 瀏覽的
瀏覽器和服務器之間的交互,形成上網B/S模式
對于HTML傳到服務器 交給服務器軟件(IIS) 服務器軟件直接讀取靜態頁面代碼,然后返回瀏覽器
對于ASPX傳達服務器 交給服務器軟件(IIS) IIS發現自己處理不了aspx的文件,就去映射表根據后綴名里找到響應的處理程序(isapi,服務器擴展程序) 問題:IIS如何調用可擴展程序? 答:可擴展程序首先就是按照IIS提供的借口實現代碼,所以IIS就知道如何調用.
2.什么是asp.net
!asp.net是一種動態網頁技術,在服務器端運行.net代碼,動態生成HTML,然后響應個瀏覽器
*注意,主要的操作都是服務器進行操作,瀏覽器只是傳輸指令
!可以使用JavaScript, Dom在瀏覽器端完成很多工作,但是有很多工作無法再瀏覽端完成,比如存儲數據,訪問數據庫沒復雜的業務邏輯運算,安全性要求高的邏輯運算等.
!服務端控件和HTML控件生成關系: 在aspx頁面中可以使用服務端控件,簡化開放. 但瀏覽器只認html, 因此在包含服務端控件的頁面被請求時,頁面中的服務器端控件會組裝成對應的HTML控件代碼字符串,比如 TextBox :
!asp.net:ASHX(一般處理程序) (在服務器上運行最快的) ,WebForm,WVC3 (Model, View, Controler)
!服務器控件不是新的控件,在瀏覽器端仍然是生成html標簽,服務端控件雖然好用,但是也有缺點,并不是什么地方用服務器端控件都好,具體后面講.
3.aspx.net里的常用文件(重點)
第一個小例子: 動態登錄程序
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):
是一個實現System.Web.IHttpHandler特殊接口的類.
任何一個實現了IHttpHandler接口的類都能作為一個外部請求的目標程序: (凡是沒有實現此接口的類,都不會被瀏覽器請求)
二.它由支持asp.net的服務器調用和啟動運行.一個HttpHandler程序負責處理它對應的一個或一組URL地址的訪問請求,并接受客戶端發出的訪問信息和產生相應內容.
三.咱可以通過創建一個我們自己的HttpHandler程序來生成瀏覽器代碼返回客戶端瀏覽器
四.HttpHandler程序可以完成普通類程序能完成的大多數任務:
1.湖區客戶端通過HTML的Form表單提交的數據和URL參數
2.創建對客戶端的響應信息內容
3.訪問服務端的文件系統
4.連接數據庫并開發基于數據庫的應用
5.調用其他類
5.請求相應的過程
1.用戶在瀏覽器地址欄輸入:http://localhost:80777/FirstShower.ashx
2.服務器接收到用戶的請求,發現是請求.ashx文件,便將請求交給framework執行,fw找到對應的文件first.ashx,執行后將生成的字符串(通常是html+css+javascript格式)返回瀏覽器
3.瀏覽器接收到服務器返回的數據,并按照http語法解釋執行,以界面的方式展示給用戶看到.(此時如果html等代碼中包含外部文件,則再次發送單獨請求服務器相應文件數據)
6.HTTP請求詳解圖
7.ashx? -HttpHandler(一般處理程序)
IHttpHandler hander = new 頁面類();
hander.ProcessRequest(); //調用的頁面類中的方法,這是接口的優點
ContentType 標記放回對象在網頁中的解釋語言
text/html使用html語言翻譯
就是設置服務器發出的響應報文的ContentType屬性,瀏覽器根據此屬性內容,使用不同的方法處理[響應報文]
8.編譯過程
1.每一個請求都會要創建 一個HttpWorkerRequest和HttpApplication
2.HttpWorkerRequest 里面 放的是 每一個請求報文里的數據
3.HttpApplication對象里面放的是 每一個請求要執行的代碼
4.為每個請求創建單獨的HttpApplication對象, 那么針對此次請求的所有運行過程都在此對象中完成
Factory的理解:: HttpApplication池,每次HttpApplicationFectory都會在這個池里找有沒有空閑的HttpApplication對象,如果有,就直接拿出來用,沒有就創建新的使用.
服務器做的事情: 接受瀏覽器請求, 創建頁面類的對象, 實現接口, 調用里面的方法, 返回相應的東東
HttpRuntime里面,由此類,處理所有的請求,它的工作
1.分析請求報文,并將報文數據封裝入一個叫做HttpWorkerRequest類對象
2.創建HttpContext對象, 次對象是當前請求的上下文環境,里面包含處理請求的所有參數數據,其中最重要的就是HttpRequest和HttpResponse兩個類(方便取值)
3.HttpRequest主要包含了所有的請求信息,這些信息來源于HttpWorkRequest對象,對象包含屬性:Form(客戶連接數據)QueryString(客戶端url參數)
4.HttpResponse主要包含了一個FileStream對象, 用來保存頁面類執行過程中要輸出給瀏覽器的數據
5.通過調用HttpApplicationFectory的類的一個靜態方法來創建HttpApplication類對象中對應屬性
6.因為在HttpApplication里要運行被請求的頁面類對象里的ProcessRequest方法,所以,需要將HttpContext對象傳入到HttpApplication中來 ( IHttpHandler hander = 通過反射方式創建被請求的頁面類對象 )?
執行HttpApplication的ProcessRequest方法 ( 可以將此方法的執行過程看成一個管道 ) 此方法中, 要先后按照順序執行19個委托事件
?在其中第8個事件時,創建 被請求的頁面類的對象
?在11個和12個中間,執行了 被創建的頁面類的ProcessRequest方法
9.服務器怎么接受和發送數據?
HTTP Request Response
9.1 Request(HttpRequest) & Response(HttpResponse)
一, 瀏覽器提交數據方式
1 表單 (數據藏在請求報文體中, 格式txtname=jamws&txtpwd=123)
2地址欄URL參數(和表單的Get方式一樣):鍵值對 瀏覽器請求屬性 http://127.0.0.1/login.ashx?txtname 1=jordan&txtpwd 1=123
二,服務器如何獲取瀏覽器提交的數據?
1獲取表單數據 context.Request.Form["txtname"]
2獲取URL參數: context.Request.QueryString["txtname1"]
三,服務器如何向瀏覽器輸出參數
context.Response.Write("我是從服務器輸出到瀏覽器的數據!");
當用戶在瀏覽器點擊提交按鈕時,瀏覽器自動幫我們將表單中帶name的控件的值以賦值對字符串的方式,作為[http請求報文體]提交到服務器.
Request本身也可以看做一個客戶端提交過來的所有參數
Request.Form 包含的只有客戶端通過post方式提交過來的數據
Reuqest.QueryString 包含的只有客戶端通過get方式提交過來的數據
get : 獲得,拿去--當瀏覽器發送請求報文是為了從服務器獲得數據的時候,就用get
post : 傳遞,有地,發送過去. --當瀏覽器發送請求報文傳遞參數過去,就用post
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; System.Text. StringBuilder sbHTML = new System.Text.StringBuilder(); sbHTML.Append( "登錄頁面
9.2 Request(HttpRequest) 重要成員
重定向原理圖如下:
------------------模擬wubForm的用戶控件數據保持------------------
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 = "輸入格式錯誤" ; } } System.Text. StringBuilder sbHTML = new System.Text.StringBuilder(); sbHTML.Append( "計算器
------------------模擬WebForm回傳檢查機制------------------
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(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 = "輸入格式錯誤" ; } } } System.Text. StringBuilder sbHTML = new System.Text.StringBuilder(); sbHTML.Append( "計算器
----------------------------基于面向對象的計算器----------------------------
//---------------------------------類定義-------------------------------------------- //////一個計算器類 /// public class Class1 { //第一個操作數 public int num1 { get; set; } //第二個操作數 public int num2 { get; set; } //操作符 public string calculateChar{ get; set; } //結果 public string result { get; set; } public Class1() { } ////// 計算結果 /// /// 第一個操作數 /// 第二個操作數 /// 操作符 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; } } } //------------------------------------------------------頁面類---------------------------------------------------------- public class _07CalculateFour : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; //實例化一個計算器對象 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 = "參數格式不正確" ; } } } System.Text. StringBuilder sbHTML = new System.Text.StringBuilder(); sbHTML.Append( "
10.注意,關于提交表單的內容
?只能為input, textarea, select三種類型的標簽, 只有input(文本框/CheckBox等)用戶才可以填寫值,