卷妹的成長日記之javaweb day3
👩💻部落格首頁:京與舊鋪的部落格首頁
✨歡迎關注🖱點贊🎀收藏⭐留言✒
🔮本文由京與舊鋪原創
😘系列專欄:java學習
👕參考網站:動力節點
💻首發時間:🎞2022年7月30日🎠
🎨你做三四月的事,八九月就會有答案,一起加油吧
🀄如果覺得部落客的文章還不錯的話,請三連支援一下部落客哦
🛒導航小助手🎪
文章目錄
- 卷妹的成長日記之javaweb day3
- 🛒導航小助手🎪
- @[toc]
- GenericServlet
- ServletConfig
- ServletContext
GenericServlet
- 我們編寫一個Servlet類直接實作Servlet接口有什麼缺點?
- 我們隻需要service方法,其他方法大部分情況下是不需要使用的。代碼很醜陋。
- 擴充卡設計模式Adapter
- 手機直接插到220V的電壓上,手機直接就報廢了。怎麼辦?可以找一個充電器。這個充電器就是一個擴充卡。手機連接配接擴充卡。擴充卡連接配接220V的電壓。這樣問題就解決了。
- 編寫一個GenericServlet類,這個類是一個抽象類,其中有一個抽象方法service。
- GenericServlet實作Servlet接口。
- GenericServlet是一個擴充卡。
- 以後編寫的所有Servlet類繼承GenericServlet,重寫service方法即可。
- 思考:GenericServlet類是否需要改造一下?怎麼改造?更利于子類程式的編寫?
- 思考第一個問題:我提供了一個GenericServlet之後,init方法還會執行嗎?
- 還會執行。會執行GenericServlet類中的init方法。
- 思考第二個問題:init方法是誰調用的?
- Tomcat伺服器調用的。
- 思考第三個問題:init方法中的ServletConfig對象是誰建立的?是誰傳過來的?
- 都是Tomcat幹的。
- Tomcat伺服器先建立了ServletConfig對象,然後調用init方法,将ServletConfig對象傳給了init方法。
- 思考一下Tomcat伺服器僞代碼:
public class Tomcat {
public static void main(String[] args){
// .....
// Tomcat伺服器僞代碼
// 建立LoginServlet對象(通過反射機制,調用無參數構造方法來執行個體化LoginServlet對象)
Class clazz = Class.forName("com.bjpowernode.javaweb.servlet.LoginServlet");
Object obj = clazz.newInstance();
// 向下轉型
Servlet servlet = (Servlet)obj;
// 建立ServletConfig對象
// Tomcat伺服器負責将ServletConfig對象執行個體化出來。
// 多态(Tomcat伺服器完全實作了Servlet規範)
ServletConfig servletConfig = new org.apache.catalina.core.StandardWrapperFacade();
// 調用Servlet的init方法
servlet.init(servletConfig);
// 調用Servlet的service方法
// ....
}
}
ServletConfig
- 什麼是ServletConfig?
- Servlet對象的配置資訊對象。
- ServletConfig對象中封裝了标簽中的配置資訊。(web.xml檔案中servlet的配置資訊)
- 一個Servlet對應一個ServletConfig對象。
- Servlet對象是Tomcat伺服器建立,并且ServletConfig對象也是Tomcat伺服器建立。并且預設情況下,他們都是在使用者發送第一次請求的時候建立。
- Tomcat伺服器調用Servlet對象的init方法的時候需要傳一個ServletConfig對象的參數給init方法。
- ServletConfig接口的實作類是Tomcat伺服器給實作的。(Tomcat伺服器說的就是WEB伺服器。)
- ServletConfig接口有哪些常用的方法?
public String getInitParameter(String name); // 通過初始化參數的name擷取value
public Enumeration<String> getInitParameterNames(); // 擷取所有的初始化參數的name
public ServletContext getServletContext(); // 擷取ServletContext對象
public String getServletName(); // 擷取Servlet的name
- 以上方法在Servlet類當中,都可以使用this去調用。因為GenericServlet實作了ServletConfig接口。
ServletContext
- 一個Servlet對象對應一個ServletConfig。100個Servlet對象則對應100個ServletConfig對象。
- 隻要在同一個webapp當中,隻要在同一個應用當中,所有的Servlet對象都是共享同一個ServletContext對象的。
- ServletContext對象在伺服器啟動階段建立,在伺服器關閉的時候銷毀。這就是ServletContext對象的生命周期。ServletContext對象是應用級對象。
- Tomcat伺服器中有一個webapps,這個webapps下可以存放webapp,可以存放多個webapp,假設有100個webapp,那麼就有100個ServletContext對象。但是,總之,一個應用,一個webapp肯定是隻有一個ServletContext對象。
- ServletContext被稱為Servlet上下文對象。(Servlet對象的四周環境對象。)
- 一個ServletContext對象通常對應的是一個web.xml檔案。
- ServletContext對應顯示生活中的什麼例子呢?
- 一個教室裡有多個學生,那麼每一個學生就是一個Servlet,這些學生都在同一個教室當中,那麼我們可以把這個教室叫做ServletContext對象。那麼也就是說放在這個ServletContext對象(環境)當中的資料,在同一個教室當中,物品都是共享的。比如:教室中有一個空調,所有的學生都可以操作。可見,空調是共享的。因為空調放在教室當中。教室就是ServletContext對象。
- ServletContext是一個接口,Tomcat伺服器對ServletContext接口進行了實作。
- ServletContext對象的建立也是Tomcat伺服器來完成的。啟動webapp的時候建立的。