标签:
在Servlet相关的对象中还有一个ServletContext对象,很多时候我们分不清楚一些长得像的东东,是因为我们不了解它们的来历.解除疑惑,我们先来看看这个对象是什么时候产生的.
先来看个简单的图:
容器启动一个Web应用时为之创建ServletContext对象,每个Web应用都有唯一的ServletContext对象,它相当于Servlet们与容器通信的接口,管理访问容器的各种资源.如,在Web应用范围内共享数据,访问当前Web应用的资源,访问容器中的其它应用,访问服务器端的文件系统资源等.
而ServletConfig呢,也用一张简单的图来表示下:
容器启动Web应用也就是创建完ServletContext后,初始化所有的Filter,对需要启动时就初始化的Servlet进行初始化.对当前不要求初始化的Servlet在请求时初始化.在初始化一个Servlet对象时,创建一个ServletConfig对象,容器调用Servlet的初始化方法时会把包含这个Servlet的初始化参数信息的ServletConfig对象当做参数传进去.
可见,ServletConfig和ServletContext根本是在不同的时间,因为不同的情况才产生的.下面这张图更清楚地反映了这一先后顺序.
而且,我们还可以看出这里有一个Web应用,一个ServletContext,却有不止一个Servlet和ServletConfig.这说明了什么呢?
ServletContext能够在Web应用范围内活动,Web应用范围是什么意思呢?第一,表示由Web应用的生命周期构成的时间段.第二,表示在Web应用的生命周期内所有Web组件的集合.
ServletConfig可以在特定Servlet范围内活动,这么说,从该Servlet实例化ServletConfig就跟着它,其它Servlet访问不到这个ServletConfig.
想想我们之前在web.xml中的配置,有<context-param> 和<servlet>两个元素.如果一个参数要在整个Web应用中用呢,就写在<context-param> 节点下,如果只在一个Servlet中用呢,就写在<servlet>节点中.回忆下.
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/applicationContext-common.xml</param-value> </context-param>
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml,classpath:config/applicationContext-common.xml</param-value> </init-param> </servlet>
【Web】ServletContext与ServletConfig
标签:
原文地址:http://blog.csdn.net/zhuanzhe117/article/details/45398965