ServletContext是什么
1、A:ServletContext是一个规范
B:ServletContext是一个接口
C:什么是ServletContext?
它是servlet的上下文环境(就是servlet的生存环境)
D:ServletContext在整个应用中只有一个
它是所有的servlet的上下文环境
E:既然ServletContext是整个应用的环境
那么它的生命周期就和服务器启动时创建,
在服务器关闭时回收
所以它的生命周期是整个应用中最大的(排除对象持久化)
F:ServletContext中保存的数据会被所有的servlet共享
G:ServletContext的实现类
org.apache.catalina.core.ApplicationContextFacade
H:ServletContext在使用时通常都叫做application
application就是代表整个应用
J:因为ServletContext被放入的数据会被所有的servlet共享
通常这种可以放数据,也可以取数据的对象,一般叫做域对象
常见的在web编程中的域对象:
ServletContext application
放入的数据可以跨越用户 跨越多个servlet被共享
HttpSession session
放入的数据就是用户的状态数据,可以被多个HttpServletRequest共享 跨越了多个request
HttpServletRequest request
放入的数据在这次请求中可以使用
K:ServletContext常用的方法
getInitParameter(String name) 获取某个初始化参数的值
getInitParameterNames() 获取所有的初始化参数的名称
getRealPath(String path) 获取某个资源在web应用中的绝对路径
getRequestDispatcher(String path) 获取请求转发对象
setAttribute(String name, Object object) 往ServletContext中放数据,并起一个名称便于管理
getAttribute(String name) 通过名称从ServletContext获取数据
removeAttribute(String name) 从ServletContext中直接移除数据
在使用ServletContext来放入和获取数据时,就类似使用一个map
L:通过ServletContext获取初始化参数
getInitParameter(String name) 获取某个初始化参数的值
getInitParameterNames() 获取所有的初始化参数的名称
它的初始化参数和使用ServletConfig获取的某个servlet的初始化参数有区别:
ServletConfig获取的只是专门给某个servlet添加的初始化参数,这个参数别的servlet不能使用
而使用ServletContext添加的初始化参数,实际上是给整个应用添加的初始化参数,所有的servlet都可以使用这个初始化参数
给整个应用添加初始化参数的方法:
在web.xml中添加如下配置信息
<context-param>
<param-name>aaa</param-name>
<param-value>111</param-value>
</context-param>
配置的变量aaa是一个全局初始化参数,它可以被所有的servlet共享
使用getInitParameter(String name)获取某个参数
使用getInitParameterNames() 一次获取多个参数
M:getRealPath(String path) 获取应用中某个资源的真实路径
获取的是某个应用下资源的真实物理路径
获取路径后往往就可以获取这个资源的信息
所以通常这种资源都是配置文件
注意:这个方法如果查找的资源不存在,并不是报错误,而是还是拼接好路径返回
所以在使用getRealPath这个方法时,请一定保证所查找的资源真实存在
N:域对象的相关方法
setAttribute(String name, Object object) 往ServletContext中放数据,并起一个名称便于管理
getAttribute(String name) 通过名称从ServletContext获取数据
removeAttribute(String name) 从ServletContext中直接移除数据
eg:
在HelloServlet中向ServletContext中放入对象user
在HelloServlet02中从ServletContext中获取user对象
要注意的是域方法中 放入的对象会丢失类型,最终都是Object 需要类型转换
O:在实际编程中ServletContext的使用时机
定义整个应用的全局初始化参数
把ServletContext当做域对象使用