2017-9-8 - A - WebServer項目
1 如何將字符串轉換為字節型數據?
str.getBytes().
2 業務邏輯要極其清晰,一個方法實現一個功能。
服務器整體業務流程,
新建一個服務器獲取請求,讀取處理請求,返回請求資源
將後兩個流程中包入ClietnHandler(新建類),一旦有新的請求便創建新的線程,由於線程較多,因此需要用線程池管理。
ClientHandler中的主要流程又是run方法,run方法(便是包含獲取,讀取,處理請求)的流程為,
run方法中便包含了——
①讀取請求,將請求項轉化為對象,方便後續檢索確定返回的數據。
對象包括請求頭及消息頭查找表,將處理該對象的方法也寫入——直接傳入輸入流,直接將請求轉換為請求對象——大大縮減代碼量
消息頭查找表在使用前必須實例化,不然用不了
跳出循環的判斷條件是 返回字符串長度為0 而不是全等於null或""。(StringBuilder內部默認維護一個空字符串)
②返回請求,將響應的屬性實例化成一個對象。
請求對象包含:
狀態行,響應頭(header),響應正文(網頁資源)
將對應屬性以原生數據類型傳入對象,然後直接在內部轉換成輸出流
可直接用out輸出,但更建議加載在緩沖流上輸出,大大加快速度
由大至小,不管是在大流程的把握上,還是完善小的分支都要胸有成竹。要一直把控握著whole map。
3 如何優化程序?
寫死部分改為可變變量值。
提取共有部分,後面修改只要修改共有部分即可——用XML文件配置。
4 網站加載不出圖片有可能是什麽原因?
上次請求連接沒有關閉,無法發起新的請求。
5 為何需要將響應也打包成一個對象?
方便後續處理,如寫出到客戶端直接調用響應對象內部的一個方法。
——
今日必完成任務
將今日內容重新復盤敲一遍。
①完成發送網頁,若請求文件不存在,返回404
②優化代碼
③
6 線程有幾種狀態?
新建,就緒(Runnable),運行(start——running),阻塞(等待),run方法結束後銷毀。
7 如何理解線程的同步和異步?
同步:各幹各的
異步:順序執行
2017-9-8 - A - WebServer項目