1. 程式人生 > >2017-9-11 - A - webServer

2017-9-11 - A - webServer

縮減 空字符 哪裏 而不是 最有 reg 改變 context resp

1
* /index.html
* /reg?username=fancq&password=123456&nickname=
* 在GET請求中,URI可能會有上面兩種情況。
* HTTP協議中規定,GET請求中的URI可以傳遞參數,而規則時請求的資源後面以
* “?”分割,之後則為所有要傳遞的參數,每個參數由:
* name=value的格式保存,每個參數之間使用“&”分割。
* 這裏的處理要求:
* 將“?”之前的內容保存到屬性uri上。
* 之後的每個參數都存入屬性parameters中
* 其中key為參數名,value為參數的值。
* 1:實例化HashMap用於初始化屬性parameters

2 學習項目的脈絡把握才是關鍵,對項目整體的把握,實際上方法的創建只是其次,學到老師對項目的整體把控才是最有價值的。
為什麽此處直接定義即可,後續不需要考慮不同情況的處理嗎,
老師測試方法的思路,new一個類,傳入參數,調用方法。
post情況下,如果加上傳參產生的變化不需要考慮嗎?如果是,老師是怎樣設計函數達到了這樣的效果。
結合面向對象思想理解程序流程,整個流程實際上就是初始化各類對象,最後返回目標對象的過程。

技巧①,順之前的處理思路而下,看哪裏涉及到了需要做改變
如在file.exists那裏的判斷現在就要加上一個如果全等於reg的判斷。

3 服務器整體業務流程是什麽?
新建一個服務器獲取請求,讀取處理請求,返回請求資源
將後兩個流程中包入ClietnHandler(新建類),一旦有新的請求便創建新的線程,由於線程較多,因此需要用線程池管理。
ClientHandler中的主要流程又是run方法,run方法(便是包含獲取,讀取,處理請求)的流程為,
run方法中便包含了——
①讀取請求,將請求項轉化為對象,方便後續檢索確定返回的數據。
對象包括請求頭及消息頭查找表,將處理該對象的方法也寫入——直接傳入輸入流,直接將請求轉換為請求對象——大大縮減代碼量
消息頭
①消息頭中的請求方式有兩種,需分開處理
②消息頭查找表在使用前必須實例化,不然用不了
跳出循環的判斷條件是 返回字符串長度為0 而不是全等於null或""。(StringBuilder內部默認維護一個空字符串)
②返回請求,將響應的屬性實例化成一個對象。
請求對象包含:
狀態行,響應頭(header),響應正文(網頁資源)
將對應屬性以原生數據類型傳入對象,然後直接在內部轉換成輸出流
可直接用out輸出,但更建議加載在緩沖流上輸出,大大加快速度

4 使用"/reg".equals(uri)還是uri.equals("/reg")?
"/reg".equals(uri),uri.equals("/reg")

6 如何理解webServer項目中的面向對象編程思想?應如何利用OOP思想編程?
對象與對象通過方法對接,而方法又包在對象內。
原本是傳遞屬性進方法改為傳遞帶有屬性的對象,大大減少了代碼量(當需要多個屬性,且屬性皆同屬於一個對象)
以面向對象思想理解webServer項目流程:
生活中也是一個對象一個對象處理,在使用對象時可能會調用它的屬性和方法。
一個大的對象是服務器,服務器這個對象,可以接收處理請求這個對象,返回一個響應對象。
面向流程編程,過程中出現的變量判定是否屬於某個對象,如果是就封裝起來。
利用面向對象,也大大的理清了編程中的思路,一個對象處理一個對象,對象和對象之間的關系清晰明了。

7 所以將處理註冊功能單獨用一個類處理,傳入的是請求與響應。

8 用戶提交信息不可直接獲取,也不可直接返回查找表(就可以直接remove,add操作)所以需如何處理?
定義獲取參數的函數,而不是直接返回對象的方法
public String getParameter(String name){
return parameters.get(name);
}

9 註冊的原理是什麽?
捕捉關鍵詞reg,調用模塊,
服務器相應的原理——捕捉關鍵詞,返回指定地址。

10 復盤早上所學

11 如何將頁面響應回給客戶端?
//響應成功頁面給客戶端
File file = new File("webapp" + File.separator + "reg_ok.html");
response.setStatus(HttpContext.STATUS_CODE_OK);
response.setContentType("text/html");
response.setContentLength((int)file.length());
response.setEntity(file);
response.flush();

12 需掌握的有哪些?
重構時,什麽東西可以放在配置文件中。
再敲一遍Web服務器。

13 數據庫的優點是什麽?
安全且持久化保存大量數據。

2017-9-11 - A - webServer