今日內容
- Servlet
- HTTP協議
- Request
Servlet
概念
步驟
執行原理
生命周期
Servlet3.0注解配置
Servlet的體系結構
- Servlet – 接口
- GenericServlet – 抽象類:將Servlet接口中其他方法做了默認空實現,只將service()方法作為抽象
- 將來定義Servlet類時候,可以繼承GenericServlet,實現service()方法即可
- HTTPServlet – 抽象類:對http協議的一種封裝,簡化操作
- 定義類繼承httpservlet方法
- 腹瀉doGet/doPost方法
- GenericServlet – 抽象類:將Servlet接口中其他方法做了默認空實現,只將service()方法作為抽象
Servlet相關配置
- urlpattern:Servlet訪問路徑
- 一個Servlet可以定義多個訪問路徑:
@WebServlet({"/d4","/dd4","/ddd4"})
- 路徑定義規則:
/xxx
/xxx/xxx
*.do
*說白了就是通配符,這里注意前面不要加/
- 一個Servlet可以定義多個訪問路徑:
HTTP:
概念:Hyper Text Transfer Protocol 超文本傳輸協議
- 傳輸協議: 定義了,客戶端和服務器端通信時,發送數據的格式
- 特點:
- 基于TCP/IP 的高級協議
- 默認端口:80
- 基于請求/響應模型的:一次請求對應一次響應
- 無狀態的:每次請求之間相互獨立,不能交互數據
- 歷史版本:
- 1.0: 每一次請求響應都會建立新的鏈接
- 1.1: 復用
請求消息數據格式:
- 請求行
- 請求方式 請求url 請求協議/版本 GET/login.html HTTP/1.1
- 請求方式:
- HTTP協議有7種請求方式,常用的有2種
- GET:
- 請求參數在請求行中,在url后
- 請求的url長度有限制的
- 不太安全
- POST:
- 請求參數在請求體中
- 請求的url長度沒有限制的
- 相對的安全(其實對于有心人來說,都是能看到的)
- GET:
- HTTP協議有7種請求方式,常用的有2種
- 請求頭(客戶端告訴服務器的一些信息,頭是固定的,值是不一樣的)
- 請求頭名稱:請求頭值
- 常見的請求頭:
- User-Agent: 瀏覽器告訴服務器,我訪問你使用的瀏覽器版本信息
- 可以在服務端獲取該頭的信息,解決瀏覽器的兼容性問題
- Referer:http://localhost/login.html
- 告訴服務器,我(當前的請求)從哪里來?
- 作用:
- 防盜鏈:
- 統計工作
- 作用:
- 告訴服務器,我(當前的請求)從哪里來?
- User-Agent: 瀏覽器告訴服務器,我訪問你使用的瀏覽器版本信息
- 請求空行
- 空行,用于分割POST的請求頭和請求體的
- 請求體(正文)
- 封裝POST請求消息的請求體的
- get方式的沒有請求體的
- post方式的請求體是帶了一些參數
username=zhangsan
響應消息數據格式:
登錄
請求和響應的過程
- tomcat服務器會根據請求url的資源路徑,創建對應的ServletDemo1對象
- tomcat服務器,會創建request和response對象,request對象中封裝請求消息數據
- tomcat將request和response兩個對象傳遞給service方法,并且調用service方法.
- 程序員(我們),可以通過request對象獲取請求消息數據,通過通過response對象設置響應消息數據
- 服務器在給瀏覽器做出響應之前,會從response對象中拿程序員
request:
- request對象和response對象的原理
- request和response對象是有服務器創建的,我們來使用它們
- request對象是來獲取請求消息的response是來設置響應消息
- request對象繼承體系結構
ServletRequest -- 接口 | 繼承
HTTPServletRequest -- 接口| 實現
org.apache.catalina.connector.RequestFacade類(tomcat)
- request:功能
- 獲取請求消息數據
- 獲取請求行數據
- GET/day14/demo1?name=zhangsan HTTP/1.1
- 方法:
- 獲取請求方式:GET
- String getMethod();
- 獲取虛擬目錄:day14
- String getContextPath()
- 獲取Servlet路徑:/demo1
- Stirng getServletPath
- 獲取get方式請求參數:name = zhangsan
- String getQueryString()
- 獲取請求URI:/day14/demo1
- String getRequestURI()
- StringBuffer getRequestURL():
http://loaclhost/day14/demo1
- url:統一資源定位符:
http://loaclhost/day14/demo1
(中華人民共和國) - uri:統一資源標識符:
/day14/demo1
(共和國)
我現在要說的是,uri比url大,同意吧,就像上面的比喻
- 獲取協議版本:HTTP/1.1
- String getProtocol()
- 獲取客戶機的IP地址
- String getRemoteAddr()
- 獲取請求方式:GET
- 獲取請求頭數據
- 獲取請求體數據
- 獲取請求行數據
- 其他功能
- 獲取請求消息數據