ASP.NET(get和post比較)




首先我們回顧一下,之前學過的Http協議.

這裏邊有個連接,瀏覽器要請求服務器創建一個連接,連接之後,發送請求,服務器做出響應.響應結束之後,要關閉連接,當HTTP1.0的時候是短連接,HTTP1.1的時候是長連接。長連接的意思是等個非常短的時間,還有請求的話,連接就不關閉,否則的話就關閉。

因爲這個連接,響應結束之後不管是長連接還是短連接,最終都要關閉。連接一關閉,服務器就不知道這個瀏覽器的存在,就是因爲這個特點,Http是無狀態的。無狀態會給我們造成很多的麻煩,什麼是無狀態,就是服務器不會記得瀏覽器曾經請求過我。所以,同一個頁面中請求了外部的js、css、jpg每次在請求這些文件的時候都需要重複提交一些數據。

如果網頁中引用了多個外部文件,每一個文件都要發送一個請求。還有就是服務器跟瀏覽器的關係是:請求-響應。

服務器會不會主動的給瀏覽器發送響應?

不會的,因爲服務器根本就不知道有哪些瀏覽器的存在。比如新浪微博,好像是服務器主動給瀏覽器發送響應的。

這個是怎麼實現的呢?

服務器不會主動向瀏覽器發送響應,瀏覽器有個定時器不停的向服務器發送請求,獲取服務器的響應。需要使用ServerPush(ajax隔一段時間到服務器請求最新的數據)等額外的技術。

迅雷裏面的斷點續傳是怎麼實現的呢?

當下載的時候,它會記錄下來記錄了多少個字節。並且把那些字節都放在臨時文件裏面。再次下載的時候從上次記錄的字節的位置之後開始下載,並且存放到臨時文件裏面。直到整個文件被下載完畢。再還原這個文件。

今天我們要學一般處理程序,html控件與.NET內部對象。

1、目標:從網絡的角度介紹 ASP.NET 的運行機制原理,並對 ASP.NET 中的幾個核心對象進行分析.

2、檢驗結果:熟練使用一般處理程序完成單表增刪改查

下面我們回顧下之前學過的內容,什麼是瀏覽器語言?

在瀏覽器端執行的語言叫瀏覽器語言。

服務器語言就是在服務器上執行的語言。

靜態頁面和動態頁面的區別是什麼呢?

動態頁面需要運行服務器端的語言,靜態頁面是純展示的。靜態頁面服務器直接讀文件,讀完之後直接發送。在服務器上不會執行特別複雜的事情。

如果是動態頁面的話,在服務器要創建這個類的對象,並且調相應的代碼執行。

之前,我們自己寫了個web服務器,真正應用的時候不會自己去寫服務器。我們開發完網站之後,會把網站部署在iis上。

接下來我們看下iis web服務器工作的流程。

iis跟我們自己寫的服務器的工作原理是類似的。

我們先看下iis:

                       

一、看下iis這個軟件

xp裏面的iis是5.1,win7裏面的是6.0,界面稍微有些不一樣。

 

二、iss運行網站

我們在裏面可以建個虛擬目錄,去發佈一些網站。

演示下win7中怎麼安裝iis吧。

一、首先是安裝IIS。打開控制面板,找到“程序與功能”,點進去

 

三、程序與功能

二、點擊左側“打開或關閉Windows功能”

 

四、打開或關閉Windows功能

三、找到“Internet 信息服務”,按照下圖打勾即可

 

五、找到“Internet 信息服務”

等待安裝完成

 

六、等待安裝完成

四、安裝完成後,再回到控制面板裏面,找到“管理工具”,點進入

 

七、管理工具

五、雙擊“Internet 信息服務(IIS)管理器”就是IIS了。如果經常需要使用IIS的朋友,建議鼠標指到“Internet 信息服務(IIS)管理器”上,右鍵--發送到--桌面快捷方式,這樣就能從桌面進入IIS,而不用每次都點控制面板。

 

八、IIS界面

IIS界面:

五、選中“Default Web Site”,雙擊中間的“ASP”

 

九、雙擊ASP

把“啓用父路徑”改爲“True”

 

十、把啓用父路徑改爲True

七、下面就是配置站點了。單擊右側“高級設置”

 

十一、“高級設置”

選擇你網站的目錄

 

十二、選擇網站目錄

八、回到IIS,單擊右側的“綁定...”,選中你要綁定的網站,點“編輯”

 

十三、選中網站-編輯

如果是一臺電腦,只修改後面的端口號就行,可以隨意修改數字。如果是辦公室局域網,點擊下拉框,選擇自己電腦上的局域網IP,例如:192.168.**.**,然後修改端口號

 

十四、修改端口號

九、回到IIS,如果右側顯示停止,就選擇啓動,然後點擊下面的瀏覽網站,就可以打開你綁定文件夾裏面的網站了

 

十五、瀏覽網站

十、如果有多個網站,在IIS左邊“網站”右鍵“添加網站”

 

十六、添加網站

主要修改三個地方,“網站名稱”、“物理路徑”、“端口”,如果局域網,請修改“IP地址”,同上

 

十七、修改內容

十一、添加好後,點擊新建的網站名字,就是這個網站的詳情了。

下面我們回來看看iis是怎麼工作的,

                    

十八、點擊配置

 

十九、aspnet_isapi.dll

其中的asp和aspx是不一樣的。asp交給asp.dll了。

 

二十、asp交給另一個人去處理了

請求靜態頁面:

內部先去處理請求報文,請求報文處理請求的路徑,然後再讀文件。讀到iis裏面來,iis再爲響應生成響應頭,把文件發送給瀏覽器。

 

請求動態頁面:

瀏覽器發送一個請求,通過後綴名來判斷是靜態的還是動態的?如果後綴名是aspx,這個時候iis處理不了。但是,找個人去處理,這個關係在哪兒配置的呢?

 

當請求過來以後,不管是靜態頁面還是動態頁面,都去映射表裏面找。只是找的找還是找不找的問題。如果是靜態頁面也會去映射表裏面找,一看沒找着,iis就自己處理了。讀文件然後返還。如果找着了,一看後綴名是aspx並且在映射表裏面找到了,請求交給aspnet_isapi.dll這個程序是FrameWork的。在安裝完.net FrameWork之後纔有這個文件。

那麼,iis依賴.net FrameWork呢?iis直接運行在操作系統上,iis不依賴.net FrameWork,跟.net FrameWork之間沒有關係。C#代碼在.net FrameWork上執行。iis把請求轉交給.net FrameWork,讓.net FrameWork來執行頁面的C#代碼。isapi就是它們之間的關係。怎麼去執行請求的類的對象,通過反射去創建這個類的對象。那個方法執行完之後就一層一層的返。最終,返回給瀏覽器。

當我剛裝了操作系統,又配置了iis,能執行asp.net寫的網站麼?不能,沒有.net FrameWork

如果我裝了操作系統,又裝了.net FrameWork,又裝了iis,在iis上發佈了一個asp.net的網站。能運行麼?不能,這個時候iis不知道.net FrameWork的存在。沒有配置。需要配置一下,有個命令:運行敲:cmd。

aspnet_regiis-i在iis裏面註冊.net FrameWork,生成我們看見的那些東西。不能在這運行。因爲,這個命令是.net FrameWork安裝目錄裏面的命令。

打開VS2010的命令提示。

 

二十一、不能在這執行

 

二十二、打開VS2010的命令提示

 

二十三、在這裏執行下

 

二十四、iis運行過程圖

 

二十五、工作流程圖

請求過來之後,如果後綴名是aspx,如果是iis5.1就是windowsXP裏面裝的iis,這個時候請求直接交給iis。沒有這個過程。現在這張圖是iis6.0以後執行的過程。windows sever2003安裝的就是6.0,6.0以後的iss都是這麼來請求的。請求過來之後,這個請求沒有到iis,第一步不經過iis。先經過http.sys,一個系統級別的驅動程序。操作系統內核程序。先接收到這次請求,對請求報文進行過濾看請求報文是不是合法?如果請求合法的話,這個驅動程序才把請求交給iis,iis再找iis的擴展程序,有aspnet_Isapl.dll和aspnet_filter.dll。這兩個擴展程序做的事情不一樣。

如果是靜態頁面直接處理,如果是aspx交給中間,如果是asp交給右面。

下面我們再說下什麼是ASP.Net

ASP.Net是不是一種語言?不是,是一種動態網頁技術,跟ASP一樣。

ASP.NET和ASP有什麼區別呢?

他們內部的一些對象還是一樣的,因爲這兩個技術都是微軟的,都是開發動態網頁的技術。ASP開發動態網頁的時候使用的服務器端的腳本語言。腳本語言都是解釋執行的。C#和java都是編譯執行的。ASP.NET依託於. net FrameWork框架。

 

我們在學習ASP.Net的時候需要學習這三部分內容。ASP.Net:一般處理程序(ashx),WebForm(aspx)、MVC(Model, View , Controler)。

 

看下今天的重點:

 

二十六、ASP.Net常用文件

現在我們只需要記住前三個就ok了。

下面我們寫個一般處理程序,新建一個網站:

 

二十七、新建網站

 

二十八、新建空網站

如果我把VS關了,關了之後怎麼打開網站?把網站發給了別人,別人怎麼打開呢?文件-打開-網站。簡單的辦法:

 

二十九、另存爲解決方案

用的時候直接找到保存的文件夾,雙擊解決方案就可以打開這個網站。

下面我們來建個一般處理程序:

 

三十、添加新項

 

三十一、新建一般處理程序

ashx就是一個類,爲什麼它不叫類了,變成一般處理程序了呢?就因爲它實現了IHttpHandler這個接口。

 

三十二、一般處理程序

 

三十三、轉到定義

ProcessRequest的作用是處理請求,並做出響應。

IHttpHandler接口的作用是保證所有能夠處理瀏覽器請求的類具有這個方法。這是這個接口的作用。

 

三十四、HttpContext

 

三十五、執行服務器端代碼

 

三十六、Content-Type

要是輸出html代碼的話,改成text/html

httpwatch_pro_6.1.46下載地址:

HttpWatch_Pro_7.1.37 下載地址:

練習:

輸出一段包含圖片的html頁面代碼試試。

                    

三十七、輸出包含圖片的html頁面代碼

 

三十八、發送了兩次請求

 

三十九、返回了html代碼

 

四十、再次發送請求,請求一張圖片

 

四十一、服務器幫我們做的事情

下面我們把這段代碼再改一下。

 

四十二、純文本,怎麼運行?

 

四十三、純文本顯示的就是純文本

 

一般處理程序(HttpHandler):是一個實現System.Web.IHttpHandler接口的特殊類
任何一個實現了IHttpHandler接口的類,是作爲一個外部請求的目標程序的前提。(凡是沒有實現此接口的類,就不能被瀏覽器請求。)

它由支持ASP.NET的服務器調用和啓動運行。一個HttpHandler程序負責處理它所對應的一個或一組URL地址的訪問請求,並接收客戶端發出的訪問請求信息(請求報文)和產生響應內容(響應報文)。

簡單的說:咱可以通過創建一個我們自己的HttpHandler程序來生成瀏覽器代碼發送回客戶端瀏覽器。

HttpHandler程序可以完成普通類程序所能完成的大多數任務:
1.獲取客戶端通過HTML的Form表單提交的數據和URL參數
2.創建對客戶端的響應消息內容
3.訪問服務器端的文件系統
4.連接數據庫並開發基於數據庫的應用
5.調用其他類

 

四十四、web服務器

 

四十五、一般處理程序

 

四十六、服務器怎麼接收發送數據

 

四十七、今天需要掌握的內容

下面我們看下瀏覽器提交數據的兩種方式,以百度爲例:

 

四十八、百度搜索的時候是以url傳參

 

四十九、通過表單提交數據

url以這種方式傳參: http://127.0.0.1/login.ashx?txtname1=jordan&txtpwd1=123

下面我們自己寫下get請求,

 

五十、接收數據

還有個頁面模擬百度搜索的文本框,建立個文本框。

                     

五十一、寫個html頁面,模擬百度用url傳參

 

五十二、在一般處理程序裏面接收url

 

五十三、執行過程

                     

五十四、執行請求多個值

 

五十五、獲取文本框的值以及傳值

 

五十六、監視執行的過程

 

五十七、看看這樣寫能不能被提交

運行以後發現沒有東西,所以根本就沒提交給服務器。

 

五十八、改成這個樣子

 

五十九、這種情況下還是通過get進行提交

下面我們再來看怎麼通過post的方式傳遞數據.

                       

六十、表單提交的頁面

 

六十一、給兩個文本框起個名字

 

六十二、在服務器上獲取數據

 

六十三、執行結果演示

下面我們再來看下get請求和post請求報文中的區別。

post比get請求報文中多的內容

Content-Type: application/x-www-form-urlencoded 就是告訴服務器傳輸給你的數據格式跟url是一樣的。而且在進行post提交的時候,必須具有content-type,沒有的話,post提交就失敗。

Cache-Control: no-cache 就是告訴服務器,瀏覽器不去緩存你的頁面。

請求體name=123&pwd=abc

 

六十四、注意下這個設置

下面我們看下Request常用成員

 

六十五、request

下面我們看下Params能獲取什麼?

 

六十六、遍歷輸出看看裏面都有什麼

 

六十七、Params能獲取什麼

context.Request[“”]這麼寫也行,但是不推薦使用。//相當於context.Request.Params

下面我們再來看下Response。

 

六十八、Response

 

六十九、Redirect

hello world輸出沒有?監視下請求。

 

七十、監視下請求

 

七十一、Redirect執行過程圖

 

七十二、就不再往下執行了。

下面我們看下post的時候,需要注意的問題。

 

七十三、這種情況下不能post

頁面上不可以有多個表單。可以,而且不會衝突。

因爲每個表單都有一個action。

想要提交誰必須有name屬性。

按鈕能不能提交給服務器?加name就提交給服務器了。

只有value才能提交給服務器。

div不能提交給服務器。

只有表單元素才能提交給服務器。

當元素被禁用的時候也不會提交給服務器。

 

七十四、提交性別

 

七十五、選中誰提交誰

 

七十六、表單提交多選

 

七十七、監視提交多個

用服務器接收一下。

 

七十八、用服務器接收一下

 

七十九、獲取到的值

如果我有多個文本框,文本框的name都一樣,這個時候又怎麼辦?

下面我們演示下有多個文本框的時候的情況:

 

八十、監視有多個文本框的時候

下回我們將模擬登陸,請大家關注!!!

回到起始位置

 

作者近期文章列表:

C#中級進階教程(完全免費,獻給代碼愛好者的最好禮物。注:本作者分享自己精心整理的C#中級進階教程,無任何商業目的。希望與更多的代碼愛好者交流心得,也請高手多多指點!!!)
ASP.net項目 圖書商城項目總論
三層及其它內容 遞歸
三層(一)
三層相關案例(及常見的錯誤)
三層實例(內涵Sql CRUD)
手寫代碼生成器
SQL數據庫 ADO.net 數據庫的應用圖解一
數據庫的應用詳解二
ADO.NET(內涵效率問題)
ADO.NET實例教學一
ADO.NET實例教學二
數據庫的應用詳解三
ADO.NET(內含存儲過程講解)
面向過程,面向對象中高級 面向過程,面向對象的深入理解一
面向過程,面向對象的深入理解二
面向對象的深入理解三
正則表達式
無處不在的XML
winform基礎 Winform基礎
winform中常用的控件
面向過程 三種循環的比較
C#中的方法(上)
我們常見的數組
面向對象 思想的轉變
C#中超級好用的類
C#中析構函數和命名空間的妙用
C#中超級好用的字符串
C#中如何快速處理字符串
值類型和引用類型及其它
ArrayList和HashTable妙用一
ArrayList和HashTable妙用二
文件管理File類
多態
C#中其它一些問題的小節
GDI+ 這些年我收集的GDI+代碼
這些年我收集的GDI+代碼2
HTML概述以及CSS 你不能忽視的HTML語言
你不能忽視的HTML語言2精編篇
你不能忽視的HTML語言3
html-綜合篇
CSS基本相關內容--中秋特別奉獻
CSS基本相關內容2
JavaScript基礎 JavaScript基礎一
javascript基礎二JavaScript DOM編程
jQuery jQuery(內涵: jquery選擇器)
jquery實例教學一

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章