【Web】ServletContext与ServletConfig


       在Servlet相关的对象中还有一个ServletContext对象,很多时候我们分不清楚一些长得像的东东,是因为我们不了解它们的来历.解除疑惑,我们先来看看这个对象是什么时候产生的.

 

        先来看个简单的图:


            技术分享


        容器启动一个Web应用时为之创建ServletContext对象,每个Web应用都有唯一的ServletContext对象,它相当于Servlet们与容器通信的接口,管理访问容器的各种资源.,Web应用范围内共享数据,访问当前Web应用的资源,访问容器中的其它应用,访问服务器端的文件系统资源等.

 

        而ServletConfig,也用一张简单的图来表示下:


            技术分享


        容器启动Web应用也就是创建完ServletContext,初始化所有的Filter,对需要启动时就初始化的Servlet进行初始化.对当前不要求初始化的Servlet在请求时初始化.在初始化一个Servlet对象时,创建一个ServletConfig对象,容器调用Servlet的初始化方法时会把包含这个Servlet的初始化参数信息的ServletConfig对象当做参数传进去.

 

       可见,ServletConfigServletContext根本是在不同的时间,因为不同的情况才产生的.下面这张图更清楚地反映了这一先后顺序.


             技术分享


        而且,我们还可以看出这里有一个Web应用,一个ServletContext,却有不止一个ServletServletConfig.这说明了什么呢?

 

           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>



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。