天天看點

卷妹的成長日記之javaweb day4

卷妹的成長日記之javaweb day4

👩‍💻部落格首頁:京與舊鋪的部落格首頁

✨歡迎關注🖱點贊🎀收藏⭐留言✒

🔮本文由京與舊鋪原創,

😘系列專欄:java學習

👕參考網站:動力節點

💻首發時間:🎞2022年8月10日🎠

🎨你做三四月的事,八九月就會有答案,一起加油吧

🀄如果覺得部落客的文章還不錯的話,請三連支援一下部落客哦

🛒導航小助手🎪

文章目錄

  • ​​卷妹的成長日記之javaweb day4​​
  • ​​🛒導航小助手🎪​​
  • ​​@[toc]​​
  • ​​HTTP協定​​
  • ServletContext接口中有哪些常用的方法?
public String getInitParameter(String name); // 通過初始化參數的name擷取value
public Enumeration<String> getInitParameterNames(); // 擷取所有的初始化參數的name      
<!--以上兩個方法是ServletContext對象的方法,這個方法擷取的是什麼資訊?是以下的配置資訊-->
<context-param>
    <param-name>pageSize</param-name>
    <param-value>10</param-value>
</context-param>
<context-param>
    <param-name>startIndex</param-name>
    <param-value>0</param-value>
</context-param>
<!--注意:以上的配置資訊屬于應用級的配置資訊,一般一個項目中共享的配置資訊會放到以上的标簽當中。-->
<!--如果你的配置資訊隻是想給某一個servlet作為參考,那麼你配置到servlet标簽當中即可,使用ServletConfig對象來擷取。-->      
// 擷取應用的根路徑(非常重要),因為在java源代碼當中有一些地方可能會需要應用的根路徑,這個方法可以動态擷取應用的根路徑
// 在java源碼當中,不要将應用的根路徑寫死,因為你永遠都不知道這個應用在最終部署的時候,起一個什麼名字。
public String getContextPath();
//String contextPath = application.getContextPath();      
// 擷取檔案的絕對路徑(真實路徑)
public String getRealPath(String path);      
// 通過ServletContext對象也是可以記錄日志的
public void log(String message);
public void log(String message, Throwable t);
// 這些日志資訊記錄到哪裡了?
// localhost.2021-11-05.log

// Tomcat伺服器的logs目錄下都有哪些日志檔案?
//catalina.2021-11-05.log 伺服器端的java程式運作的控制台資訊。
//localhost.2021-11-05.log ServletContext對象的log方法記錄的日志資訊存儲到這個檔案中。
//localhost_access_log.2021-11-05.txt 通路日志      
// ServletContext對象還有另一個名字:應用域(後面還有其他域,例如:請求域、會話域)

// 如果所有的使用者共享一份資料,并且這個資料很少的被修改,并且這個資料量很少,可以将這些資料放到ServletContext這個應用域中

// 為什麼是所有使用者共享的資料? 不是共享的沒有意義。因為ServletContext這個對象隻有一個。隻有共享的資料放進去才有意義。

// 為什麼資料量要小? 因為資料量比較大的話,太占用堆記憶體,并且這個對象的生命周期比較長,伺服器關閉的時候,這個對象才會被銷毀。大資料量會影響伺服器的性能。占用記憶體較小的資料量可以考慮放進去。

// 為什麼這些共享資料很少的修改,或者說幾乎不修改?
// 所有使用者共享的資料,如果涉及到修改操作,必然會存線上程并發所帶來的安全問題。是以放在ServletContext對象中的資料一般都是隻讀的。

// 資料量小、所有使用者共享、又不修改,這樣的資料放到ServletContext這個應用域當中,會大大提升效率。因為應用域相當于一個緩存,放到緩存中的資料,下次在用的時候,不需要從資料庫中再次擷取,大大提升執行效率。

// 存(怎麼向ServletContext應用域中存資料)
public void setAttribute(String name, Object value); // map.put(k, v)
// 取(怎麼從ServletContext應用域中取資料)
public Object getAttribute(String name); // Object v = map.get(k)
// 删(怎麼删除ServletContext應用域中的資料)
public void removeAttribute(String name); // map.remove(k)      
  • 注意:以後我們編寫Servlet類的時候,實際上是不會去直接繼承GenericServlet類的,因為我們是B/S結構的系統,這種系統是基于HTTP超文本傳輸協定的,在Servlet規範當中,提供了一個類叫做HttpServlet,它是專門為HTTP協定準備的一個Servlet類。我們編寫的Servlet類要繼承HttpServlet。(HttpServlet是HTTP協定專用的。)使用HttpServlet處理HTTP協定更便捷。但是你需要直到它的繼承結構:
jakarta.servlet.Servlet(接口)【爺爺】
jakarta.servlet.GenericServlet implements Servlet(抽象類)【兒子】
jakarta.servlet.http.HttpServlet extends GenericServlet(抽象類)【孫子】

我們以後編寫的Servlet要繼承HttpServlet類。      
  • 大家到目前為止都接觸過哪些緩存機制了?
  • 堆記憶體當中的字元串常量池。
  • “abc” 先在字元串常量池中查找,如果有,直接拿來用。如果沒有則建立,然後再放入字元串常量池。
  • 堆記憶體當中的整數型常量池。
  • [-128 ~ 127] 一共256個Integer類型的引用,放在整數型常量池中。沒有超出這個範圍的話,直接從常量池中取。
  • 連接配接池(Connection Cache)
  • 這裡所說的連接配接池中的連接配接是java語言連接配接資料庫的連接配接對象:java.sql.Connection對象。
  • JVM是一個程序。MySQL資料庫是一個程序。程序和程序之間建立連接配接,打開通道是很費勁的。是很耗費資源的。怎麼辦?可以提前先建立好N個Connection連接配接對象,将連接配接對象放到一個集合當中,我們把這個放有Connection對象的集合稱為連接配接池。每一次使用者連接配接的時候不需要再建立連接配接對象,省去了建立的環節,直接從連接配接池中擷取連接配接對象,大大提升通路效率。
  • 連接配接池
  • 最小連接配接數
  • 最大連接配接數
  • 連接配接池可以提高使用者的通路效率。當然也可以保證資料庫的安全性。
  • 線程池
  • Tomcat伺服器本身就是支援多線程的。
  • Tomcat伺服器是在使用者發送一次請求,就建立一個Thread線程對象嗎?
  • 當然不是,實際上是在Tomcat伺服器啟動的時候,會先建立好N多個線程Thread對象,然後将線程對象放到集合當中,稱為線程池。使用者發送請求過來之後,需要有一個對應的線程來處理這個請求,這個時候線程對象就會直接從線程池中拿,效率比較高。
  • 所有的WEB伺服器,或者應用伺服器,都是支援多線程的,都有線程池機制。
  • redis
  • NoSQL資料庫。非關系型資料庫。緩存資料庫。
  • 向ServletContext應用域中存儲資料,也等于是将資料存放到緩存cache當中了。

HTTP協定

  • 什麼是協定?
  • 協定實際上是某些人,或者某些組織提前制定好的一套規範,大家都按照這個規範來,這樣可以做到溝通無障礙。
  • 協定就是一套規範,就是一套标準。由其他人或其他組織來負責制定的。
  • 我說的話你能聽懂,你說的話,我也能聽懂,這說明我們之間是有一套規範的,一套協定的,這套協定就是:中國國語協定。我們都遵守這套協定,我們之間就可以溝通無障礙。
  • 什麼是HTTP協定?
  • HTTP協定:是W3C制定的一種超文本傳輸協定。(通信協定:發送消息的模闆提前被制定好。)
  • W3C:
  • 網際網路聯盟組織
  • 負責制定标準的:HTTP HTML4.0 HTML5 XML DOM等規範都是W3C制定的。
  • 網際網路之父:蒂姆·伯納斯·李
  • 什麼是超文本?
  • 超文本說的就是:不是普通文本,比如流媒體:聲音、視訊、圖檔等。
  • HTTP協定支援:不但可以傳送普通字元串,同樣支援傳遞聲音、視訊、圖檔等流媒體資訊。
  • 這種協定遊走在B和S之間。B向S發資料要遵循HTTP協定。S向B發資料同樣需要遵循HTTP協定。這樣B和S才能解耦合。
  • 什麼是解耦合?
  • B不依賴S。
  • S也不依賴B。
  • B/S表示:B/S結構的系統(浏覽器通路WEB伺服器的系統)
  • 浏覽器 向 WEB伺服器發送資料,叫做:請求(request)
  • WEB伺服器 向 浏覽器發送資料,叫做:響應(response)
  • HTTP協定包括:
  • 請求協定
  • 浏覽器 向 WEB伺服器發送資料的時候,這個發送的資料需要遵循一套标準,這套标準中規定了發送的資料具體格式。
  • 響應協定
  • WEB伺服器 向 浏覽器發送資料的時候,這個發送的資料需要遵循一套标準,這套标準中規定了發送的資料具體格式。
  • HTTP協定就是提前制定好的一種消息模闆。
  • 不管你是哪個品牌的浏覽器,都是這麼發。
  • 不管你是哪個品牌的WEB伺服器,都是這麼發。
  • FF浏覽器 可以向 Tomcat發送請求,也可以向Jetty伺服器發送請求。浏覽器不依賴具體的伺服器品牌。
  • WEB伺服器也不依賴具體的浏覽器品牌。可以是FF浏覽器,也可以是Chrome浏覽器,可以是IE,都行。
  • HTTP的請求協定(B --> S)
  • HTTP的請求協定包括:4部分
  • 請求行
  • 請求頭
  • 空白行
  • 請求體