ServletContext功能詳解
我們知道一個ServletContext物件對應一個web應用,我們也可以稱ServletContext是web應用的上下文物件。它能夠實現web應用中Servlet之間的資料通訊,以及獲取全域性初始化引數等功能。下面我們就來一一介紹這兩種功能。
1. ServletContext域功能
ServletContext是javaweb的四大域物件之一。什麼是域物件?主要來說,域物件是用來在多個Servlet之間傳遞資料。我們可以理解域是一個容器,可以將資料存放在這個域中,然後在域範圍內可以將資料從這個域中取出來。也可以理解域就是一個範圍,ServletContext是四大域物件中,域範圍最大的。
所有域物件都有存取資料的能力,是因為在域中存在一個
下面通過一個案例,來學習這些方法的使用,具體如下所示:
(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)TestServlet在web.xml檔案中配置的訪問路徑是:“/TestServlet”;TwoServlet在web.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應用的初始化引數。