在Servlet相干的对象中还有1个ServletContext对象,很多时候我们分不清楚1些长得像的东东,是由于我们不了解它们的来历.消除疑惑,我们先来看看这个对象是甚么时候产生的.
先来看个简单的图:
容器启动1个Web利用时为之创建ServletContext对象,每一个Web利用都有唯1的ServletContext对象,它相当于Servlet们与容器通讯的接口,管理访问容器的各种资源.如,在Web利用范围内同享数据,访问当前Web利用的资源,访问容器中的其它利用,访问服务器真个文件系统资源等.
而ServletConfig呢,也用1张简单的图来表示下:
容器启动Web利用也就是创建完ServletContext后,初始化所有的Filter,对需要启动时就初始化的Servlet进行初始化.对当前不要求初始化的Servlet在要求时初始化.在初始化1个Servlet对象时,创建1个ServletConfig对象,容器调用Servlet的初始化方法时会把包括这个Servlet的初始化参数信息的ServletConfig对象当作参数传进去.
可见,ServletConfig和ServletContext根本是在不同的时间,由于不同的情况才产生的.下面这张图更清楚地反应了这1前后顺序.
而且,我们还可以看出这里有1个Web利用,1个ServletContext,却有不止1个Servlet和ServletConfig.这说明了甚么呢?
ServletContext能够在Web利用范围内活动,Web利用范围是甚么意思呢?第1,表示由Web利用的生命周期构成的时间段.第2,表示在Web利用的生命周期内所有Web组件的集合.
ServletConfig可以在特定Servlet范围内活动,这么说,从该Servlet实例化ServletConfig就随着它,其它Servlet访问不到这个ServletConfig.
想一想我们之前在web.xml中的配置,有<context-param> 和<servlet>两个元素.如果1个参数要在全部Web利用中用呢,就写在<context-param> 节点下,如果只在1个Servlet中用呢,就写在<servlet>节点中.回想下.