卷妹的成長日記之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部分
- 請求行
- 請求頭
- 空白行
- 請求體