教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

JAVA培訓之ServletContext功能詳解

更新時間:2016年07月25日17時45分 來源:傳智播客Java培訓學院 瀏覽次數:

我們知道一個ServletContext對象對應一個web應用,我們也可以稱ServletContext是web應用的上下文對象。它能夠實現web應用中Servlet之間的數據通信,以及獲取全局初始化參數等功能。下面我們就來一一介紹這兩種功能。

1.ServletContext域功能

ServletContext是javaweb的四大域對象之一。什么是域對象?主要來說,域對象是用來在多個Servlet之間傳遞數據。我們可以理解域是一個容器,可以將數據存放在這個域中,然后在域范圍內可以將數據從這個域中取出來。也可以理解域就是一個范圍,ServletContext是四大域對象中,域范圍最大的。
所有域對象都有存取數據的能力,是因為在域中存在一個map,數據是以key-value的形式存放在域中。以下是ServletContext存取域中數據的相關方法,如表1-1所示:
方法名 方法描述
 
 
void setAttribute(String name ,Object value)
向域中存放數據,也稱為域屬性,例如:setAttribute(“pw”,”123”),表示向域中存放了一個域屬性,屬性名為”pw”,屬性值為”123”,如果再次調用該方法,并向域中存放了同名的域屬性,最后存的會覆蓋以前存的。
Object getAttribute(String name) 根據屬性名稱獲取域中的屬性值,使用該方法之前,一定要向域中存放數據,這樣才能取出來。
 
void removeAttribut(String name)
從域中移出指定屬性名的域屬性,包括屬性名和屬性值,如果參數name指定的域屬性不存在,則本方法什么都不做。
Enumeration getAttributeNames() 獲得域中所有的域屬性的名稱,返回值類型是Enumeration
下面通過一個案例,來學習這些方法的使用,詳情請參考ServletContext功能案例詳解,點擊此處 下載案例源代碼,具體如下所示:
(1)建立一個web應用,Example14,在該應用下新建一個Servlet類,TestServlet,主要代碼如例1-1所示:
例1-1 TestServlet.java
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 ,主要代碼如例1-2所示:
例1-2  TwoServlet.java
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”。
 (4)將Example14應用發(fā)布到Tomcat服務器,啟動服務器,在瀏覽器地址欄上輸入:http://localhost:8080/Example14/TestServlet,瀏覽器顯示結果如圖1-1所示:

圖1-1 瀏覽器顯示結果
(5)接著在瀏覽器端地址欄上輸入http://localhost:8080/Example14/TwoServlet,控制臺顯示結果如圖1-2所示:

圖1-2 控制臺運行結果
由圖1-1、1-2所示,我們先訪問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)在Example14應用中,新建一個Servlet類,ParamServlet,主要代碼如例1-4所示:
例1-4 ParamServlet.java
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文件的配置內容,如例1-5所示:
例1-5 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>
(3)重新啟動Tomcat服務器,在瀏覽器端地址欄輸入:http://localhost:8080/Example14/ParamServlet,控制臺打印結果如圖1-3所示:
圖1-3 控制臺打印結果
由圖1-3可知,ParamServlet將在web.xml文件配置的全局初始化信息獲取到了,由此可見,ServletContext對象可以獲取web應用的初始化參數。

本文版權歸傳智播客Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://fskzgqt.cn/javaee
0 分享到:
和我們在線交談!