javaweb中的servletContext 对象
什么是ServletContext
在Tomcat服务器中的web的项目 也叫做WEB应用程序。在java中 万物皆对象,那么,应用程序也是对象。
在Java Web开发中,使用ServletContext对象表示WEB应用程序。
说明:
- 在一个WEB应用程序中,只能存在一个ServletContext对象。
- 每个应用程序,都有它自己所对应的一个ServletContext对象。
- 在服务器启动的时候,为每个web应用程序创建一个单独的ServletContext对象。
- ServletContext是接口, 此接口的实现类是tomcat引擎提供
ServletContext对象的作用
- 获取WEB应用程序的初始化参数
**- 获取WEB应用程序下任意资源的绝对路径 - ServletContext作为域对象,存储数据**
如何获取ServletContext对象
一个web应用程序只有一个ServletContext对象
-
方式1:通过ServletConfig接口获取,它提供了方法 getServletContext()
public interface ServletConfig { ServletContext getServletContext(); } -
方式2:通过继承的HttpServlet类的父类GenericServlet获取, GenericServlet类 提供了方法 getServletContext(),下面是源码分析
class Context1Servlet extends HttpServlet {} ↓ ↓ public abstract class HttpServlet extends GenericServlet{} ↓ ↓ public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { //用transient关键字标记的成员变量不参与序列化过程。 private transient ServletConfig config; public ServletConfig getServletConfig() { return this.config; } public ServletContext getServletContext() { return this.getServletConfig().getServletContext(); } //省略其他 } -
代码演示
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //方式1:通过ServletConfig对象获取,它提供了方法 getServletContext() ServletConfig config = super.getServletConfig(); ServletContext servletContext = config.getServletContext(); System.out.println("servletContext = "+servletContext); //方式2:通过继承的HttpServlet类的父类GenericServlet获取, GenericServlet类 提供了方法 getServletContext() ServletContext servletContext2 = super.getServletContext(); System.out.println("servletContext2 = "+servletContext2); }
作用一:获取WEB应用程序的初始化参数(已经不常用了)
因为一个web应用程序只有一个ServletContext对象,所以这个对象对整个应用程序的相关内容都是了解的
- web.xml 配置WEB应用程序的初始化参数
<!-- 配置的是WEB程序的初始化参数-->
<context-param>
<param-name>heima</param-name>
<param-value>java</param-value>
</context-param>
- API操作
| 方法 | 返回值 | 描述 |
|---|---|---|
| getInitParameter(String name) | String | 获取web应用程序的初始化参数 |
- 代码演示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 获取ServletContext对象
* 父类的方法
* org.apache.catalina.core.ApplicationContextFacade实现接口ServletContext
*/
ServletContext context = getServletContext();
System.out.println(context);
//context对象,获取配置文件中的初始化参数
String value = context.getInitParameter("heima");
System.out.println(value);
}
作用二:获取WEB应用程序下任意资源的绝对路径
| 方法 | 返回值 | 描述 |
|---|---|---|
| getRealPath(String path) | String | 接收一个资源的相对路径,返回真实路径(完整路径)的字符串 |
- 获取web目录下的a.txt绝对路径
- 获取web目下WEB-INF目录下的b.txt绝对路径
- 获取src目录下的c.txt绝对路径
- 获取web02 module下的d.txt绝对路径,获取不到

代码演示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取servletContext对象
ServletContext servletContext = super.getServletContext();
//获取web目录下的a.txt绝对路径
String apath = servletContext.getRealPath("a.txt");
System.out.println("apath = " + apath);
//获取web目录下WEB-INF目录下的b.txt绝对路径
String bpath = servletContext.getRealPath("WEB-INF/b.txt");
System.out.println("bpath = " + bpath);
//获取src目录下的c.txt绝对路径
String cpath = servletContext.getRealPath("WEB-INF/classes/c.txt");
System.out.println("cpath = " + cpath);
}
作用三:ServletContext作为域对象
ServletContext是在服务器启动的时候为每个web项目 单独创建一个ServletContext对象。
当web项目从服务器中移除,或者是关闭服务器的时候ServletContext对象会被销毁。
向ServletContext中保存的数据一直存在
(当服务器关闭的时候ServletContext对象被销毁,然后里面数据才会失效)。
- ServletContext作用范围:整个web应用。
| 方法 | 返回值 | 描述 |
|---|---|---|
| setAttribute(String key, Object value) | void | 向域对象存储数据 |
| getAttribute(String key) | Object | 取出域对象数据 |
| removeAttribute(String key) | void | 移除域对象数据 |
代码演示:
第一个Servlet(设置值):
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取servletcontext对象
ServletContext context = super.getServletContext();
//存储数据 heima=java
context.setAttribute("language","java");
//读取数据 heima的值
Object value = context.getAttribute("language");
System.out.println("Context4Servlet language= " + value);
}
第二个Servlet(获取值):
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取ServletContext域对象
ServletContext context = super.getServletContext();
//获取域对象中 指定键的值
Object value = context.getAttribute("language");
System.out.println("Context5Servlet language= " + value);
}

浙公网安备 33010602011771号