1. 程式人生 > >Servlet學習之ServletConfig

Servlet學習之ServletConfig

ServletConfig在Servlet中扮演的角色

  • 用於載入Servlet的初始化引數,在一個web應用可以存在多個ServletConfig物件,一個Servlet對應一個ServletConfig物件。

  • 初始化引數的作用: 我們可以將一些servlet執行時需要載入常量定義在初始化引數中,當我們需要使用時,可以直接通過ServletConfig獲取到這些值。

配置初始化引數

ServletConfig的配置

ServletConfig物件的獲取

1、通過重寫父類有參的init(ServletConfig config)方法獲得,檢視原始碼可以知道有參的init(ServletConfig config)的引數型別就是ServletConfig型別的。

//1、建立私有變數
	private ServletConfig config = null;
//2、重寫init方法,從而獲取ServletConfig物件
	this.config = config

2、通過繼承父類(GenericServlet)的方法得到一個ServletConfig物件

//	得到ServletConfig物件
	ServletConfig config = this.getServletConfig();

ServletConfigAPI的介紹

1、String getServletName():獲得是我們在web.xml中配置的中的內容,也就是返回是Servlet例項的名字。

2、String getInitParameter(String name):獲取在servlet中初始化引數的值。這裡注意與全域性初始化引數的區分。這個獲取的只是在該servlet下的初始化引數

3、Enumeration getInitParameterNames(): 獲取當前Servlet所有初始化引數的名字組成的列舉,返回值型別是:Enumeration

4、ServletContext getServletContext():獲取代表當前web應用的ServletContext物件(後期會進行介紹 )

ServletConfig的程式碼測試

建立一個MyConfig的Servlet類,然後在web.xml中的標籤下,通過標籤為這個servlet配置兩個初始化引數:

<servlet>
    <servlet-name>MyConfig</servlet-name>
    <servlet-class>com.syj.ServletConfig.MyConfig</servlet-class>
    <init-param>
    	<param-name>username</param-name>
    	<param-value>tom</param-value>
    </init-param>
     <init-param>
    	<param-name>password</param-name>
    	<param-value>root</param-value>
    </init-param>
    <init-param>
    	<param-name>encoding</param-name>
    	<param-value>UTF-8</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>MyConfig</servlet-name>
    <url-pattern>/myConfig</url-pattern>
  </servlet-mapping>

利用提供的API獲取引數名和引數值:

public class MyConfig extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		ServletConfig config = this.getServletConfig();

		// 1、獲取ServletConfig物件
		// 獲取當前Servlet在web.xml配置的名稱。
		// 使用的方法是:getServletName()
		String servletName = config.getServletName();
		System.out.println(servletName);

		// 根據<init-param>中<param-name>的名字獲取指定的<param-value>的值
		// 使用的方法是:getInitParamter(String name)
		String pusername = config.getInitParameter("username");
		String pencoding = config.getInitParameter("encoding");
		System.out.println("getInitParameter得到encoding:"+pusername);
		System.out.println("getInitParameter得到encoding:"+pencoding);

		// 根據<init-param>獲取所有的<param-name>的值返回值型別:Enumeration
		// 使用的方法是:getInitParamterNames()	
		Enumeration<String> initParameterNames = config.getInitParameterNames();
		// 遍歷得到的引數名
		while (initParameterNames.hasMoreElements()) {
			String name = initParameterNames.nextElement();
			String value = config.getInitParameter(name);
			System.out.println("getInitParameterNames方法得到:"+name + ":" + value);
		}
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

ServletConfig補充

  • 每一個servlet都有自己的ServletConfig物件,也就是說它是單例的。
  • ServletConfig物件是由伺服器建立的,通過Servlet中init方法傳遞到Servlet中。
  • ServletConfig物件表示Servlet的配置物件,我們可以通過它獲取Servlet的名稱與相關的初始化引數。
  • 我們可以通過ServletConfig獲取 ServletContext物件。 ServletContext config = this.getServletContext ();