java结丹期(12)----javaweb(servletHTTPweb相关基本概念)
web相關概念回顧
1. 軟件架構
 ?? ?1. C/S:客戶端/服務器端
 ?? ?2. B/S:瀏覽器/服務器端
2. 資源分類
 ?? ?1. 靜態資源:所有用戶訪問后,得到的結果都是一樣的,稱為靜態資源.靜態資源可以直接被瀏覽器解析
 ?? ??? ?* 如: html,css,JavaScript
 ?? ?2. 動態資源:每個用戶訪問相同資源后,得到的結果可能不一樣。稱為動態資源。動態資源被訪問后,需要先轉換為靜態資源,在返回給瀏覽器
 ?? ??? ?* 如:servlet/jsp,php,asp....? ? ? ??
3. 網絡通信三要素
 ?? ?1. IP:電子設備(計算機)在網絡中的唯一標識。
 ?? ?2. 端口:應用程序在計算機中的唯一標識。 0~65536
 ?? ?3. 傳輸協議:規定了數據傳輸的規則
 ?? ??? ?1. 基礎協議:
 ?? ??? ??? ?1. tcp:安全協議,三次握手。 速度稍慢
 ?? ??? ??? ?2. udp:不安全協議。 速度快
web服務器軟件:
 * 服務器:安裝了服務器軟件的計算機
 * 服務器軟件:接收用戶的請求,處理請求,做出響應
 * web服務器軟件:接收用戶的請求,處理請求,做出響應。
 ?? ?* 在web服務器軟件中,可以部署web項目,讓用戶通過瀏覽器來訪問這些項目
 ?? ?* web容器
Servlet: ?server applet
 
* 概念:運行在服務器端的小程序
 ?? ?* Servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規則。
 ?? ?* 將來我們自定義一個類,實現Servlet接口,復寫方法。
* 快速入門:
 ?? ?1. 創建JavaEE項目
 ?? ?2. 定義一個類,實現Servlet接口
 ?? ??? ?* public class ServletDemo1 implements Servlet
 ?? ?3. 實現接口中的抽象方法
 ?? ?4. 配置Servlet
 ?? ??? ? 在web.xml中配置:
 ?? ???
* 執行原理:
 ?? ?1. 當服務器接受到客戶端瀏覽器的請求后,會解析請求URL路徑,獲取訪問的Servlet的資源路徑
?? ?2. 查找web.xml文件,是否有對應的<url-pattern>標簽體內容。
 ?? ?3. 如果有,則在找到對應的<servlet-class>全類名
 ?? ?4. tomcat會將字節碼文件加載進內存,并且創建其對象
 ?? ?5. 調用其方法
* Servlet中的生命周期方法:
 ?? ?1. 被創建:執行init方法,只執行一次
 ?? ??? ?* Servlet什么時候被創建?
 ?? ??? ??? ?* 默認情況下,第一次被訪問時,Servlet被創建
 ?? ??? ??? ?* 可以配置執行Servlet的創建時機。
 ?? ??? ??? ??? ?* 在<servlet>標簽下配置
 ?? ??? ??? ??? ??? ?1. 第一次被訪問時,創建
 ?? ??? ??? ??? ??? ??? ?* <load-on-startup>的值為負數
 ?? ??? ??? ??? ??? ?2. 在服務器啟動時,創建
 ?? ??? ??? ??? ??? ??? ?* <load-on-startup>的值為0或正整數
?? ??? ?* Servlet的init方法,只執行一次,說明一個Servlet在內存中只存在一個對象,Servlet是單例的
 ?? ??? ??? ?* 多個用戶同時訪問時,可能存在線程安全問題。
 ?? ??? ??? ?* 解決:盡量不要在Servlet中定義成員變量。即使定義了成員變量,也不要對修改值
?? ?2. 提供服務:執行service方法,執行多次
 ?? ??? ?* 每次訪問Servlet時,Service方法都會被調用一次。
 ?? ?3. 被銷毀:執行destroy方法,只執行一次
 ?? ??? ?* Servlet被銷毀時執行。服務器關閉時,Servlet被銷毀
 ?? ??? ?* 只有服務器正常關閉時,才會執行destroy方法。
 ?? ??? ?* destroy方法在Servlet被銷毀之前執行,一般用于釋放資源
* Servlet3.0:
 ?? ?* 好處:
 ?? ??? ?* 支持注解配置。可以不需要web.xml了。
?? ?* 步驟:
 ?? ??? ?1. 創建JavaEE項目,選擇Servlet的版本3.0以上,可以不創建web.xml
 ?? ??? ?2. 定義一個類,實現Servlet接口
 ?? ??? ?3. 復寫方法
 ?? ??? ?4. 在類上使用@WebServlet注解,進行配置
 ?? ??? ??? ?* @WebServlet("資源路徑")
6. Servlet的體系結構?? ?
 ?? ?Servlet -- 接口
 ?? ??? ?|
 ?? ?GenericServlet -- 抽象類
 ?? ??? ?|
 ?? ?HttpServlet ?-- 抽象類
?? ?* GenericServlet:將Servlet接口中其他的方法做了默認空實現,只將service()方法作為抽象
 ?? ??? ?* 將來定義Servlet類時,可以繼承GenericServlet,實現service()方法即可
?? ?* HttpServlet:對http協議的一種封裝,簡化操作
 ?? ??? ?1. 定義類繼承HttpServlet
 ?? ??? ?2. 復寫doGet/doPost方法
7. Servlet相關配置
 ?? ?1. urlpartten:Servlet訪問路徑
 ?? ??? ?1. 一個Servlet可以定義多個訪問路徑 : @WebServlet({"/d4","/dd4","/ddd4"})
 ?? ??? ?2. 路徑定義規則:
 ?? ??? ??? ?1. /xxx:路徑匹配
 ?? ??? ??? ?2. /xxx/xxx:多層路徑,目錄結構
 ?? ??? ??? ?3. *.do:擴展名匹配
 ?
HTTP協議:
? ? 1. 請求消息:客戶端發送給服務器端的數據
 ?? ??? ?* 數據格式:
 ?? ??? ??? ?1. 請求行
 ?? ??? ??? ?2. 請求頭
 ?? ??? ??? ?3. 請求空行
 ?? ??? ??? ?4. 請求體
 ?? ?2. 響應消息:服務器端發送給客戶端的數據
 ?? ??? ?* 數據格式:
 ?? ??? ??? ?1. 響應行
 ?? ??? ??? ??? ?1. 組成:協議/版本 響應狀態碼 狀態碼描述
 ?? ??? ??? ??? ?2. 響應狀態碼:服務器告訴客戶端瀏覽器本次請求和響應的一個狀態。
 ?? ??? ??? ??? ??? ?1. 狀態碼都是3位數字?
 ?? ??? ??? ??? ??? ?2. 分類:
 ?? ??? ??? ??? ??? ??? ?1. 1xx:服務器就收客戶端消息,但沒有接受完成,等待一段時間后,發送1xx多狀態碼
 ?? ??? ??? ??? ??? ??? ?2. 2xx:成功。代表:200
 ?? ??? ??? ??? ??? ??? ?3. 3xx:重定向。代表:302(重定向),304(訪問緩存)
 ?? ??? ??? ??? ??? ??? ?4. 4xx:客戶端錯誤。
 ?? ??? ??? ??? ??? ??? ??? ?* 代表:
 ?? ??? ??? ??? ??? ??? ??? ??? ?* 404(請求路徑沒有對應的資源)?
 ?? ??? ??? ??? ??? ??? ??? ??? ?* 405:請求方式沒有對應的doXxx方法
 ?? ??? ??? ??? ??? ??? ?5. 5xx:服務器端錯誤。代表:500(服務器內部出現異常)
 ?? ??? ??? ??? ??? ??? ??? ?
 ?? ??? ??? ??? ??? ?
 ?? ??? ??? ?2. 響應頭:
 ?? ??? ??? ??? ?1. 格式:頭名稱: 值
 ?? ??? ??? ??? ?2. 常見的響應頭:
 ?? ??? ??? ??? ??? ?1. Content-Type:服務器告訴客戶端本次響應體數據格式以及編碼格式
 ?? ??? ??? ??? ??? ?2. Content-disposition:服務器告訴客戶端以什么格式打開響應體數據
 ?? ??? ??? ??? ??? ??? ?* 值:
 ?? ??? ??? ??? ??? ??? ??? ?* in-line:默認值,在當前頁面內打開
 ?? ??? ??? ??? ??? ??? ??? ?* attachment;filename=xxx:以附件形式打開響應體。文件下載
 ?? ??? ??? ?3. 響應空行
 ?? ??? ??? ?4. 響應體:傳輸的數據
?? ??? ?* 響應字符串格式
 ?? ??? ??? ?HTTP/1.1 200 OK
 ?? ??? ??? ?Content-Type: text/html;charset=UTF-8
 ?? ??? ??? ?Content-Length: 101
 ?? ??? ??? ?Date: Wed, 06 Jun 2018 07:08:42 GMT
 ?? ?
總結
以上是生活随笔為你收集整理的java结丹期(12)----javaweb(servletHTTPweb相关基本概念)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: java结丹期(11)----javaw
 - 下一篇: java结丹期(13)----javaw