sevlet

https://blog.csdn.net/Mithrandir_One/article/details/52900425

你們如今作的比較多的基本上就是 web 應用。因此必定要把 sevlet 及其實現類搞清楚。

1、Servlet的三大做用域的生命週期,做用範圍以及選取

做用域:存放數據,獲取數據(傳遞數據)
有效的做用域:生命週期,做用範圍
做用域的三個方法 get set removehtml

做用域:理解成共享區域。
做用域的真正做用是爲了有效的傳遞數據。
存放數據:setAttribute(String,Object);
獲取數據:getAttribute(String );
刪除數據:removeAttribute(String);web

1. httpServeltRequest: 由servlet容器建立,該對象包含全部的http協議的請求信息spring

  1. **生命週期** :一次請求之間
  2. **做用範圍**:全部被請求轉發過的servlet都能獲取到

2. httpSession:是一個會話,是一種服務器端技術 ,能夠將用戶信息保存在服務器端瀏覽器

  1. **生命週期**:一次會話
  2. **做用範圍**:全部的servlet均可以獲取到

3. servletContex:是一個全局的儲存信息的空間,服務器開始就存在,服務器關閉才釋放。tomcat

  1. **生命週期**:從項目開始運行到服務器關閉
  2. **做用範圍**:全部的servlet均可以獲取到

4. 做用域如何選用?服務器

  1. httpServeltRequest:和當前請求有關的信息
  2. httpSession:和當前用戶有關的信息
  3. servletContex:訪問量比較大,不易更改

 

2、servlet 流程及生命週期網絡

1. servlet的生命週期app

       1)實例化,有web容器實例化servlet實例
       2)初始化,容器調用init()方法
       3)服務,客戶端請求servlet時,容器調用service()方法
       4)銷燬,結束服務,調用destroy()方法學習

2. 相關方法:this

       1)當請求到達時,運行其service()方法。service()自動派遣運行與請求相對應的doXXX(doGet或者doPost)方法

       2)request.getAttribute()和request.getParameter()

 getParameter獲取到的值只能是字符串,不能夠是對象,而getAttribute獲取到的值是Object類型的。
經過form表單或者url來向另外一個頁面或者servlet傳遞參數的時候須要用getParameter獲取值;getAttribute只能獲取setAttribute的值
       3)forward和redirect

 對於直接方式forward,客戶端瀏覽器只發出一次請求,Servlet把請求轉發給Servlet、HTML、JSP或其它信息資源,由第2個信息資源響應該請求,兩個信息資源共享同一個request對象。
 對於間接方式redirect,服務器端在響應第一次請求的時候,讓瀏覽器再向另一個URL發出請求,從而達到轉發的目的。它本質上是兩次HTTP請求,對應兩個request對象。

 

2、servlet 流程及生命週期( 文字說明):
一、當請求訪問服務器的時候,服務器經過xml 配置文件找到對應的serlvet 類
二、若是是經過自動裝載就在服務器啓動時調用對應的servlet 中的init 方法,不然就在請求訪問服務器的時候初始化
三、服務器根據web.xml 配置的servlet 映射,找處處理請求對應的類進行處理
四、servlet 根據請求的方式調用doGet/doPost方法
五、若是服務器中止則調用destroy方法銷燬。

Servlet三大生命週期方法:

init()

service()

destroy()

Servlet生命週期

1.客戶端發送請求後首先判斷是否存在Servlet實例,若是沒有存在建立Servlet實例(Servlet的構造方法)。

2.若是存在Servlet實例,則開始其初始化階段,執行器初始化方法(init()方法)。

3.第三階段是響應客戶端請求階段,調用service()方法,根據提交方式選擇執行doGet()方法或者doPost()方法。

4.最後是銷燬階段,程序結束或者是服務器中止,調用其銷燬方法(destroy()方法)。、

其中 init 方法,destory 方法只執行一次 

 

tomcat 裝載servlet 的三種方式說明:

 

servletContext 說明:

複製代碼
//tomcat容器裝載servlet,當服務器啓動的時候會爲servlet 建立一個servletContext 做用域
//此做用域爲全局的,後期經過這個做用於理解springContext 做用域

//經過當前Servlet類的對象,獲得與它關聯的ServletContext對象,也就是上下文
ServletContext application = this.getServletContext();

//HttpSession(私有區域) 與 ServletContext(公共區域) 的區別是什麼?
一、做用範圍不一樣:HttpSession是針對每個客戶端瀏覽器單獨有一個。
        ServletContext是針對每個WEB應用程序有一個
二、存活時間不一樣:HttpSession第一次訪問服務器,服務器端調用request.getSession()時建立,訪問間隔時間超過30分鐘就銷燬。
         ServletContext服務器啓動時建立,服務器中止時銷燬。
複製代碼

 

-會引出 數據讀取 IO 

 

-在引出 BIO、NIO 

 

-在引出 HTTP 的結構

controller 是怎麼獲取參數的的,servlet 就能怎樣獲取這些信息。這些信息只是 http 規範的一些約定,每次通訊都會帶着他們。

通過網絡的基層協議後最終回到 HTTP 層(應用層-這個應用就是咱們使用的 HttpServlet)。最終被 servlet(HttpServlet) 還原。

比如 C 語言,他沒有 servlet,可是也有本身的手段去解析這些信息,只要遵循http的約定就行。這也印證了,網絡的 7 層協議只是

概念上劃分這一說法。能夠是 4 層,也能夠是 7 層,若是咱們對網絡理解的夠深入(成爲權威),也能夠按本身的理解劃分爲 5 層、3 層,

這都不是錯誤的說法。因此我認爲,學習網絡協議不該該去背 7層協議是什麼。而應該去確認網絡中的一個字節,通過了哪些東西(軟件、硬件)

以後從一臺電腦,出如今另外一臺電腦上。後續把這西補充進來。這時再回來看網絡的7層協議就明白他指的是什麼了。

  1. Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
  2. Accept-Encoding:gzip, deflate, br
  3. Accept-Language:zh-CN,zh;q=0.9
  4. Cache-Control:no-cache
  5. Connection:keep-alive
  6. Content-Length:9012
  7. Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryuC3pyKdHe32ZTiLd
  8. Cookie:JSESSIONID=1A96D4E85B8EB2A527F5481FCADDC9B6
  9. Host:localhost:8080
  10. Origin:http://localhost:8080
  11. Pragma:no-cache
  12. Referer:http://localhost:8080/toUpload
  13. Sec-Fetch-Mode:navigate
  14. Sec-Fetch-Site:same-origin
  15. Sec-Fetch-User:?1
  16. Upgrade-Insecure-Requests:1
  17. User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36
相關文章
相關標籤/搜索