什么是 ServletContext?
ServletContext
是一个全局的储存信息的空间,表示 Servlet 上下文对象- 一个 web 工程,只有一个 ServletContext 对象实例
- 生命周期:当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁
上述的web工程应该是指:含有一个web文件夹(含有WEB-INF、web.xml的文件夹),如下图所示。
获取ServletContext对象
// 方法一
ServletContext context = getServletContext();
// 方法二
ServletContext context = getServletConfig().getServletContext();
解释方法二:
TODO:不明白???通过getServletConfig()
可以返回一个config
对象,
public ServletContext getServletContext() {
return this.getServletConfig().getServletContext();
}
ServletContext 类的四个作用
- 获取 web.xml 中配置的上下文参数
context-param
–context.getInitParameter()
- 获取当前的工程路径–
context.getContextPath()
- 获取工程部署后在服务器硬盘上的绝对路径–`context.getContextPath()``
- 像 Map 一样存取数据–
setAttribute()、getAttribute()、removeAttribute()
测试 ServletContext 的作用
- 获取 web.xml 中配置的上下文参数 context-param
自定义的 Servlet 程序代码
ServletContext context = getServletContext();
// 获取web.xml文件中的上下文信息,通过 param-name 获取 param-value
System.out.println("context-param 参数username的值是:" + context.getInitParameter("context"));
System.out.println("context-param 参数username的值是:" + context.getInitParameter("username"));
本文所有java代码都写在doGet()方法中
<!--context-param是上下文参数-->
<context-param>
<param-name>context</param-name>
<param-value>123456</param-value>
</context-param>
<context-param>
<param-name>username</param-name>
<param-value>hahah</param-value>
</context-param>
注意:以上<context-param>
必须写在web.xml文件的最上面(<web-app>
标签后)
输出结果:
context-param 参数username的值是:123456
context-param 参数username的值是:hahah
- 获取当前的工程路径
// 获取当前的工程路径,格式: /工程路径
System.out.println("获取当前工程路径:" + context.getContextPath());
输出:
获取当前工程路径:/webpro
- 获取工程部署后在服务器硬盘上的绝对路径
// 获取工程部署后在服务器硬盘上的绝对路径
System.out.println("获取当前工程绝对路径:" + context.getRealPath("/"));
输出:
获取当前工程绝对路径:F:\Code\webpro\out\artifacts\webpro_war_exploded\
- 像 Map 一样存取数据
存数据 | 取数据 | 删除数据 | |
---|---|---|---|
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
context.setAttribute("key1", "value1");
context.setAttribute("key2", "value2");
System.out.println("key1的值是:" + context.getAttribute("key1"));
System.out.println("key2的值是:" + context.getAttribute("key2"));
context.removeAttribute("key1");
System.out.println("remove key1后 key1的值是:" + context.getAttribute("key1"));
System.out.println("remove key1后 key2的值是:" + context.getAttribute("key2"));
输出:
key1的值是:value1
key2的值是:value2
remove key1后 key1的值是:null
remove key1后 key2的值是:value2
参考文章: