天天看點

卷妹的成長日記之javaweb day3

卷妹的成長日記之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的時候建立的。