【问题标题】:Grave: Context initialization failed严重:上下文初始化失败
【发布时间】:2012-08-08 16:12:26
【问题描述】:

我正在从头开始创建一个 HelloWorld web/spring 应用程序。我关注了this tutorial,以学习如何使用 mvc 模式。因此,在完成所有步骤并开始运行应用程序后,我在控制台中收到此错误:

严重:上下文初始化失败 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 来自 ServletContext 资源的 XML 文档中的第 11 行 [/WEB-INF/dispatcher-servlet.xml] 无效;嵌套异常是 org.xml.sax.SAXParseException;行号:11;列号:100; cvc-complex-type.2.4.c

搜索 SO 问题,我发现了一些类似下面的威胁,但没有解决我的错误。

所以,我推断可能是 WEB-INF 文件夹中的 dispatcher-servlet.xml。这个 xml 看起来像:

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


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

        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="interceptors">
            <list>
                <ref local="localeChangeInterceptor" />
            </list>
        </property>

        <property name="urlMap">
            <map>
                <entry key="/hello.html">
                    <ref bean="helloController" />
                </entry>
            </map>
        </property>

    </bean>

    <bean id="helloController" class="controllers.HelloController">
    </bean>

    <bean id="localeChangeInterceptor"
        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">

        <property name="paramName" value="hl" />

    </bean>

    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    </bean>

</beans>

最后这些是我包含的罐子:

commons-logging-1.1.1.jar

org.springframework.aop-3.1.2.RELEASE.jar
org.springframework.asm-3.1.2.RELEASE.jar
org.springframework.aspects-3.1.2.RELEASE.jar
org.springframework.beans-3.1.2.RELEASE.jar
org.springframework.context-3.1.2.RELEASE.jar
org.springframework.context.support-3.1.2.RELEASE.jar
org.springframework.core-3.1.2.RELEASE.jar
org.springframework.expression-3.1.2.RELEASE.jar
org.springframework.instrument-3.1.2.RELEASE.jar
org.springframework.instrument.tomcat-3.1.2.RELEASE.jar
org.springframework.jdbc-3.1.2.RELEASE.jar
org.springframework.jms-3.1.2.RELEASE.jar
org.springframework.orm-3.1.2.RELEASE.jar
org.springframework.oxm-3.1.2.RELEASE.jar
org.springframework.spring-library-3.1.2.RELEASE.libd
org.springframework.test-3.1.2.RELEASE.jar
org.springframework.transaction-3.1.2.RELEASE.jar
org.springframework.web-3.1.2.RELEASE.jar
org.springframework.web.portlet-3.1.2.RELEASE.jar
org.springframework.web.servlet-3.1.2.RELEASE.jar
org.springframework.web.struts-3.1.2.RELEASE.jar

spring-webmvc-3.0.5.RELEASE.jar

提前致谢

编辑 1:

修改@Biju Kunjummen后,现在看来问题是bean声明中有一个comflic:

Grave: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'urlMapping' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot resolve reference to bean 'helloController' while setting bean property 'urlMap' with key [TypedStringValue: value [/hello.html], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'helloController' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [controllers.HelloController]: Constructor threw exception; nested exception is java.lang.Error: Unresolved compilation problems: 
    The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
    Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
    String cannot be resolved to a type

我已经检查了控制器并且在src/controllers dir 中看起来很好:

package controllers;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request,
              HttpServletResponse response) throws ServletException, IOException {

              String Mess = "Hello World!";

              ModelAndView modelAndView = new ModelAndView("hello");
              modelAndView.addObject("message", Mess);

              return modelAndView;
              }

}

【问题讨论】:

标签: spring jakarta-ee spring-mvc


【解决方案1】:

你有 http://www.springframework.org/schema/mvc 作为默认值,但你的 bean 定义属于 http://www.springframework.org/schema/beans 命名空间,这应该是问题所在。

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


<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix">
        <beans:value>/WEB-INF/jsp/</beans:value>
    </beans:property>

.....

或者以这种方式将 beans 命名空间设为默认值:

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


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

        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

【讨论】:

  • 现在错误看起来不同了。我已经更新了帖子以详细说明结果,但我同意你的看法,错误在dispatcher-servlet.xml 文件中
  • 哦,我找到了一个有用的链接:forum.springsource.org/…。所以现在错误放在我的控制器上。我认为现在是接受答案的时候了。非常感谢你和其他人。
猜你喜欢
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 2017-03-17
  • 2014-09-13
  • 2015-09-09
  • 2011-11-23
  • 2016-03-08
相关资源
最近更新 更多