ServletContext概述
服务器会为每个应用创建一个一个ServletContext对象
-
ServletContext对象的创建是在服务器启动时完成的
-
ServletContext对象的销毁是在服务器关闭时完成的
ServletContext对象的作用是在整个web应用的动态资源之间共享数据,例如在AServlet中向ServletContext对象中保存一个值,然后再BServlet中就可以获取这个值,这就是共享数据了一个项目只有一个ServletContext对象,
我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据,“与天地同寿”!!!这个对象在Tomcat启动时就创建,在Tomcat关闭时才会死去。
获取ServletContext对象
- ServletContext#getServletContext()
- GenericServlet#getServletContext()
- HttpSession#getServletContext()
- ServletContextEvent#getServletContext()
在Servlet中获取ServletContext()对象:
在void init(ServletConfig config)中:ServletContext() context = cinfig.getServletContext();,ServletConfig类的getServletContext()方法可以用来获取ServletContext对象
在GenericServlet或HttpServlet中获取ServletContext对象:
GenericServlet类有getServletContext()方法,所以可以直接使用this.getServletContext()来获取;
演示ServletContext()
域对象的功能
ServletContext()是javaweb四大域对象之一
- PageContext;
ServletRequest; - HttpSession;
- ServletContext();
所有域对象都有存取数据的功能。因为域对象内部有一个Map,用来存储数据,下面是ServletContext()对象用来操作数据的方法: - void setAttribute(String name,Object value):用来储存一个对象,也可以称之为储存一个域属性,例如ServletContext().setAttribute("xxx","XXX"),在ServletContext()保存了一个域属性,域属性名称为xxx,值为XXX,请注意,如果多次调用该方法,并且使用相同的name,那么就会覆盖上一次的值,这一点特性与Map相同
- object Attribute(String name):同来获取ServletContext()中的数据,当然在获取之前需要保存才行,例如String value = (String)ServletContext(). getAttribute("xxx"),获取名为xxx的域属性
- void removeAttribute(String name) :用来移除ServletContext()中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做
- Enumeration getAttributeNames():获取所有域属性的名称
package baoming;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class EServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*1、获取ServletContext对象
* 2、调用其setAttribute()保存数据*/
ServletContext application = this.getServletContext();
application.setAttribute("name","张三");
}
}
package baoming;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class FServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*1、获取ServletContext对象
* 2、调用其getAttribute()保存数据*/
ServletContext application = this.getServletContext();
String name = (String)application.getAttribute("name");
System.out.println(name);
}
}
获取应用初始化参数
- Servlet也可以获取初始化参数,但它是局部的参数,也就是说,一个servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个servlet准备
还可以使用ServletContext来获取web.xml文件中配置的应用初始化参数,注意,应用初始化参数与servlet初始化参数不同
package baoming;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class GServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*1、获取ServletContext对象
* 2、调用其getInitParameter)保存数据*/
ServletContext application = this.getServletContext();
String value = application.getInitParameter("Context-param");
System.out.println(value);
}
}
<context-param>
<param-name>Context-param</param-name>
<param-value>Context-value</param-value>
</context-param>
网友评论