1. 程式人生 > >ServletContext功能詳解

ServletContext功能詳解

我們知道一個ServletContext物件對應一個web應用,我們也可以稱ServletContextweb應用的上下文物件。它能夠實現web應用中Servlet之間的資料通訊,以及獲取全域性初始化引數等功能。下面我們就來一一介紹這兩種功能。

1. ServletContext域功能

ServletContextjavaweb的四大域物件之一。什麼是域物件?主要來說,域物件是用來在多個Servlet之間傳遞資料。我們可以理解域是一個容器,可以將資料存放在這個域中,然後在域範圍內可以將資料從這個域中取出來。也可以理解域就是一個範圍,ServletContext是四大域物件中,域範圍最大的。

所有域物件都有存取資料的能力,是因為在域中存在一個

map,資料是以key-value的形式存放在域中。以下是ServletContext存取域中資料的相關方法,如表1-1所示:

下面通過一個案例,來學習這些方法的使用,具體如下所示:

(1)建立一個web應用,Example14,在該應用下新建一個Servlet類,TestServlet

public class TestServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
      /*
       * 向ServletContext域中存放域屬性
       * */
		ServletContext servletContext=getServletContext();
		servletContext.setAttribute("name","zhangsan");
	}
}

(2)再次新建一個Servlet類,TwoServlet 

public class TwoServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
             /*
              * 從ServletContext域中獲取域屬性
              * */
		ServletContext servletContext=getServletContext();
		String value=(String) servletContext.getAttribute("name");
		System.out.println(value);
	}
}

(3)TestServletweb.xml檔案中配置的訪問路徑是:“/TestServlet”;TwoServletweb.xml檔案中配置的訪問路徑是:“/TwoServlet”。

我們先訪問TestServlet,將name域屬性存放在ServletContext域中,然後再訪問TwoServlet,這個時候就可以獲取域屬性name的值。

2.ServletContext獲取初始化引數

web.xml檔案中,不僅可以配置Servlet的初始化資訊,還可以配置整個web應用的初始化資訊。web應用初始化引數的配置方式具體如下所示:

<context-param>
  <param-name>hobby</param-name>
  <param-value>play</param-value>
  </context-param>
  <context-param>
  <param-name>gender</param-name>
  <param-value>male</param-value>
</context-param>

在上面的例項中,<context-param>元素位於根元素<web-app>元素中,它的子元素<param-name><param-value>分別用來指定引數的名字與引數值。要獲取這些引數資訊,可以使用ServletContext介面的getInitParameterNames()getInitParameter(String name)。它們分別是用來獲取引數名和引數值。

下面通過一個案例來學習如何使用ServletContext類的這些方法獲取初始化引數,具體如下:

(1).新建一個Servlet類,ParamServlet

public class ParamServlet extends HttpServlet {
 /*
  * 通過ServletContext獲取全域性初始化引數
  * */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
          ServletContext servletContext=getServletContext();
         String hobby= servletContext.getInitParameter("hobby");
         String gender=servletContext.getInitParameter("gender");
         System.out.println("hobby:"+hobby);
         System.out.println("gender:"+gender);
	}
}

(2)web.xml檔案的配置內容

 <context-param>

  <param-name>hobby</param-name>

  <param-value>play</param-value>

  </context-param>

  <context-param>

  <param-name>gender</param-name>

  <param-value>male</param-value>

  </context-param>

<servlet>

    <servlet-name>ParamServlet</servlet-name>

    <servlet-class>cn.itcast.web.servlet.ParamServlet</servlet-class>

  </servlet>

<servlet-mapping>

    <servlet-name>ParamServlet</servlet-name>

    <url-pattern>/ParamServlet</url-pattern>

  </servlet-mapping>

控制檯列印結果如圖


由圖可知,ParamServlet將在web.xml檔案配置的全域性初始化資訊獲取到了,由此可見,ServletContext物件可以獲取web應用的初始化引數。