1. 程式人生 > >JAVAWEB學習(1) — Servlet

JAVAWEB學習(1) — Servlet

Servlet

一、什麼是Servlet

sun公司指定的一種用來拓展web伺服器功能的元件規範

1. 拓展web伺服器功能

  • web伺服器只能處理靜態資源的請求 (需要事先將html檔案寫好),不能夠處理動態資源的請求(需要計算,生成動態的html),所以需要拓展。
  • 可以使用Servlet來拓展web伺服器功能,當web伺服器收到請求之後,如果需要計算,則交給Servlet來處理。

常見的web伺服器:apacheiisnginx

2. 元件規範

  1. 什麼是元件:符合規範,實現部分功能,並且需要部署到相應的容器裡面才能執行的軟體模組。

    Servlet就是一個元件,需要部署到Servlet容器裡面才能執行。

  2. 什麼是容器:符合規範,提供元件執行環境的程式

    Tomcat就是一個Servlet容器,為Servlet提供執行環境(提供網路相關的服務)

在這裡插入圖片描述

二、如何寫一個Servlet

  1. 寫一個java類,實現Servlet介面或者繼承HttpServlet類

    通常我們選擇繼承HttpServlet類

  2. 編譯

  3. 打包,即建立一個具有如下結構的資料夾

    |---- appname(應用名)

    ​ |---- WEB-INF

    ​ |---- classes(放.class檔案)

    ​ |---- lib(放.jar檔案 該資料夾可選)

    ​ |---- web.xml(部署描述檔案)

  4. 部署:將建立好的整個資料夾拷貝到容器相應的位置

    可以將整個資料夾使用jar命令先壓縮成.war為字尾的檔案,然後再拷貝

  5. 啟動容器,訪問Servlet

    http://ip:port/appname/url-pattern

    :url-pattern在web-xml當中設定

三、Servlet是如何執行的

比如,在瀏覽器位址列輸入 http://ip:port/day01/hello

  1. 瀏覽器依據ip和port建立連線
  2. 瀏覽器將相關資料放到請求資料包裡面,然後傳送給伺服器
  3. 伺服器解析請求資料包,將解析到的資料新增到request物件,同時建立一個response物件
  4. 伺服器建立Servlet物件,然後呼叫該物件的service
    方法
    • 伺服器會將request和response物件作為引數傳遞過來,開發人員只需要呼叫這兩個方法的物件就可以了,不用考慮網路相關的問題。
    • 比如要讀取請求資料包中的內容,只需要呼叫request物件的方法就可以了。類似的,要向瀏覽器傳送處理結果,只需要呼叫response物件的方法就可以了
  5. 伺服器從response物件中獲的處理結果,然後建立響應資料包併發送給瀏覽器
  6. 瀏覽器解析響應資料包,生成相應的頁面

在這裡插入圖片描述

四、常見的問題

  • 404

    1. 含義:伺服器依據請求路徑找不到對應的資源

      404是一個狀態碼,狀態碼是一個三位數字,表示伺服器處理請求的一種狀態

    2. 產生的原因:

      • 請求路徑寫錯

        要按照 http://ip:port/appname/url-pattern 來寫

      • 應用沒有部署或者部署失敗

  • 500

    1. 含義:系統出錯

    2. 產生的原因

      • 沒有嚴格的按照規範來寫程式碼(包括部署描述檔案寫錯)

      • 程式碼不嚴謹

        比如,對請求引數不做檢查,直接做型別轉換

  • 405

    1. 含義:找不到處理方法
    2. 產生的原因
      • 沒有正確override HttpServlet的service()方法