PS:如下僅爲我的學習筆記html
sun公司制訂的一種用來擴展web服務器功能的組件規範。 (1)擴展web服務器功能 注: 早期的web服務器只能處理靜態資源的請求,即須要事先將 html文件準備好,並存放到web服務器上面。不可以處理 動態資源的請求(須要計算,動態生成html)。 早期使用CGI(Common Gateway Interface)應用程序來擴展。 CGI程序使用perl,c/c++等語言來編寫,編寫繁瑣,不方便 移值,性能也不是很好,如今用得不多了。 瀏覽器將請求發送給web server,若是是動態資源的請求, web server會將請求轉交給servlet容器來處理,由容器來 處理網絡相關的問題,由servlet處理業務邏輯。 (2)組件規範 1)什麼是組件? 符合規範,實現部分功能,而且須要部署到相應的容器裏面才能 運行的軟件模塊。 servlet就是一個組件,須要部署到servlet容器裏面才能運行。 2)什麼是容器? 符合規範,提供組件運行環境的程序。 servlet容器爲servlet提供運行環境。
step1. 寫一個java類,實現Servlet接口或者繼承 HttpServlet抽象類。 注:建議繼承HttpServlet抽象類。 step2.編譯。 step3.打包。 建立一個具備以下結構的文件夾: appname (應用名) WEB-INF classes (.class文件) lib (可選 .jar文件) web.xml (部署描述文件) step4.部署。 將step3建立的文件夾拷貝到容器裏面。 注: 可使用jar命令將step3建立的文件夾壓縮成 ".war"結尾的文件,而後再拷貝。 step5.啓動容器,訪問Servlet http://ip:port/appname/servlet-pattern 注: servlet-pattern在web.xml當中定義。
好比,在瀏覽器地址欄輸入 http://ip:port/servlet-day01/hello step1.瀏覽器依據ip,port創建鏈接(即與web服務器之間創建網絡鏈接)。 step2.瀏覽器須要將相關數據打包(即按照http協議要求,製做一個 請求數據包,包含了一些數據,好比請求資源路徑),而且將請求 數據包發送出去。 step3.web服務器會將請求數據包中數據解析出來,而且將這些數據添加 到request對象,同時,還會建立一個response對象。 step4.web服務器建立Servlet對象,而後調用該對象的service方法 (會將request和response做爲參數)。 注: 在service方法裏面,經過使用request得到請求相關的數據, 好比請求參數值,而後將處理結果寫到response。 step5.web服務器將response中的數據取出來,製做響應數據包,而後 發送給瀏覽器。 step6. 瀏覽器解析響應數據包,而後展示。
注:500是狀態碼,表示系統錯誤。 1)產生的緣由: a.web.xml文件配置錯誤。 好比將類名寫錯。 b.源代碼寫錯。 好比,沒有繼承HttpServlet。
注:404是狀態碼,表示依據請求路徑找不到對應的資源。 1)產生的緣由 a.沒有部署應用 b.訪問地址寫錯
注:405是狀態碼,表示找不處處理方法。 1)產生的緣由 a.service方法簽名錯誤(方法名,參數類型,異常類型,返回類型寫錯)
是一種網絡應用層協議,規定了瀏覽器與web服務器之間如何 通訊以及數據包的結構。 1)如何通訊? step1. 先創建鏈接。 step2. 發送請求數據包。 step3. 發送響應數據包。 step4. 關閉鏈接。 即 一次請求,一次鏈接。
2) 優勢 web服務器能夠利用有限的鏈接爲儘量多的客戶請求服務。
1)請求數據包 a.請求行 (請求類型 請求資源路徑 協議和版本) b.若干消息頭 注:消息頭是一些鍵值對(鍵和值之間使用": "分隔), 瀏覽器和服務器之間能夠利用消息頭傳遞一些特殊的信息。 好比,瀏覽器能夠發送"user-agent"告訴服務器,瀏覽器 的類型和版本。 c.實體內容 若是請求類型是get,實體內容爲空。 2)響應數據包 a.狀態行 (協議和版本 狀態碼 狀態描述) 注:狀態碼是一個三位數字,表示服務器處理請求的狀態。 b.消息頭 服務器一樣也能夠將一些消息頭髮送給瀏覽器。好比 能夠經過設置content-type消息頭,告訴瀏覽器,服務器 返回的數據類型。 c.實體內容 程序處理的結果。瀏覽器會解析實體內容中的數據,而後 展示。
1)get請求 a.哪一些狀況下,瀏覽器會發送get請求? a1.直接輸入某個地址 a2.點擊連接 a3.表單默認提交方式 b.特色 b1.會將請求參數放到請求行裏面,只能提交少許的數據。 注:由於請求行大約只能存放2k左右的數據。 b2.會將請求參數顯示在瀏覽器地址欄,不安全。 注:好比有些網絡設備(路由器)會記錄這些地址。
out在輸出時,默認使用iso-8859-1來編碼。
response.setContentType("text/html;charset=utf-8"); 這行代碼的做用: 做用1.返回content-type消息頭,告訴 瀏覽器,服務器返回的數據類型。 做用2:另外,out在輸出時,會使用指定的 字符集來編碼。 練習: 計算一我的的bmi指數。 算法: bmi指數 = 體重(公斤) / 身高(米) /身高(米) 若是 bmi指數 < 19 太輕。 bmi指數 > 25 太重。 其它,正常。 http://ip:port/servlet-day01-lab/bmi?height=1.8&weight=90 返回 你的bmi指數是 24,正常。