717
京東網上商城
初識ASP.NET---一般處理程序
問題來源:
今天在敲一個小的demo,利用Jquery實現級聯下拉框,敲的過程中發現無論怎麼和源碼對照都無法顯示想要的功能。這才想著原來是沒有寫後台代碼,詢問一清同學的時候,他告訴我可以利用ASP.NET的一般處理程序。
我果然是菜鳥初學者,因為我還沒有接觸過一般處理程序!
什麼是一般處理程序:
一般處理程序:是一個實現System.Web.IHttpHandler接口的特殊類。任何一個實現了IHttpHandler接口的類,是作為一個外部請求的目標程序的前提。(凡是沒有實現此接口的類,就不能被瀏覽器請求。)它由支持ASP.NET的服務器調用和啟動運行。 一個HttpHandler程序負責處理它所對應的一個或一組URL地址的訪問請求,並接收客戶端發出的訪問請求信息(請求報文)和產生響應內容(響應報文)。
優點:輕量化、效率較高
創建一個一般處理程序將會生成兩個後綴名的文件.ashx和.ashx.cs。ashx裏隻有一個指令集,沒有任何其他代碼;ashx.cs就是頁麵處理代碼。如果有大量html,需要通過ashx來拚接字符串或讀取模板的方式完成。其中.ashx.cs對應的內容,如以下代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace web { /// <summary> /// Handler 的摘要說明 /// </summary> public class Handler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //表示輸出結果類型 context.Response.Write("Hello World"); //輸出結果 } public bool IsReusable { get { return false; } } } }
(1)HttpContext: 請求上下文對象,包含:請求報文對象(HttpRequest),響應報文對象(HttpResponse),服務器幫助類(Server),Session等。
(2)FrameWork在接收到請求後,通過反射技術創建請求路徑對應的類的對象,並強製轉換成IHttpHandler接口對象(HttpHandler實現了IHttpHandler,之後的轉換相當於將子類強轉為父類),統一調用ProcessRequest方法處理。
(3)IsReusable屬性用來表示在IHttpHandlerFactory對象創建IHttpHandler的時候是否能夠將這個Handler存入池中以便重用。
(4)ContentTyp屬性是一般處理程序輸出響應內容,輸出的內容有可能是圖片、html等其他頁麵,瀏覽器根據響應報文體內容不知道接收到的是什麼,需要判斷響應報文頭裏的ContentType來決定將報文體內容作為何種格式的數據來顯示。(image/jpeg----表示輸出的是圖片,text/plain--------表示輸出文本)
從上麵的代碼可以看到,一般處理程序實際上就是一個實現IHttpHandler接口的處理程序類,這個處理程序被ASP.NET直接在係統配置文件映射到了ashx擴展名的請求上。這樣,我們就不需要在配置文件中進行配置了。
具體的用途:
HttpHandler程序可以完成普通類程序所能完成的大多數任務:
1.獲取客戶端通過HTML的Form表單提交的數據和URL參數
2.創建對客戶端的響應消息內容
3.訪問服務器端的文件係統
4.連接數據庫並開發基於數據庫的應用
5.調用其他類
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace web { /// <summary> /// Handler 的摘要說明 /// </summary> public class Handler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //表示輸出結果類型 context.Response.Write("Hello World"); //輸出結果 } public bool IsReusable { get { return false; } } } }
具體的運用:
下麵是利用Jquery實現級聯下拉框效果中,需要用一般處理程序獲得汽車類型的一般處理程序的代碼。
public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string strCarName =context.Request["carnameValue"].ToString(); SqlConnection conn = new SqlConnection("server=.;database=car;uid=sa;pwd=123456;"); //定義連接字符串 conn.Open(); //打開連接 SqlDataAdapter sdr = new SqlDataAdapter(); sdr.SelectCommand =new SqlCommand ("selectid,cartype from t_cartype where carnameid='" + strCarName + "'",conn); DataTable dt = new DataTable(); sdr.Fill(dt); string str =DataTableToJson("1", dt); context.Response.Write(str); } public bool IsReusable { get { return false; } } }
總結:
其實理論知識再好不會用也隻會停留在理論層麵。而編程又是這麼奇怪的一個東西無論別人講得多麼的詳細,都比不上自己的一次實踐。文中所提到的demo源碼,文章最後會附有下載鏈接。
demo源碼下載:https://download.csdn.net/detail/senior_lee/7697243
最後更新:2017-04-03 05:39:36