解析来自ServletContext资源[/WEB-INF/applicationContext.xml]的XML文档;

8 浏览
0 Comments

解析来自ServletContext资源[/WEB-INF/applicationContext.xml]的XML文档;

我在控制台中得到了一些错误,我将在下面发布。我正在使用eclipse,并清理了项目,刷新了目标,清理了tomcat服务器,所以追踪或其他问题不是问题。

控制台错误:

严重:上下文初始化失败
org.springframework.beans.factory.BeanDefinitionStoreException: 从ServletContext资源[/WEB-INF/applicationContext.xml]解析XML文档时出错;嵌套异常是java.io.FileNotFoundException: 无法打开ServletContext资源[/WEB-INF/applicationContext.xml]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4772)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
原因:java.io.FileNotFoundException: 无法打开ServletContext资源[/WEB-INF/applicationContext.xml]
    at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
    ... 21 more
Apr 14, 2015 7:57:43 PM org.apache.catalina.core.StandardContext listenerStart
严重:将上下文初始化事件发送到类org.springframework.web.context.ContextLoaderListener的监听器实例时出错
org.springframework.beans.factory.BeanDefinitionStoreException: 从ServletContext资源[/WEB-INF/applicationContext.xml]解析XML文档时出错;嵌套异常是java.io.FileNotFoundException: 无法打开ServletContext资源[/WEB-INF/applicationContext.xml]
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4772)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5196)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
原因:java.io.FileNotFoundException: 无法打开ServletContext资源[/WEB-INF/applicationContext.xml]
    at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
    ... 21 more
Apr 14, 2015 7:57:43 PM org.apache.catalina.core.StandardContext startInternal
严重:错误listenerStart
Apr 14, 2015 7:57:43 PM org.apache.catalina.core.StandardContext startInternal
严重:由于之前的错误,上下文[/offers]启动失败
Apr 14, 2015 7:57:43 PM org.apache.catalina.core.ApplicationContext log
信息:关闭Spring根WebApplicationContext
Apr 14, 2015 7:57:43 PM org.springframework.web.context.support.XmlWebApplicationContext doClose
信息:关闭Root WebApplicationContext:启动日期[Tue Apr 14 19:57:43 CEST 2015];上下文层次结构的根
Apr 14, 2015 7:57:43 PM org.springframework.web.context.support.XmlWebApplicationContext doClose
警告:在处理ContextClosedEvent的ApplicationListener中抛出异常
java.lang.IllegalStateException: 未初始化的ApplicationEventMulticaster - 在通过上下文广播事件之前调用'refresh'
    at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:344)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:869)
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:836)
    at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:579)
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:115)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4813)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5413)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Apr 14, 2015 7:57:43 PM org.springframework.web.context.support.XmlWebApplicationContext doClose
警告:在关闭上下文时从LifecycleProcessor中抛出异常
java.lang.IllegalStateException: 未初始化的LifecycleProcessor - 在通过上下文调用生命周期方法之前调用'refresh'
    at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:357)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:877)
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:836)
    at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:579)
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:115)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4813)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5413)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Apr 14, 2015 7:57:43 PM org.apache.catalina.core.StandardContext listenerStop
严重:将destroyed事件发送到类org.springframework.web.context.ContextLoaderListener的监听器实例时出错
java.lang.IllegalStateException: BeanFactory未初始化或已关闭 - 在通过ApplicationContext访问bean之前调用'refresh'
    at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:170)
    at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:908)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:884)
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:836)
    at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:579)
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:115)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4813)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5413)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Apr 14, 2015 7:57:43 PM org.apache.coyote.AbstractProtocol start
信息:正在启动ProtocolHandler ["http-nio-8080"]
Apr 14, 2015 7:57:43 PM org.apache.coyote.AbstractProtocol start
信息:正在启动ProtocolHandler ["ajp-nio-8009"]
Apr 14, 2015 7:57:43 PM org.apache.catalina.startup.Catalina start
信息:服务器在2475毫秒内启动

web.xml



    Spring_Project
    
        index.html
        index.htm
        index.jsp
        default.html
        default.htm
        default.jsp
    
    
        offers
        offers
        offers
        org.springframework.web.servlet.DispatcherServlet
        1
    
    
        offers
        /
    
    Database
    
        DB Connection
        jdbc/Spring_Tutorial
        javax.sql.DataSource
        Container
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
        ContextConfigLocation
        
            classpath:com/learnspring/config/daoContext.xml
            classpath:com/learnspring/config/offersService.xml
        
    

daoContext.xml



    
    
    
    
    

offersService



    
    

offersController

package com.learnspring.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.learnspring.datasource.DAO.Offer;
import com.learnspring.service.OffersService;
@Controller
public class OffersController {
    private OffersService offersService;
    @Autowired
    public void setOffersService(OffersService offersService) {
        this.offersService = offersService;
    }
    @RequestMapping("/")
    public String getHome(Model model) {
        List offers = offersService.getCurrent();
        model.addAttribute("offers", offers);
        return "home";
    }
}

offersService.java

package com.learnspring.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.learnspring.datasource.DAO.Offer;
import com.learnspring.datasource.DAO.OfferDAO;
@Service("offersService")
public class OffersService {
    private OfferDAO offerDAO;
    @Autowired
    public void setOfferDAO(OfferDAO offerDAO) {
        this.offerDAO = offerDAO;
    }
    public List getCurrent() {
        return offerDAO.getOffers();
    }
}

home.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>




Insert title here


    Hello World from JSP...
    
    Id ${row.id}
    Name ${row.name}
    Name ${row.email}
    Name ${row.text}
    


0
0 Comments

默认情况下,ContextLoaderListener尝试读取contextConfigLocation参数,如果该参数不存在,则尝试查找"/WEB-INF/applicationContext.xml"。因此,ContextLoaderListener与以下配置结合使用。

为了在不同文件夹下指定不同的上下文,您可以在web.xml中使用以下配置。


    contextConfigLocation
    /WEB-INF/spring/application-context.xml

深入了解详细信息,请参考此链接:[http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/web/context/ContextLoader.html](http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/web/context/ContextLoader.html)。

0
0 Comments

问题原因:在使用ContextLoaderListener加载文件时,如果同时有DispatcherServlet存在,会导致解析XML文档时出现问题。

解决方法:可以选择以下两种方法来解决该问题:

1. 删除DispatcherServlet,只使用ContextLoaderListener来加载文件。

2. 使用下面的方法来加载文件:


    offers
    org.springframework.web.servlet.DispatcherServlet
    
        contextConfigLocation
        classpath:com/learnspring/config/daoContext.xml
            classpath:com/learnspring/config/offersService.xml
    
    1

以上就是问题的原因和解决方法。

0