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
練習:
輸出一段包含圖片的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實例教學一 |