JAVAWEB學習(1) — Servlet
Servlet
一、什麼是Servlet
sun公司指定的一種用來拓展web伺服器功能的元件規範
1. 拓展web伺服器功能
- web伺服器只能處理靜態資源的請求 (需要事先將html檔案寫好),不能夠處理動態資源的請求(需要計算,生成動態的html),所以需要拓展。
- 可以使用Servlet來拓展web伺服器功能,當web伺服器收到請求之後,如果需要計算,則交給Servlet來處理。
常見的web伺服器:apache、iis、nginx等
2. 元件規範
-
什麼是元件:符合規範,實現部分功能,並且需要部署到相應的容器裡面才能執行的軟體模組。
Servlet就是一個元件,需要部署到Servlet容器裡面才能執行。
-
什麼是容器:符合規範,提供元件執行環境的程式
Tomcat就是一個Servlet容器,為Servlet提供執行環境(提供網路相關的服務)
二、如何寫一個Servlet
-
寫一個java類,實現Servlet介面或者繼承HttpServlet類
通常我們選擇繼承HttpServlet類
-
編譯
-
打包,即建立一個具有如下結構的資料夾
|---- appname(應用名)
|---- WEB-INF
|---- classes(放.class檔案)
|---- lib(放.jar檔案 該資料夾可選)
|---- web.xml(部署描述檔案)
-
部署:將建立好的整個資料夾拷貝到容器相應的位置
可以將整個資料夾使用jar命令先壓縮成.war為字尾的檔案,然後再拷貝
-
啟動容器,訪問Servlet
http://ip:port/appname/url-pattern
注:url-pattern在web-xml當中設定
三、Servlet是如何執行的
比如,在瀏覽器位址列輸入 http://ip:port/day01/hello
- 瀏覽器依據ip和port建立連線
- 瀏覽器將相關資料放到請求資料包裡面,然後傳送給伺服器
- 伺服器解析請求資料包,將解析到的資料新增到request物件,同時建立一個response物件
- 伺服器建立Servlet物件,然後呼叫該物件的service
- 伺服器會將request和response物件作為引數傳遞過來,開發人員只需要呼叫這兩個方法的物件就可以了,不用考慮網路相關的問題。
- 比如要讀取請求資料包中的內容,只需要呼叫request物件的方法就可以了。類似的,要向瀏覽器傳送處理結果,只需要呼叫response物件的方法就可以了
- 伺服器從response物件中獲的處理結果,然後建立響應資料包併發送給瀏覽器
- 瀏覽器解析響應資料包,生成相應的頁面
四、常見的問題
-
404
-
含義:伺服器依據請求路徑找不到對應的資源
404是一個狀態碼,狀態碼是一個三位數字,表示伺服器處理請求的一種狀態
-
產生的原因:
-
請求路徑寫錯
要按照 http://ip:port/appname/url-pattern 來寫
-
應用沒有部署或者部署失敗
-
-
-
500
-
含義:系統出錯
-
產生的原因
-
沒有嚴格的按照規範來寫程式碼(包括部署描述檔案寫錯)
-
程式碼不嚴謹
比如,對請求引數不做檢查,直接做型別轉換
-
-
-
405
- 含義:找不到處理方法
- 產生的原因
- 沒有正確override HttpServlet的service()方法