JavaWeb(一)Servlet中的ServletConfig與ServletContext


 

前言

  前面我介紹了一下什么是servlet,它的生命周期,執行過程和它的原理。這里我們做一個簡單的回顧!

  什么是Servlet?

  servlet 是運行在 Web 服務器中的小型 Java 程序(即:服務器端的小應用程序)。servlet 通常通過 HTTP(超文本傳輸協議)接收和響應來自 Web 客戶端的請求

  執行過程:

    

  生命周期:  

    實例化-->初始化-->服務->銷毀
    出生:(實例化-->初始化)第一次訪問Servlet就出生(默認情況下)
    活着:(服務)應用活着,servlet就活着
    死亡:(銷毀)應用卸載了servlet就銷毀。

  如何讓servlet在服務器啟動時就創建:

    在web.xml中的servlet標簽里面配置一個load-on-startup來設置

一、Servlet規范核心類圖

  

接下來我們要說的是Servlet的四個類:

  ServletConfig對象,ServletContext對象、request對象,response對象

從圖中我們可以知道這幾個對象之間的聯系!

一、ServletConfig對象

1.1、獲取ServletConfig對象

  1)使用初始化方法獲得一個ServletConfig對象

    

  2)通過繼承父類(GenericServlet)的方法得到一個ServletConfig對象   

ServletConfig config = this.getServletConfig();

1.2、ServletConfig對象作用

    

  1)getServletName();  //獲取servlet的名稱,也就是我們在web.xml中配置的servlet-name

  2)getServletContext(); //獲取ServletContext對象,該對象的作用看下面講解

  3)getInitParameter(String); //獲取在servlet中初始化參數的值。這里注意與全局初始化參數的區分。這個獲取的只是在該servlet下的初始化參數

    

  4)getInitParameterNames(); //獲取在Servlet中所有初始化參數的名字,也就是key值,可以通過key值,來找到各個初始化參數的value值。注意返回的是枚舉類型

    

    在Servlet類中

    

    結果

    

  注意:在上面我們所分析的源碼過程中,我們就知道,其實可以不用先獲得ServletConfig,然后在獲取其各種參數,可以直接使用其方法,比如上面我們用的ServletConfig().getServletName();

      可以直接寫成getServletName();而不用在先獲取ServletConfig();了,原因就是在GenericServlet中,已經幫我們獲取了這些數據,我們只需要直接拿就行。   

  String value = this.getInitParameter("wolf"); 

二、ServletContext

2.1、獲取ServletContext對象

  1)getServletContext();

  2)getServletConfig().getServletContext();

  這兩種獲取方式的區別就跟上面的解釋一樣,第一種是直接拿,在GenericServlet中已經幫我們用getServletConfig().getServletContext();拿到了ServletContext

  我們只需要直接獲取就行了,第二種就相當於我們自己在獲取一遍,兩種讀是一樣的。

2.2、ServletContext對象作用

  tomcat為每個web項目都創建一個ServletContext實例,tomcat在啟動時創建,服務器關閉時銷毀,在一個web項目中共享數據,管理web項目資源,

  為整個web配置公共信息等,通俗點講,就是一個web項目,就存在一個ServletContext實例,每個Servlet讀可以訪問到它

  1)web項目中共享數據

    在一定范圍內(當前應用),使多個Servlet共享數據

    getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)

    

    1.1)setAttribute(String name, Object obj) 在web項目范圍內存放內容,以便讓在web項目中所有的servlet讀能訪問到

    1.2)getAttribute(String name) 通過指定名稱獲得內容

    1.3)removeAttribute(String name) 通過指定名稱移除內容 

    實例:

      我們在Servlet_demo_0010中寫:      

      this.getServletContext().setAttribute("bang", "adc");

      然后我們在Servlet_demo_0020中看能不能獲取到:

      

      結果:

        得到了adc

  2)獲取全局配置信息

    整個web項目初始化參數 (這個就是全局初始化參數,每個Servlet中都能獲取到該初始化值)

    2.1)getInitPatameter(String name)  //通過指定名稱獲取初始化值

    2.2)getInitParameterNames()  //獲得枚舉類型

    web.xml 配置 整個web項目的初始化

    

    

    結果:

      

  3)獲取web項目資源

    3.1)獲取web項目下指定資源的路徑:getServletContext().getRealPath("/WEB-INF/web.xml")

      String  getRealPath(String path);//根據資源名稱得到資源的絕對路徑

      

      結果:

        

      應用:

        

        

    3.2)獲取web項目下指定資源的內容,返回的是字節輸入流。InputStream getResourceAsStream(java.lang.String path)

      

      結果的一部分:

        

    3.3)getResourcePaths(java.lang.String path)  指定路徑下的所有內容。

      

      結果:

        

    3.4)實現servlet的轉發

       RequestDispatcher  getRequestDispatcher(String path) ;//參數表示要跳轉到哪去

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM