全国咨询热线: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应用发布到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培训学院
首发:http://www.itcast.cn/javaee