Servlet初始化的問題

 轉自 [email protected]
 在讀我自己的認識之前 , 我們先來看一下 servet 的結構圖 :
servlet.png
以下是我自己的一點淺見:
①  Servlet 在初始化的時候 , 是通過 init(ServletConfig config) 或 init() 來執行的。
ServletConfig 是一個接口,它怎樣傳遞給他一格對象來進行初始化呢?其實,是這個對象是由 servlet 容器來實例化的,由容器產生一格 ServletConfig 的實現類的對象,然後傳遞給 Servlet
結論: ServletConfig 由容器實例化
②  我們有些時候可能在 Servlet 初始化時給它一些固定的配置參數,那麼這些參數是怎樣傳遞到 Servlet 呢?
其實,我們在 web.xml 中給 servlet 配置啓動參數,在容器對 servlet 進行初始化的時候,會收集你所配置的參數,記錄在 ServletConfig 的實現類中,所以你纔可以通過 ServletConfig 對象的
    public String getInitParameter(String name);
    public Enumeration getInitParameterNames();
方法來取得你已經配置好的參數,也就是說,你對 servlet 的配置都已經記錄在 ServletConfig 對象中了。
結論:你對 Servlet 的配置,在 Servlet 的初始化時都由容器來收集並且記錄到 ServletConfig 的實現類中。
 
③  我們來看一個 Servlet 的配置
 <servlet>
    <servlet-name>index</servlet-name>
    <servlet-class>org.zy.pro.sw.servlet.IndexServlet</servlet-class>
    <init-param>
      <param-name>dbconfig</param-name>
      <param-value>/WEB-INF/dbconfig.xml</param-value>
    </init-param>
 </servlet>
在此,我們實現對數據庫的配置文件的加載。
當 Servlet 初始化完成後,我們可以通過
String dbconf=this.getServletConfig().getInitParameter("dbconfig")
來取得我們的配置的參數的值。
但是,我們僅能得到一個配置的字符串。之後我們可以通過配置文件取得我們的數據庫的配置參數,然後對數據庫進行初始化。
其實我們也可以通過傳遞一個類的名字串,然後再實例化。
    <init-param>
      <param-name>dbconfig</param-name>
      <param-value>org.zy.util.db.DBUtil</param-value>
    </init-param>
我們先取得配置參數:
String dbconf=this.getServletConfig().getInitParameter("dbconfig") ;
然後通過
Class.forName(dbconf).getInstance();
來實例化對象,就可以實現對數據庫的調用了。
結論:在 web.xml 中對 Servlet 的初始化,只能傳遞字符串類型的數據
④  ServletContext
ServletContext 是負責和 Servlet 的上文和下文交互,上面和 Servlet 容器交互,下面和 Servlet 中的請求和相應進行交互。
在 ServletConfig 中,    
public ServletContext getServletContext(); 方法實現取得當前 ServletContext 的對象。
你可能要問, ServletContext 是一個接口,那麼你如何取得他的對象呢?
其實這個問題和 ServletConfig 相同,都是在 Servlet 進行初始化的時候產生的對象,是由容器來初始化的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章