ApplicationContext介绍

<div id="article_content" class="article_content csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
                    <link rel="stylesheet" href="http://csdnimg.cn/release/phoenix/production/htmledit_views-b569b0e3ef.css">
            <div class="htmledit_views">
                
<p><span style="color:rgb(51,51,51);font-family:'宋体';font-size:14px;line-height:28px;text-indent:28px;background-color:rgb(248,248,248);">如果说BeanFactory是Spring的心脏,那么ApplicationContext就是完整的身躯了。ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。</span></p>
<p><span style="color:rgb(51,51,51);font-family:'宋体';font-size:14px;line-height:28px;text-indent:28px;background-color:rgb(248,248,248);"></span></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
ApplicationContext类体系结构</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件</p>
<img src="http://images.51cto.com/files/uploadimg/20120301/125543616.jpg" alt=""><br><p><span style="color:rgb(51,51,51);font-family:'宋体';font-size:14px;line-height:28px;text-indent:28px;background-color:rgb(248,248,248);"></span></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
和BeanFactory初始化相似,ApplicationContext的初始化也很简单,如果配置文件放置在类路径下,用户可以优先使用ClassPathXmlApplicationContext实现类:</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
<span style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;background-color:inherit;"><span style="margin:0px;padding:0px;border:none;background-color:inherit;">ApplicationContext&nbsp;</span><span class="attribute" style="margin:0px;padding:0px;border:none;color:#FF0000;background-color:inherit;">ctx</span><span style="margin:0px;padding:0px;border:none;background-color:inherit;">&nbsp;=&nbsp;</span></span><span class="attribute-value" style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;color:#0000FF;background-color:inherit;">new</span><span style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;background-color:inherit;">&nbsp;ClassPathXmlApplicationContext("com/baobaotao/context/beans.xml")</span></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;text-indent:28px;background-color:transparent;">
<span style="font-family:'Courier New';">对于ClassPathXmlApplicationContext来说,"com/baobaotao/context/beans.xml"等同于"classpath: com/baobaotao/context/beans.xml"。</span></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;text-indent:28px;background-color:transparent;">
<span style="font-size:14px;"><span style="font-family:'Courier New';">如果配置文件放置在文件系统的路径下,则可以优先考虑使用FilySystemXmlApplicationContext实现类:</span>&nbsp;</span></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;text-indent:28px;background-color:transparent;">
<span style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;background-color:inherit;"><span style="margin:0px;padding:0px;border:none;background-color:inherit;">ApplicationContext&nbsp;</span><span class="attribute" style="margin:0px;padding:0px;border:none;color:#FF0000;background-color:inherit;">ctx</span><span style="margin:0px;padding:0px;border:none;background-color:inherit;">&nbsp;=</span></span><span class="attribute-value" style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;color:#0000FF;background-color:inherit;">new</span><span style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;background-color:inherit;">&nbsp;FileSystemXmlApplicationContext("com/baobaotao/context/beans.xml");
 &nbsp;</span></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;text-indent:28px;background-color:transparent;">
<span style="font-family:'Courier New', monospace;white-space:pre;background-color:inherit;">对于FileSystemXmlApplicationContext来说,“com/baobaotao/context/beans.xml”等同于“file:com/baobaotao/context/beans.xml”。</span></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;text-indent:28px;background-color:transparent;">
</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;还可以指定一组配置文件,Spring会自动将多个配置文件在内存中"整合"成一个配置文件,如下所示:</p>
<p><span style="margin:0px;padding:0px;border:none;background-color:inherit;"><span style="margin:0px;padding:0px;border:none;background-color:inherit;"><span style="font-family:'Courier New', monospace;"><span style="white-space:pre;">ApplicationContext&nbsp;</span></span></span><span class="attribute" style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;color:#FF0000;background-color:inherit;">ctx</span><span style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;background-color:inherit;">&nbsp;=&nbsp;</span><span class="attribute-value" style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;color:#0000FF;background-color:inherit;">new</span><span style="font-family:'Courier New', monospace;white-space:pre;margin:0px;padding:0px;border:none;background-color:inherit;">&nbsp;ClassPathXmlApplicationContext(</span></span><span style="font-family:'Courier New', monospace;white-space:pre;background-color:inherit;">new&nbsp;String[]{"conf/beans1.xml","conf/beans2.xml"});</span></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;text-indent:28px;background-color:transparent;">
当然FileSystemXmlApplicationContext和ClassPathXmlApplicationContext都可以显式使用带资源类型(classpath:或file:)前缀的路径,它们的区别在于如果不显式指定资源类型前缀,将分别将路径解析为文件系统路径和类路径罢了。</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;text-indent:28px;background-color:transparent;">
在获取ApplicationContext实例后,就可以像BeanFactory一样调用getBean(beanName)返回Bean了。ApplicationContext的初始化和BeanFactory有一个重大的区别:BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有单实例的Bean。因此ApplicationContext的初始化时间会比BeanFactory稍长一些,不过稍后的调用则没有"第一次惩罚"的问题。</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;text-indent:28px;background-color:transparent;">
</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
WebApplicationContext类体系结构</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
WebApplicationContext是专门为Web应用准备的,它允许从相对于Web根目录的路径中装载配置文件完成初始化工作。从WebApplicationContext中可以获得ServletContext的引用,整个Web应用上下文对象将作为属性放置到ServletContext中,以便Web应用环境可以访问Spring应用上下文。Spring专门为此提供一个工具类WebApplicationContextUtils,通过该类的getWebApplicationContext(ServletContext
 sc)方法,即可以从ServletContext中获取WebApplicationContext实例。</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
<img src="http://images.51cto.com/files/uploadimg/20120301/130051206.jpg" alt=""><br></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
由于Web应用比一般的应用拥有更多的特性,因此WebApplicationContext扩展了ApplicationContext。WebApplicationContext定义了一个常量ROOT_WEB_APPLICATION_ CONTEXT_ATTRIBUTE,在上下文启动时,WebApplicationContext实例即以此为键放置在ServletContext的属性列表中,因此我们可以直接通过以下语句从Web容器中获取WebApplicationContext:</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute(</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
这正是我们前面所提到的WebApplicationContextUtils工具类getWebApplicationContext (ServletContext sc)方法的内部实现方式。这样Spring的Web应用上下文和Web容器的上下文就可以实现互访,二者实现了融合(图3-10):<br style="clear:both;"></p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
</p>
<table class="ln" cellspacing="0" align="center" border="1" style="color:rgb(51,51,51);font-family:'宋体';font-size:14px;line-height:28px;"><tbody><tr><td bgcolor="#ffffff" style="margin:0px;padding:0px;"><a href="http://images.51cto.com/files/uploadimg/20120301/1252470.jpg" style="color:rgb(0,66,118);text-decoration:none;" target="_blank"></a><a href="http://images.51cto.com/files/uploadimg/20120301/130140625.jpg" style="color:rgb(0,66,118);text-decoration:none;" target="_blank"><img class="fit-image" height="117" alt="" src="http://images.51cto.com/files/uploadimg/20120301/130140625.jpg" width="430" border="0" style="border:medium none;"></a>&nbsp;<a href="http://images.51cto.com/files/uploadimg/20060921/153223104.gif" style="color:rgb(0,66,118);text-decoration:none;" target="_blank"></a></td>
</tr><tr><td class="it" bgcolor="#dddddd" style="margin:0px;padding:0px;">图3-10&nbsp; Spring和Web应用的上下文融合</td>
</tr></tbody></table><br><p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
WebApplicationContext初始化</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
WebApplicationContext的初始化方式和BeanFactory、ApplicationContext有所区别,因为WebApplicationContext需要ServletContext实例,也就是说它必须在拥有Web容器的前提下才能完成启动的工作。有过Web开发经验的读者都知道可以在web.xml中配置自启动的Servlet或定义Web容器监听器(ServletContextListener),借助这两者中的任何一个,我们就可以完成启动Spring Web应用上下文的工作。</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
所有版本的Web容器都可以定义自启动的Servlet,但只有Servlet 2.3及以上版本的Web容器才支持Web容器监听器。有些即使支持Servlet 2.3 的Web服务器,但也不能在Servlet初始化之前启动Web监听器,如Weblogic 8.1、WebSphere 5.x、Oracle OC4J 9.0。</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
Spring分别提供了用于启动WebApplicationContext的Servlet和Web容器监听器:</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
org.springframework.web.context.ContextLoaderServlet;</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
org.springframework.web.context.ContextLoaderListener。</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
两者的内部都实现了启动WebApplicationContext实例的逻辑,我们只要根据Web容器的具体情况选择两者之一,并在web.xml中完成配置就可以了。</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
下面是使用ContextLoaderListener启动WebApplicationContext的具体配置:</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
代码清单3-22&nbsp; 通过Web容器监听器引导</p>
<pre style="margin-top:0px;margin-bottom:1em;padding:0px;color:rgb(51,51,51);font-family:'Courier New', monospace;overflow:auto;line-height:28px;background:rgb(230,230,230);"></pre><ol class="dp-xml" style="margin-left:55px;padding:5px 0px;color:rgb(92,92,92);border:none;margin-top:0px !important;margin-right:0px !important;margin-bottom:1px !important;background:rgb(247,247,247);"><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">… &nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span class="comments" style="margin:0px;padding:0px;border:none;color:rgb(0,130,0);background-color:inherit;">&lt;!--①指定配置文件--&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">context-param</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">contextConfigLocation</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp; &nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-value</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/WEB-INF/baobaotao-dao.xml,&nbsp;/WEB-INF/baobaotao-service.xml &nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-value</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">context-param</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span class="comments" style="margin:0px;padding:0px;border:none;color:rgb(0,130,0);background-color:inherit;">&lt;!--②声明Web容器监听器--&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">listener</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp; &nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">listener-class</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">org.springframework.web.context.ContextLoaderListener&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">listener-class</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">listener</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li></ol>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
ContextLoaderListener通过Web容器上下文参数contextConfigLocation获取Spring配置文件的位置。用户可以指定多个配置文件,用逗号、空格或冒号分隔均可。对于未带资源类型前缀的配置文件路径,WebApplicationContext默认这些路径相对于Web的部署根路径。当然,我们可以采用带资源类型前缀的路径配置,如"classpath*:/baobaotao-*.xml"和上面的配置是等效的。</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
如果在不支持容器监听器的低版本Web容器中,我们可采用ContextLoaderServlet完成相同的工作:</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
代码清单3-23&nbsp; 通过自启动的Servlet引导<br style="clear:both;"></p>
<pre style="margin-top:0px;margin-bottom:1em;padding:0px;color:rgb(51,51,51);font-family:'Courier New', monospace;overflow:auto;line-height:28px;background:rgb(230,230,230);"></pre><ol class="dp-xml" style="margin-left:55px;padding:5px 0px;color:rgb(92,92,92);border:none;margin-top:0px !important;margin-right:0px !important;margin-bottom:1px !important;background:rgb(247,247,247);"><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">… &nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">context-param</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">contextConfigLocation</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp; &nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-value</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">/WEB-INF/baobaotao-dao.xml,&nbsp;/WEB-INF/baobaotao-service.xml&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-value</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">context-param</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">… &nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span class="comments" style="margin:0px;padding:0px;border:none;color:rgb(0,130,0);background-color:inherit;">&lt;!--①声明自动启动的Servlet&nbsp;--&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp; &nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">springContextLoaderServlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-class</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">org.springframework.web.context.ContextLoaderServlet&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-class</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments" style="margin:0px;padding:0px;border:none;color:rgb(0,130,0);background-color:inherit;">&lt;!--②启动顺序--&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">load-on-startup</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">1</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">load-on-startup</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li></ol>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
由于WebApplicationContext需要使用日志功能,用户可以将Log4J的配置文件放置到类路径WEB-INF/classes下,这时Log4J引擎即可顺利启动。如果Log4J配置文件放置在其他位置,用户还必须在web.xml指定Log4J配置文件位置。Spring为启用Log4J引擎提供了两个类似于启动WebApplicationContext的实现类:Log4jConfigServlet和Log4jConfigListener,不管采用哪种方式都必须保证能够在装载Spring配置文件前先装载Log4J配置信息。</p>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
代码清单3-24&nbsp; 指定Log4J配置文件时启动Spring Web应用上下文</p>
<pre style="margin-top:0px;margin-bottom:1em;padding:0px;color:rgb(51,51,51);font-family:'Courier New', monospace;overflow:auto;line-height:28px;background:rgb(230,230,230);"></pre><ol class="dp-xml" style="margin-left:55px;padding:5px 0px;color:rgb(92,92,92);border:none;margin-top:0px !important;margin-right:0px !important;margin-bottom:1px !important;background:rgb(247,247,247);"><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">context-param</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;background-color:inherit;">&nbsp;</span></span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">contextConfigLocation</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-value</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/WEB-INF/baobaotao-dao.xml,/WEB-INF/baobaotao-service.xml &nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-value</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">context-param</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments" style="margin:0px;padding:0px;border:none;color:rgb(0,130,0);background-color:inherit;">&lt;!--①指定Log4J配置文件位置--&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">context-param</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">log4jConfigLocation</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-value</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">/WEB-INF/log4j.properties</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">param-value</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">context-param</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments" style="margin:0px;padding:0px;border:none;color:rgb(0,130,0);background-color:inherit;">&lt;!--②装载Log4J配置文件的自启动Servlet&nbsp;--&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">log4jConfigServlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-class</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">org.springframework.web.util.Log4jConfigServlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-class</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">load-on-startup</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">1</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">load-on-startup</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;springContextLoaderServlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-name</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-class</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">org.springframework.web.context.ContextLoaderServlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet-class</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li style="list-style:decimal outside;border:none;line-height:18px;margin:0px !important;padding:0px 3px 0px 10px !important;"><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">load-on-startup</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">2</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">load-on-startup</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li><li class="alt" style="margin:0px !important;padding:0px 3px 0px 10px !important;color:inherit;list-style:decimal outside;border:none;line-height:18px;"><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&lt;/</span><span class="tag-name" style="margin:0px;padding:0px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">servlet</span><span class="tag" style="margin:0px 0px 10px;padding:7px 0px 4px;border:none;color:rgb(0,102,153);font-weight:bold;background-color:inherit;">&gt;</span><span style="margin:0px;padding:0px;border:none;color:#000000;background-color:inherit;">&nbsp;</span></li></ol>
<p style="margin-top:10px;margin-bottom:10px;padding-top:0px;padding-bottom:0px;color:rgb(51,51,51);text-indent:28px;font-family:'宋体';font-size:14px;line-height:28px;background-color:rgb(248,248,248);">
注意上面我们将log4jConfigServlet的启动顺序号设置为1,而springContextLoaderServlet的顺序号设置为2。这样,前者将先启动,完成装载Log4J配置文件初始化Log4J引擎的工作,紧接着后者再启动。如果使用Web监听器,则必须将Log4jConfigListener放置在ContextLoaderListener的前面。采用以上的配置方式Spring将自动使用XmlWebApplicationContext启动Spring容器,即通过XML文件为Spring容器提供Bean的配置信息。</p>
<br><br>            </div>
                    <script>
                $(".MathJax").remove();
            </script>
            <script type="text/javascript" src="//static.blog.csdn.net/mdeditor/public/res/bower-libs/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
        </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值