版權所有,轉載請聲明出處
zhyiwww@163.com
在讀我自己的認識之前
,
我們先來看一下
servet
的結構圖
:
以下是我自己的一點淺見:
①
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
進行初始化的時候產生的對象,是由容器來初始化的。