申明:本文是學習2014版ASP.Net視頻教程的學習筆記,僅供本人復習之用,也沒有發布到博客園首頁。
一、一般處理程序基礎
(1)表單提交注意點:
①GET通過URL,POST通過報文體;
②需在HTML中為表單元素設置name;
③元素id是給Dom用的,name才是提交給服務器用的;
(2)請求處理響應模型:
①瀏覽器發出訪問請求→②服務器處理訪問請求並返回HTML→③瀏覽器解析HTML並顯示頁面
(3)GET與POST的區別:(★★★→重點)
①GET通過URL傳值,而POST通過HTTP報文;
②GET傳遞的數據量有限,POST則沒有限制;
③POST方式無法通過URL在其他用戶中還原;
④GET方式URL傳特殊字符需要事先進行編碼;
(4)HTTP協議基本理解:
①連接(Connection):HTTP不保持連接(請求完成就關閉),如果保持連接會降低客戶端並發處理請求數,不保持連接會降低處理速度(建立連接速度很慢);
②請求(Request):包含請求類型、請求的數據以及客戶端信息等;
③響應(Response):包含具體HTML、響應是否成功以及錯誤碼等;
二、模板引擎開發基礎
(1)傳統模式的缺點:
①沒有實現界面和邏輯的分離,美工無法介入;
②占位符替換不夠靈活,無法進行復雜的替換;
(2)NVelocity模板引擎:
①基本用法:編寫模板→提供數據→渲染生成HTML
②擴展用法:include與parse的區別?
→#include("head.htm")代表模板嵌套子模板;#parse("foot.htm")代表模板嵌套子模板,子模板可繼承父模板中的參數;
③注意之處:
NVelocity解析JQuery代碼$.ajax中的$時把$當做NVelocity中的特殊符號,應對方法是使用jQuery.ajax代替$.ajax;
如果要將DataTable傳遞給NVelocity時僅傳遞DataTable.Rows即可,因為Rows才是一個Collection(集合),可以使用foreach遍歷;
為了減少每次NVelocity解析模板的時間建議啟用NVelocity緩存;
三、狀態的傳遞與保持
(1)經典的URL傳遞:
①優點:簡單直接,明確發給誰,數據不會亂;
②缺點:無法保密,安全性不高
(2)隱藏字段傳遞:
①會加大網站流量;
②會降低訪問速度,想想ViewState;
③機密數據無法保證安全性;
(3)Cookie:(★★★★→重點)
①基本概念:保存在瀏覽器端,每次向服務器提交請求時都會帶上Cookie;服務器返回報文除了Html外還有更新后的Cookie;
②生命周期:如果沒有設定Expires過期時間,那么關閉瀏覽器則終止Cookie;如果設定了Expires過期時間,則以過期時間為准作為失效時間;
③缺點限制:存儲數據量有限,機密信息不能存在Cookie中;無法跨越不同的瀏覽器,例如:IE、Chorme、Firefox等;可以被清除,不要將不能丟失的數據存到Cookie;
(4)Session:(★★★★→重點)
①基本概念:服務器端的“Cookie”,類似於病歷本;
②生命周期:Session具有自動銷毀機制;
③使用注意:HttpHandler要使用Session需實現IRequiresSessionState接口;存放在服務器內存中,不要存放大數據;
④與Cookie的關系:Session在創建時會依賴於Cookie,實質是Cookie存儲一個SessionID作為每次提交服務器請求訪問的Key,Session通過這個Key找到具體的Value值;
(5)Application:
①基本概念:應用全局對象,被全局共享;使用操作之前先加Lock,完成之后UnLock;一般放在Global.asax中的Application_Start事件中;
②使用注意:很多書舉例使用Application統計訪問人數會導致網站在大並發量下會很十分卡;建議做網站開發盡量不用Application,也很少需要有用到它的時候;
PS:很多書中都會這樣使用Application,是不是很眼熟?在使用前加Lock,完成之后UnLock雖然是一個比較好的同步操作,但是也正因為如此,加Lock會造成在大並發量的訪問情況下網站系統出現卡頓的現象。
View Code1 void Application_Start(object sender, EventArgs e) 2 { 3 // 在應用程序啟動時運行的代碼 4 Application["count"] = 0;//初始設置計數從0開始 5 } 6 7 void Session_Start(object sender, EventArgs e) 8 { 9 // 在新會話啟動時運行的代碼 10 Application.Lock();//同步,避免同時寫入 11 Application["count"]=(int)Application["count"]+1;//每建立一個會話該全局變量加1 12 Application.UnLock();//同步結束 13 }
四、AJAX基礎
(1)AJAX產生原因:
①傳統全局刷新導致用戶體驗不好; ②IE5中首次引入了XMLHttpRequest;
(2)AJAX基本概念:
①AJAX全稱:AsynchronousJavascriptAndXML=異步的JavaScript和XML,一種進行頁面局部刷新的技術;
②AJAX通過在后台與服務器進行少量數據交換,AJAX可以使網頁實現異步更新,從而改善用戶體驗效果;
(3)AJAX基本流程:
①瀏覽器HTML中使用JavaScript創建XMLHttpRequest → ②服務器端獲取請求進行處理並返回符合AJAX風格的數據(例如Json) → ③瀏覽器JavaScript解析服務器返回的數據並局部顯示或更改信息
(4)AJAX核心對象:JavaScript對象XMLHttpRequest
XmlHttpRequest使我們可以使用JavaScript向服務器提出請求並處理響應,而不阻塞用戶。
PS:下面是一段經典的純手工使用js對象XMLHttpRequest的實例:
View Codefunction ajax(url, onsuccess) { var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); //創建XMLHTTP對象,考慮兼容性。XHR xmlhttp.open("POST", url, true); //“准備”向服務器的GetDate1.ashx發出Post請求(GET可能會有緩存問題)。這里還沒有發出請求 //AJAX是異步的,並不是等到服務器端返回才繼續執行 xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) //readyState == 4 表示服務器返回完成數據了。之前可能會經歷2(請求已發送,正在處理中)、3(響應中已有部分數據可用了,但是服務器還沒有完成響應的生成) { if (xmlhttp.status == 200) //如果Http狀態碼為200則是成功 { onsuccess(xmlhttp.responseText); } else { alert("AJAX服務器返回錯誤!"); } } } //不要以為if (xmlhttp.readyState == 4) {在send之前執行!!!! xmlhttp.send(); //這時才開始發送請求。並不等於服務器端返回。請求發出去了,我不等!去監聽onreadystatechange吧! }
(5)AJAX優點缺點:
①優點:頁面無刷新,在頁面內與服務器通信,給用戶的體驗非常好;“按需取數據”,可以最大程度的減少冗余請求和響應對服務器造成的負擔;基於XML標准化,並被瀏覽器廣泛支持,不需安裝插件等;
②缺點:由於AJAX只是局部刷新,所以頁面的后退按鈕是沒有用的(破壞了后退按鈕機制);對流媒體還有移動設備的支持不是太好;
五、客戶端不可信
(1)客戶端驗證不能代替服務端驗證:
①客戶端校驗是為了更好的客戶端體驗,服務端校驗是最后一次把關,防止惡意請求;
②請求報文數據可以修改,例如Http報文中的UserAgent、Referer、Cookie等都是可以造假的;
③JQuery Validator+服務端校驗是不錯的開發方式;
(2)ValidateRequest:
①ASP.Net默認對請求數據進行了校驗->防止XSS攻擊(跨站腳本攻擊)
②對於要提交含HTML的文本內容需要關閉校驗,在web.config中設置requestValidationMode="2.0"

<system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime requestValidationMode="2.0" /> </system.web>
利用關閉校驗的漏洞可以進行:送獎品的消息框、收集賬號和密碼;
(3)CKEditor:經典的Web在線編輯器
①除了_samples、_source、*.php、*.asp都放到js/ckeditor文件夾下;
②頁面中引用ckeditor.js;
③頁面編輯器的位置使用textarea,在頁面onload中或textarea之后使用CKEDITOR.replace(textarea);
總結思維導圖