1、ServletContext是什么?

  • javax.servlet.ServletContext接口,Servlet规范

2、了解内容

  • Tomcat服务器对ServletContext接口的实现类完整类名:org.apache.catalina.core.ApplicationContextFacade
    JvaWeb程序员还是只要面向ServletContext接口调用方法即可,不需要关心Tomcat具体的实现

3、ServletContext到底是什么?什么时候被创建?什么时候被销毁?创建几个?

  • ServletContext被翻译为:Servlet上下文【Context一般翻译为上下文】
  • 一个webapp只有一个web.xml文件,web.xml文件在服务器启动阶段被解析
  • 一个webapp只有一个ServletContext对象,ServletContext在服务器启动阶段被实例化
  • ServletContext在服务器关闭的时候会被销毁
  • ServletContext对应的是web.xml文件,是web.xml文件的代表
  • ServletContext对象是所有Servlet对象四周环境的代表【在同一个webapp中,所有Servlet对象共享同一个“四周环境对象”,该对象就是ServletContext】

image.png

  • 所有的用户若共享同一个数据,可以将这个数据放到ServletContext对象中
  • 一般放到ServletContext对象中的数据不建议涉及到修改操作,因为ServletContext对象是多线程共享的一个对象,修改的时候会存在线程安全问题

4、ServletContext接口中有哪些常用的方法?

方法 作用
void setAttribute(String name,Object object) 向ServletContext范围中添加数据(map.put(key,value);)
Object getAttribute(String name) 从ServletContext范围中获取数据(Object value = map.get(key);)
void removeAttribute(String name) 移除ServletContext范围中的数据(map.remove(key);)
String getInitParameter(String name)
Enumeration getInitParameterNames()
String getRealPath(String path)

5、以上方法演示图如下

ServletContext_2.png
ServletContext_3.pngServletContext_4.pngServletContext_5.pngServletContext_6.pngServletContext_7.png

6、Servlet、ServletConfig、ServletContext之间的关系?

  • 一个Servlet对应一个ServletConfig,100个Servlet对应100个ServletConfig
  • 所有的Servlet共享一个ServletContext对象
  • ServletContext范围可以完成跨用户传递数据

    7、ServletContext是一个怎样的范围?

  • 所有用户共享的一个范围对象,我们一般把ServletContext变量命名为:application

  • 可见这个对象代表一个应用内,一个webapp只有一个这样的对象,范围极大!