1.Servlet介紹 和 HTTP協議簡述

PS:如下僅爲我的學習筆記html

1. Servlet是什麼?

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提供運行環境。

2.如何寫一個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當中定義。

 

3.Servlet是如何運行的?

好比,在瀏覽器地址欄輸入 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. 瀏覽器解析響應數據包,而後展示。


 

4. 常見的錯誤

(1)500

注:500是狀態碼,表示系統錯誤。
1)產生的緣由:
a.web.xml文件配置錯誤。
    好比將類名寫錯。
b.源代碼寫錯。
    好比,沒有繼承HttpServlet。

 

(2)404

注:404是狀態碼,表示依據請求路徑找不到對應的資源。
1)產生的緣由
a.沒有部署應用
b.訪問地址寫錯

 

(3)405

注:405是狀態碼,表示找不處處理方法。
1)產生的緣由
a.service方法簽名錯誤(方法名,參數類型,異常類型,返回類型寫錯)   

 

5. http協議 (簡述)

(1)什麼是http協議?

是一種網絡應用層協議,規定了瀏覽器與web服務器之間如何
通訊以及數據包的結構。
1)如何通訊?
    step1. 先創建鏈接。
    step2. 發送請求數據包。
    step3. 發送響應數據包。
    step4. 關閉鏈接。
    即 一次請求,一次鏈接。


2) 優勢
    web服務器能夠利用有限的鏈接爲儘量多的客戶請求服務。
 

 

(2)兩種數據包的結構

1)請求數據包
    a.請求行  (請求類型 請求資源路徑 協議和版本)
    b.若干消息頭
        注:消息頭是一些鍵值對(鍵和值之間使用": "分隔),
        瀏覽器和服務器之間能夠利用消息頭傳遞一些特殊的信息。
        好比,瀏覽器能夠發送"user-agent"告訴服務器,瀏覽器
        的類型和版本。
    c.實體內容
        若是請求類型是get,實體內容爲空。
2)響應數據包
    a.狀態行 (協議和版本 狀態碼 狀態描述)
        注:狀態碼是一個三位數字,表示服務器處理請求的狀態。
    b.消息頭
        服務器一樣也能夠將一些消息頭髮送給瀏覽器。好比
        能夠經過設置content-type消息頭,告訴瀏覽器,服務器
        返回的數據類型。
    c.實體內容
        程序處理的結果。瀏覽器會解析實體內容中的數據,而後
        展示。 

 

(3)兩種請求類型

1)get請求
a.哪一些狀況下,瀏覽器會發送get請求?
    a1.直接輸入某個地址
    a2.點擊連接
    a3.表單默認提交方式
b.特色
    b1.會將請求參數放到請求行裏面,只能提交少許的數據。
        注:由於請求行大約只能存放2k左右的數據。
    b2.會將請求參數顯示在瀏覽器地址欄,不安全。
        注:好比有些網絡設備(路由器)會記錄這些地址。

 

6. Servlet輸出中文,應該如何處理?

(1)爲何會亂碼?

out在輸出時,默認使用iso-8859-1來編碼。

(2)如何解決?

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,正常。     
相關文章
相關標籤/搜索