透過ashx看瀏覽器服務器運行本質(圖解)
瀏覽器與IIS服務器與.Net FrameWork關系

ASP.Net是一種動態(tài)網(wǎng)頁技術,在服務器端運行.Net代碼,動態(tài)生成HTML,然后響應給瀏覽器。
可以使用JavaScript、Dom在瀏覽器端完成很多工作,但是有很多工作無法在瀏覽器端完成,比如存儲數(shù)據(jù)、訪問數(shù)據(jù)庫、復雜的業(yè)務邏輯運算、安全性要求高的邏輯運算等。
ASP.Net:一般處理程序(ashx),WebForm(aspx)、MVC3(Model, View , Controler)。
Asp.Net里的常用文件
|
文件擴展名 |
說明 |
| .ashx |
一般處理程序,ASP.NET核心程序,但一般使用.aspx[不需要返回大量html代碼時使用] |
| .aspx |
常用程序WebForm,用于創(chuàng)建網(wǎng)頁和對網(wǎng)頁進行編程的核心文件類型(前臺文件),和.aspx.cs文件配套使用[當需要返回大量html代碼使用使用它] |
| .aspx.cs |
常用程序,用于編寫大量的c#業(yè)務代碼,和.aspx配套使用。 |
| .ascx |
指明一個 ASP.NET 用戶定義控件 |
| .asax |
包含 ASP.NET 應用程序級事件的事件語法 |
| .config |
配置文件,用于設置網(wǎng)站應用程序的各種屬性 |
| .asmx | 供宿主 Web 服務在本地或遠程使用 |
一般處理程序(HttpHandler)
是一個實現(xiàn)System.Web.IHttpHandler接口的特殊類。
任何一個實現(xiàn)了IHttpHandler接口的類是作為一個外部請求的目標程序的前提。(凡是沒有實現(xiàn)此接口的類,就不能被瀏覽器請求。)
它由支持ASP.NET的服務器調用和啟動運行。一個HttpHandler程序負責處理它所對應的一個或一組URL地址的訪問請求,并接收客戶端發(fā)出的訪問請求信息(請求報文)和產(chǎn)生響應內容(響應報文)。
咱可以通過創(chuàng)建一個我們自己的HttpHandler程序來生成瀏覽器代碼發(fā)送回客戶端瀏覽器。
HttpHandler程序可以完成普通類程序所能完成的大多數(shù)任務:
1.獲取客戶端通過HTML的Form表單提交的數(shù)據(jù)和URL參數(shù)
2.創(chuàng)建對客戶端的響應消息內容
3.訪問服務器端的文件系統(tǒng)
4.連接數(shù)據(jù)庫并開發(fā)基于數(shù)據(jù)庫的應用
5.調用其他類
ashx的簡單使用
Cul.ashx讀取model.html將處理后的html代碼返回給瀏覽器
using System.Web;
namespace ASHX{
public class Cul : IHttpHandler { //IHttpHandler非常重要的接口 實現(xiàn)接口就是為了統(tǒng)一調用ProcessRequest處理頁面的方法
//注意:Q2:為什么瀏覽器輸入cul.ashx同樣能顯示內容呢? A2:因為程序編譯的時候 對Cul.ashx進行了重命名
public void ProcessRequest( HttpContext context) { //context 請求上下文對象 瀏覽器請求所有信息包括在其內部
context.Response.ContentType = "text/plain" ;//text/plain 當做普通的字符串解釋就行 text/html則是當做html解釋執(zhí)行
//注:如果text/plain 而輸出的內容時一個完整的html頁面內容 會被瀏覽器自動解釋執(zhí)行 因為瀏覽器的向下兼容
//獲得模板頁面在 服務器上的 物理路徑
string PagePath = context.Server.MapPath("Model.htm" );
//讀取模板內容
string HTMLStr = System.IO.File .ReadAllText(PagePath);
HTMLStr = HTMLStr.Replace( "@{title}" , "這是第一個靜態(tài)處理文件" ).Replace( "@{Content}", "我是靜態(tài)處理文件動態(tài)產(chǎn)生的哦~ ~" );
//輸出到頁面
context.Response.Write(HTMLStr); //Response服務器響應屬性
context.Response.Write( "痞子一毛" ); //Q1:為什么"痞子一毛"和HTMLStr一起輸出到界面 而非覆蓋呢?
//A1:因為Write其實是向 Response屬性所操作的一個HttpResponse對象 里的HtmlWrite對象里的緩存區(qū)寫數(shù)據(jù)
//Q3:為什么要寫入緩存區(qū)? A3:因為此時壓根兒就沒有生成響應報文
}
public bool IsReusable {
get {
return false ; //是否可重用
}
}
}
}
html.model代碼如下:
< head>
<title > @{title}</ title >
</ head>
< body>
@{Content}
</ body>
</ html>
以上代碼運行原理圖解

相關文章
使用Fiddler調試visual studion多個虛擬站點的問題分析
本篇文章小編為大家介紹,使用Fiddler調試visual studion多個虛擬站點的問題分析。需要的朋友參考下2013-04-04
dz asp.net論壇中函數(shù)--根據(jù)Url獲得源文件內容
從asp.net dz論壇發(fā)現(xiàn)的這個函數(shù),學習一下高手的經(jīng)驗代碼2008-09-09
asp.net中使用 Repeater控件拖拽實現(xiàn)排序并同步數(shù)據(jù)庫字段排序
這篇文章主要介紹了asp.net中使用 Repeater控件拖拽實現(xiàn)排序并同步數(shù)據(jù)庫字段排序的相關資料,需要的朋友可以參考下2015-12-12
ASP.NET中Application和Cache的區(qū)別分析
在asp.net中儲存數(shù)據(jù)的方式有很多,包括application,session,cache, cookie, viewstate。其中application和cache的應用范圍,使用方式都比較相似,這里主要對比一下這兩種方式。2010-03-03
Gridview使用CheckBox全選與單選采用js實現(xiàn)同時高亮顯示選擇行
Gridview使用CheckBox單選與全選功能再次進行簡單演示,選中的行,使用高亮顯示,讓用戶一目了然看到哪一行被選擇了,在項目中很實用的,開發(fā)中的朋友們可要考慮一下哦2013-01-01

