我们知道一个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可知,ParamServlet将在web.xml文件配置的全局初始化信息获取到了,由此可见,ServletContext对象可以获取web应用的初始化参数。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/253154.html