本篇博客轉載自 http://user.qzone.qq.com/413670706/blog/1471574740
ContextLoaderListener加載的spring context配置文件成功後,spring 將 applicationContext存放在ServletContext中key值爲"org.springframework.web.context.WebApplicationContext.ROOT"的attribute中。(servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context));可以通過WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)或WebApplicationContextUtils.getWebApplicationContext(servletContext)方法來獲取對應的applicationContext。
DispatcherServlet加載的spring context配置文件成功後,如果 publishContext屬性的值設置爲true的話(缺省爲true) 會將applicationContext存放在org.springframework.web.servlet.FrameworkServlet.CONTEXT. + (servletName)的attribute中。
在每次request請求時,DispatcherServlet會將此applicationContext存放在request中attribute值爲 org.springframework.web.servlet.DispatcherServlet.CONTEXT中(request.setAttribute(WEB_APPLICATION_CONTEXT_ATTRIBUTE,getWebApplicationContext());)。可以通過RequestContextUtils.getWebApplicationContext(servletContext,attrname)或WebApplicationContextUtils.getWebApplicationContext(servletContext,attrname)方法 來獲取對應的applicationContext。
解決此問題的方法:在web.xml 中配置Listenter : org.springframework.web.context.ContextLoaderListener 來加載spring context配置文件