版權(quán)所有,轉(zhuǎn)載請聲明出處 zhyiwww@163.com
在讀我自己的認(rèn)識之前
,
我們先來看一下
servet
的結(jié)構(gòu)圖
:
以下是我自己的一點(diǎn)淺見:
① Servlet 在初始化的時(shí)候 , 是通過 init(ServletConfig? config) 或 init() 來執(zhí)行的。
ServletConfig 是一個(gè)接口,它怎樣傳遞給他一格對象來進(jìn)行初始化呢?其實(shí),是這個(gè)對象是由 servlet 容器來實(shí)例化的,由容器產(chǎn)生一格 ServletConfig 的實(shí)現(xiàn)類的對象,然后傳遞給 Servlet
結(jié)論: ServletConfig 由容器實(shí)例化
② 我們有些時(shí)候可能在 Servlet 初始化時(shí)給它一些固定的配置參數(shù),那么這些參數(shù)是怎樣傳遞到 Servlet 呢?
其實(shí),我們在 web.xml 中給 servlet 配置啟動(dòng)參數(shù),在容器對 servlet 進(jìn)行初始化的時(shí)候,會(huì)收集你所配置的參數(shù),記錄在 ServletConfig 的實(shí)現(xiàn)類中,所以你才可以通過 ServletConfig 對象的
??? public String getInitParameter(String name); 或
??? public Enumeration getInitParameterNames();
方法來取得你已經(jīng)配置好的參數(shù),也就是說,你對 servlet 的配置都已經(jīng)記錄在 ServletConfig 對象中了。
結(jié)論:你對 Servlet 的配置,在 Servlet 的初始化時(shí)都由容器來收集并且記錄到 ServletConfig 的實(shí)現(xiàn)類中。
?
③ 我們來看一個(gè) 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>
在此,我們實(shí)現(xiàn)對數(shù)據(jù)庫的配置文件的加載。
當(dāng) Servlet 初始化完成后,我們可以通過
String? dbconf=this.getServletConfig().getInitParameter("dbconfig")
來取得我們的配置的參數(shù)的值。
但是,我們僅能得到一個(gè)配置的字符串。之后我們可以通過配置文件取得我們的數(shù)據(jù)庫的配置參數(shù),然后對數(shù)據(jù)庫進(jìn)行初始化。
其實(shí)我們也可以通過傳遞一個(gè)類的名字串,然后再實(shí)例化。
??? <init-param>
????? <param-name>dbconfig</param-name>
????? <param-value>org.zy.util.db.DBUtil</param-value>
??
?</init-param>
我們先取得配置參數(shù):
String? dbconf=this.getServletConfig().getInitParameter("dbconfig") ;
然后通過
Class.forName(dbconf).getInstance();
來實(shí)例化對象,就可以實(shí)現(xiàn)對數(shù)據(jù)庫的調(diào)用了。
結(jié)論:在 web.xml 中對 Servlet 的初始化,只能傳遞字符串類型的數(shù)據(jù)
④ ServletContext
ServletContext 是負(fù)責(zé)和 Servlet 的上文和下文交互,上面和 Servlet 容器交互,下面和 Servlet 中的請求和相應(yīng)進(jìn)行交互。
在 ServletConfig 中, ???
public ServletContext getServletContext(); 方法實(shí)現(xiàn)取得當(dāng)前 ServletContext 的對象。
你可能要問, ServletContext 是一個(gè)接口,那么你如何取得他的對象呢?
其實(shí)這個(gè)問題和 ServletConfig 相同,都是在 Servlet 進(jìn)行初始化的時(shí)候產(chǎn)生的對象,是由容器來初始化的。