【问题标题】:Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]无法打开 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml]
【发布时间】:2018-12-18 19:48:01
【问题描述】:

我的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

我的 dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package = "mvc"/>
    <mvc:annotation-driven/>
    <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name = "prefix" value = "/WEB-INF/pages/" />
        <property name = "suffix" value = ".jsp" />
    </bean>
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"/>
    </bean>
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}"/>
        <property name="url" value="${database.url}"/>
        <property name="username" value="${database.user}"/>
        <property name="password" value="${database.password}"/>
    </bean>

    <bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate">
        <property name = "dataSource" ref = "dataSource"/>
    </bean>

    <bean id = "dao" class = "mvc.dao.DAOImpl">
        <property name = "template" ref = "jdbcTemplate"/>
    </bean>

    <bean id = "daoStudent" class = "mvc.dao.daoimplementation.DAOStudentImpl">
        <property name = "template" ref = "jdbcTemplate"/>
    </bean>
    <bean id = "daoObject" class = "mvc.dao.daoimplementation.DAOObjectImpl">
        <property name = "template" ref = "jdbcTemplate"/>
    </bean>
    <bean id = "daoLecturer" class = "mvc.dao.daoimplementation.DAOLecturerImpl">
        <property name = "template" ref = "jdbcTemplate"/>
    </bean>

    <bean id = "daoMark" class = "mvc.dao.daoimplementation.DAOMarkImpl">
        <property name = "template" ref = "jdbcTemplate"/>
    </bean>
    <bean id = "daoSubject" class = "mvc.dao.daoimplementation.DAOSubjectImpl">
        <property name = "template" ref = "jdbcTemplate"/>
    </bean>

    <bean id = "daoLesson" class = "mvc.dao.daoimplementation.DAOLessonImpl">
        <property name = "template" ref = "jdbcTemplate"/>
    </bean>
</beans>

项目结构

当我在 Weblogic 上部署我的应用程序时,它会因以下错误而崩溃

org.springframework.beans.factory.BeanDefinitionStoreException: IOException 从 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml] 解析 XML 文档;嵌套异常是 java.io.FileNotFoundException:无法打开 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml] 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:343) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:223) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:194) 在 org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125) 在 org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94) 在 org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:133) 在 org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:621) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:522) 在 org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:672) 在 org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:638) 在 org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:686) 在 org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:554) 在 org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:499) 在 org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:172) 在 javax.servlet.GenericServlet.init(GenericServlet.java:244) 在 weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:343) 在 weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:294) 在 weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326) 在 weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197) 在 weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203) 在 weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71) 在 weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:99) 在 weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:87) 在 weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:71) 在 weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:57) 在 weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:31) 在 weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:673) 在 weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:612) 在 weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:2064) 在 weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:2041) 在 weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1930) 在 weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3101) 在 weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1843) 在 weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:884) 在 weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360) 在 weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356) 在 weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45) 在 weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138) 在 weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) 在 weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233) 在 weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228) 在 weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45) 在 weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:78) 在 weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:52) 在 weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:752) 在 weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45) 在 weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:262) 在 weblogic.application.internal.EarDeployment.activate(EarDeployment.java:66) 在 weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165) 在 weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90) 在 weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:274) 在 weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:507) 在 weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:53) 在 weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:202) 在 weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:52) 在 weblogic.management.deploy.internal.ConfiguredDeployments$2.doItem(ConfiguredDeployments.java:741) 在 weblogic.management.deploy.internal.parallel.BucketInvoker.invoke(BucketInvoker.java:138) 在 weblogic.management.deploy.internal.ConfiguredDeployments.transitionAppsParallel(ConfiguredDeployments.java:749) 在 weblogic.management.deploy.internal.ConfiguredDeployments.transitionAppsParallel(ConfiguredDeployments.java:702) 在 weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:381) 在 weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:233) 在 weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:219) 在 weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:133) 在 weblogic.server.AbstractServerService.postConstruct(AbstractServerService.java:76) 在 sun.reflect.GeneratedMethodAccessor5.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.glassfish.hk2.utilities.reflection.ReflectionHelper.invoke(ReflectionHelper.java:1287) 在 org.jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:333) 在 org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:375) 在 org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487) 在 org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:305) 在 org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:85) 在 org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2126) 在 org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:116) 在 org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:698) 在 org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:78) 在 org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:212) 在 org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:235) 在 org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:358) 在 org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487) 在 org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:305) 在 org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:85) 在 org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2126) 在 org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:116) 在 org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:90) 在 org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1237) 在 org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1168) 在 weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:670) 在 weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352) 在 weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337) 在 weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57) 在 weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) 在 weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:644) 在 weblogic.work.ExecuteThread.execute(ExecuteThread.java:415) 在 weblogic.work.ExecuteThread.run(ExecuteThread.java:355)

完整日志here

我试着添加这个

<init-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>

然后是这个

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/dispatcher-servlet.xml</param-value>
</context-param>

web.xml,但没有帮助

编辑

我将 servlet 重命名为 DispatcherServlet 并将 dispatcher-servlet.xml 重命名为 DispatcherServlet-servlet.xml,但错误仍然显示 Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]

编辑 2

我创建了新的干净 Spring MVC 项目,但问题仍然存在。我认为问题可能出在Weblogic中,我会尝试重新安装它

【问题讨论】:

  • 您正在使用 maven,从 pom.xml 判断,但是您的结构与 maven 期望的结构不符。修复您的项目结构或修改 pom.xml 中的所有内容以匹配您的结构。 (通常第一件事是最容易做到的)。
  • @M.Deinum,我把项目结构改成了这个,问题还是一样i.gyazo.com/7becbe007b4ea194572fc42b8a467342.png
  • 这仍然是错误的结构...WEB-INF 必须在webapp 中,而不是在webapp/web 中。
  • @M.Deinum,当然,我会尽快重新安装 Weblogic

标签: java spring weblogic web.xml dispatcher


【解决方案1】:

尝试添加以下参数:

即:

<servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/DispatcherServlet-servlet.xml
        </param-value>
    </init-param>
</servlet>

如果 Servlet 被称为 DispatcherServlet 那么 xml 必须根据 Spring 定义被称为 DispatcherServlet-servlet.xml

【讨论】:

  • 正如我在问题中提到的,我已经尝试将其添加到 web.xml,但这没有帮助
  • 假设您在 内的正确位置添加了 。你的战争结构合理吗?
  • 好的。可能这是一个重复的问题,xml 的名称必须有后缀 -servlet stackoverflow.com/questions/14954931/… 您还需要重命名 xml
  • 我将 添加到 标记中,我将 中的 更改为 DispatcherServlet,我将 中的 更改为 DispatcherServlet ,我将 dispatcher-servlet.xml 更改为 DispatcherServlet-servlet.xml 并且错误仍然显示“无法打开 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml]”
  • 如果 Servlet 被称为 DispatcherServlet 那么 xml 必须被称为 DispatcherServlet-servlet.xml 基于 Spring 定义
【解决方案2】:

所以,问题出在 Weblogic 上。我重新安装了它,问题消失了

【讨论】:

    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 2012-06-05
    • 2023-03-15
    • 2015-02-03
    • 2016-04-04
    • 2014-04-16
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多