①Servlet接口html
②GenericServlet抽象類前端
- 對Servlet功能進行了封裝和完善,將service(ServletRequest req, ServletResponse res)保留爲抽象方法,讓使用者僅關心業務實現便可。
③HttpServlet抽象類java
- 對GenericServlet進行了進一步的封裝和擴展,更貼近HTTP協議下的應用程序編寫,在service(ServletRequest req, ServletResponse res)方法中,根據不一樣HTTP請求類型調用專門的方法進行處理。
- 從此在實際使用中繼承HttpServlet抽象類建立本身的Servlet實現類便可。重寫doGet(HttpServletRequest req, HttpServletResponse resp)和doPost(HttpServletRequest req, HttpServletResponse resp)方法實現請求處理,再也不須要重寫service(ServletRequest req, ServletResponse res)方法了。
- ServletConfig接口:封裝了Servlet配置信息
- ServletContext接口:封裝了當前Web應用上下文信息
- HttpServletRequest接口:封裝了HTTP請求信息,ServletRequest的子接口
- HttpServletResponse接口:封裝了HTTP響應信息,ServletResponse的子接口
- Servlet生命週期
- 應用程序中的對象不只在空間上有層次結構的關係,在時間上也會由於處於程序運行過程當中的不一樣階段而表現出不一樣狀態和不一樣行爲——這就是對象的生命週期。
- Servlet對象是Servlet容器建立的,生命週期方法都是由容器調用的。這一點和咱們以前所編寫的代碼有很大不一樣。在從此的學習中咱們會看到,愈來愈多的對象交給容器或框架來建立,愈來愈多的方法由容器或框架來調用,開發人員要儘量多的將精力放在業務邏輯的實現上。
- Servlet生命週期的主要過程
①Servlet對象的建立web
默認狀況下,Servlet容器第一次收到HTTP請求時建立對應Servlet對象。容器之因此能作到這一點是因爲咱們在註冊Servlet時提供了全類名,容器使用反射技術建立了Servlet的對象。瀏覽器
②Servlet對象初始化緩存
- Servlet容器建立Servlet對象以後,會調用init(ServletConfig config)方法,對其進行初始化。在javax.servlet.Servlet接口中,public void init(ServletConfig config)方法要求容器將ServletConfig的實例對象傳入,這也是咱們獲取ServletConfig的實例對象的根本方法。
[參考閱讀]服務器 ●這是依賴注入思想的一種實現,所謂依賴注入指的是程序中須要的對象不是由開發人員本身建立或獲取,而是由「環境」——也就是容器主動「注入」到咱們的程序中。這樣作的好處是屏蔽複雜對象的建立細節或簡化開發過程。這一思想在不少框架中都獲得了體現,特別是Spring的IOC容器就是依賴注入思想的典型實現。app |
- 爲了簡化開發,GenericServlet抽象類中實現了init(ServletConfig config)方法,將init(ServletConfig config)方法獲取到的ServletConfig對象賦值給了成員變量ServletConfig config,目的是使其它方法能夠共享這個對象。這時有一個問題:若是子類重寫了這個init(ServletConfig config)方法,有可能會致使成員變量config對象賦值失敗。因此GenericServlet抽象類另外提供了一個無參的public void init()方法,並在init(ServletConfig config)方法中調用,做爲子類進行初始化操做時重寫使用。而這個無參的init()方法之因此沒有設計成抽象方法,是爲了不子類繼承時強制實現這個方法帶來的麻煩,使用者能夠根據須要選擇是否要覆蓋這個方法。
③處理請求框架
- 在javax.servlet.Servlet接口中,定義了service(ServletRequest req, ServletResponse res)方法處理HTTP請求,同時要求容器將ServletRequest對象和ServletResponse對象傳入。
- 在HttpServlet抽象類中,service(ServletRequest req, ServletResponse res)方法將ServletRequest對象和ServletResponse對象強轉爲了HttpServletRequest、HttpServletResponse子類對象,這樣更適合於HTTP請求的處理,因此在doGet()和doPost()方法中使用的就是HttpServletRequest、HttpServletResponse的實現類對象了。
④Servlet對象銷燬eclipse
- Web應用卸載或服務器中止執行時會銷燬Servlet對象,而銷燬以前爲了執行一些諸如釋放緩存、關閉鏈接、保存數據等操做,因此設計了public void destroy()方法。
- ServletConfig接口封裝了Servlet配置信息,這一點從接口的名稱上就可以看出來。但同時,表明當前Web應用的ServletContext對象也封裝到了ServletConfig對象中,使ServletConfig對象成爲了獲取ServletContext對象的一座橋樑。
- ServletConfig對象的主要功能
①獲取Servlet友好名稱
②獲取Servlet初始化參數
③獲取ServletContext對象
- Web容器在啓動時,它會爲每一個Web應用程序都建立一個對應的ServletContext對象,它表明當前Web應用——做用很像餐廳的經理。
- 因爲一個Web應用程序中的全部Servlet都共享同一個ServletContext對象,因此ServletContext對象也被稱爲 application 對象(Web應用程序對象)。
- 在應用程序中可以獲取運行環境或容器信息的對象一般稱之爲「上下文對象」。
- ServletContext對象的主要功能
①獲取WEB應用程序的初始化參數
- 設置Web應用初始化參數的方式是在web.xml的根標籤下加入以下代碼
<!– Web應用初始化參數 –> <context-param> <param-name>ParamName</param-name> <param-value>ParamValue</param-value> </context-param> |
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.獲取ServletContext對象 ServletContext context = this.getServletContext(); //2.獲取Web應用初始化參數 String paramValue = context.getInitParameter(「ParamName」); System.out.println(「paramValue=」+paramValue); } |
②獲取虛擬路徑所映射的本地路徑
- 虛擬路徑:瀏覽器訪問Web應用中資源時所使用的路徑。
- 本地路徑:資源在文件系統中的實際保存路徑。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.獲取ServletContext對象 ServletContext context = this.getServletContext(); //2.獲取index.html的本地路徑 //index.html的虛擬路徑是「/index.html」,其中「/」表示當前Web應用的根目錄, //即WebContent目錄 String realPath = context.getRealPath(「/index.html」); //realPath=D:\DevWorkSpace\MyWorkSpace\.metadata\.plugins\ //org.eclipse.wst.server.core\tmp0\wtpwebapps\MyServlet\index.html System.out.println(「realPath=」+realPath); } |
③application域範圍的屬性
- ServletContext對象與當前Web應用一致,即Web應用加載時建立,Web應用卸載時銷燬。
關注我,瞭解更多前端培訓開發技術知識分享!
文章轉載連接:http://www.atguigu.com/jsfx/1489.html