1、ServletContext詳解
2、ServletConfig詳解
Servlet容器初始化一個servlet對象時,會爲這個servlet對象建立一個servletConfig對象。在servletConfig對象中包含了servlet的初始化參數信息。此外,servletConfig對象還與servletContext對象關聯。Servlet容器在調用servlet對象的init(ServletConfig config)方法時,會把servletConfig對象當作參數傳遞給servlet對象。Init(ServletConfig config)方法會使得當前servlet對象與servletConfig對象創建關聯關係。
servletConfig接口中定義了一下方法:
getInitParameter(String name):根據給定的初始化參數,返回匹配的初始化參數值。
getInitParameterNmes():返回一個Enumeration對象,裏面包含了全部的初始化參數。
getServletContext():返回一個servletContext()對象,
getServltName():返回servlet的名字,即web.xml中的<servlet-name>的子元素的值。若是沒有配置這個子元素,則返回servlet類的名字。
例子:
<servlet>
<servlet-name>actionServlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<load-on-startup>0</load-on-startup>
<init-param>
<param-name>color</param-name>
<param-value>red</param-value>
</init-param>
<init-param>
<param-name>size</param-name>
<param-value>16</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>actionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
如上,紅色標記處爲初始化參數,至關於公有參數。
在servlet中:java
public class UserDateBaseServlet extends HttpServlet{
String color = this.getInitParameter("color");
String size = this.getInitParameter("size");
System.out.println("顏色是:"+color+"字號是:"+size);
}
注:HttpServlt類繼承了GenericServlet類,而GenericServlet類實現了ServletConfig接口,所以在HttpServlet類和GenericServlet類及子類中均可以直接調用ServletConfig接口中的方法。web
3、兩者區別
在看web.xml配置文件關於環境初始化參數的配置時,發現了ServletConfig與ServletContext這兩個對象的應用,因而就寫了一個Servlet來體驗了一下。apache
首先從做用範圍來講,ServletConfig做用於某個特定的Servlet,即從該Servlet實例化,那麼就開始有效,可是該Servlet以外的其餘Servlet不能訪問;ServletContext做用於某個web應用,即在一個web應用中至關於一個全局對象,在Servlet容器啓動時就已經加載,對於不一樣的web應用,有不一樣的ServletContext。瀏覽器
其次,來看一下兩者參數的使用。若是一個參數爲整個web應用所用,那麼就配置爲ServletContext參數,以下所示:服務器
<context-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</context-param>app
若是一個參數僅爲一個Servlet所用,那麼就應該配置爲ServletConfig參數,以下所示:jsp
<servlet>
<servlet-name>affice_add</servlet-name>
<servlet-class>servlet.Affice_add</servlet-class>
<init-param>
<param-name>filepath</param-name>
<param-value>/webContent/affice</param-value>
</init-param>
</servlet>this
最後,說明一下參數的獲取。訪問ServletConfig參數,取得ServletConfig對象後,調用getInitParameter()方法;訪問ServletContext對象,只要調用現有的ServletConfig對象的getServletContext()便可,而後一樣調用getInitParamter()方法就能獲取參數。例如對於上面的參數,能夠經過以下方法獲取各自參數。url
public class TestServletConfig extends HttpServlet {
ServletConfig config;spa
public void init(ServletConfig config) {
this.config=config;
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
String filepath=(String)config.getInitParameter("filepath");
System.out.println(filepath);
String encode=(String)config.getServletContext().getInitParameter("encoding");
System.out.println(encode);
}
public void destroy() { } } 對上面Servlet編譯後,在瀏覽器中輸入 http://localhost:8080/my/TestServletConfig (該連接地址與servlet在webx.xml中的配置有關)後,就能夠分別對應輸出/WebContent/affice和gb2312