0

好的,感谢您帮助解答最后一个问题。这是我的新错误和下面的代码。错误中的粗体文本是我唯一关心的修复,因为这是唯一的错误。

[Thread-36] ContextLoader ERROR 上下文初始化失败 org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/spring/servlet-context.xml]; 嵌套异常是 java.io.FileNotFoundException: 无法打开 ServletContext 资源 [/spring/servlet-context.xml] 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 在 org.springframework.beans.factory 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) .support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(Abs .java:149) 在 org.springframework.web 的 org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)。context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:第 467 章.initWebApplicationContext(ContextLoader.java:197) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4701) 在 org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5204) 在 org.apache.catalina.core.StandardContext$1.call( StandardContext.java:5199) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)在 java.lang.Thread.run(Unknown Source) 引起:java.io.FileNotFoundException: 无法在 org.springframework.web.context.support.ServletContextResource.getInputStream 打开 ServletContext 资源 [/spring/servlet-context.xml] (ServletContextResource.java:117) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader。loadBeanDefinitions(XmlBeanDefinitionReader.java:328) ... 19 更多 2013 年 10 月 16 日上午 7:44:51 org.apache.catalina.core.StandardContext startInternal 严重:错误 listenerStart 2013 年 10 月 16 日上午 7:44:51 org.apache .catalina.core.StandardContext startInternal SEVERE: Context [/mdimgmtsys-1.0-SNAPSHOT] 由于先前的错误,启动失败

现在代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">


<context-param>
    <param-name>contextAppConfigLocation</param-name>
    <param-value>app-context.xml classpath*:app-context.xml</param-value>
</context-param>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/spring/servlet-context.xml classpath*:servlet-context.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Enables Spring Security -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextAppConfigLocation</param-name>
        <param-value>app-context.xml</param-value>            
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>contextServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/spring/servlet-context.xml</param-value>

    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>          
<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
    <servlet-name>contextServlet</servlet-name>
    <url-pattern>/</url-pattern>        
</servlet-mapping>    
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>        
</web-app>

我所做的一切都无法在 Tomcat 中启动应用程序。

4

5 回答 5

5

Spring Web 项目中的 Application Context 和 Servlet Context 是有区别的。我们用来配置Application Context,用法和你的用法一样

<context-param>
    <param-name>contextAppConfigLocation</param-name>
    <param-value>classpath:app-context.xml</param-value>
</context-param>

对于 Servlet 上下文,默认 web 容器会尝试在 WEB-INF 目录中找到一个#servlet-name#-servlet.xml,所以对于您的问题,您需要将您的问题移动到 WEB-INF 目录并将它们的名称更改为相应的名称(contextServlet-servlet.xml, appServlet-servlet.xml)

于 2014-02-13T01:09:01.160 回答
0

正如错误所说,这是 servlet-context.xml 文件位置的问题。更改路径,它应该可以正常工作。

于 2013-10-16T11:55:38.513 回答
0

如果要更改 spring 配置文件的位置和命名约定,则应contextConfigLocationDispatcherServlet定义中添加一个,例如:

<servlet>
  <servlet-name>appServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:app-context.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

请注意,您app-context.xml应该位于 src 文件夹的根目录中,否则您必须在类路径中指定路径或 WEB-INF 中的路径,不带classpath:前缀。

有关更多详细信息,请参阅此答案:https ://stackoverflow.com/a/14956773/120794 。

于 2015-04-28T05:43:21.477 回答
0

我通过将servlet.xml正确的位置(即WEB-INF文件夹下)解决了同样的错误。你也可以试试。

于 2014-09-24T11:34:24.630 回答
0

几个月前我也有同样的问题。这解决了我使用 Maven 而不是下载的 Spring 版本和 web.xml 中的一些更改的问题。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SpringWEB1</groupId>
  <artifactId>SpringWEB1</artifactId>
  <version>1</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
  </dependencies>
</project>

控制器.java

package com.jmtm.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@org.springframework.stereotype.Controller
public class Controller {

    @RequestMapping("/hi")
    public ModelAndView hi(){
        return new ModelAndView("Hello", "msg", "Hello user.");
    }

}

spring-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:c="http://www.springframework.org/schema/c"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util"
    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-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd">

    <context:component-scan base-package="com.jmtm.controller"></context:component-scan>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

</beans>

解决方案中最重要的部分,在 web.xml 中包含 servlet 调度程序(AKA spring-servlet.xml)的路径

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SpringWEB1</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

当我试图解决这个问题时,发生了一些奇怪的事情。任何从maven.springframework.org/release/org/springframework/spring下载的 Spring 版本都会给我带来很多问题(Tomcat 找不到 servlet,Spring 停止 Tomcat,Eclipse 无法启动服务器 {weird})许多问题找到许多部分解决方案。我希望这对你有用。

作为额外的帮助,在 Eclipse 中,从 Eclipse Marketplace 下载 Spring STS Tool for Eclipse,这将帮助您创建配置文件 (servlet.xml) 并在 web.xml 文件中为 servlet 编写代码。

于 2015-08-22T01:21:35.050 回答