【问题标题】:HTTP Status 500 - Error instantiating servlet class org.springframework.web.servlet.DispatcherServletHTTP 状态 500 - 实例化 servlet 类 org.springframework.web.servlet.DispatcherServlet 时出错
【发布时间】:2017-03-08 11:24:48
【问题描述】:

请不要将此帖子标记为重复帖子,因为我在相关问题中没有找到任何好的资源。

使用的技术:- Spring MVC 4.3.3.RELEASE 摇篮 3.1 雄猫 9.0

我创建了一个动态 Web 项目,当我运行它时,我收到以下错误

HTTP Status 500 - Error instantiating servlet class org.springframework.web.servlet.DispatcherServlet

type Exception report

message Error instantiating servlet class org.springframework.web.servlet.DispatcherServlet

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class org.springframework.web.servlet.DispatcherServlet
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1102)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:788)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1485)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)
root cause

java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1299)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1133)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1102)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:788)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1485)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:745)

说是找不到dispatcher servlet 类,但是当我ctrl + clickspring-dispatcher-servlet 中的dispatcher servlet 路径时,它会降落到spring Dispatcher Servlet 类。我无法找到这个问题的根本原因。

这是我的 web.xmlspring-dispatcher-servlet.xml 文件

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>MenuOrder</display-name>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>spring-dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
  </servlet>

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

</web>

spring-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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id = "HandlerMapping" class = "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

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

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

</beans>

Project directory

我的gradle.build 文件

allprojects{
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
group = 'com'
version = '0.0.1-SNAPSHOT'
}

subprojects{
    tasks.withType(JavaCompile){
    options.encoding = 'UTF-8'
    }
}



allprojects {
    task hello { task -> println "I'm $task.project.name" }
}


allprojects{

repositories {
    mavenLocal()
    jcenter()
    mavenCentral()

}


    dependencies {

        // The production code uses the SLF4J logging API at compile time
    //    compile 'org.slf4j:slf4j-api:1.7.21'


        //spring web
        compile group: 'org.springframework', name: 'spring-webmvc', version: '4.3.3.RELEASE'

        // spring core
        compile group: 'org.springframework', name: 'spring-core', version: '4.3.3.RELEASE'

        // spring context support
        compile group: 'org.springframework', name: 'spring-context-support', version: '4.3.3.RELEASE'


        // ORM dependencies

        // spring jpa
        compile group: 'org.springframework.data', name: 'spring-data-jpa', version: '1.10.4.RELEASE'

        // hibernate-entity manager
        compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.2.2.Final'

        // End of ORM dependencies

        // postgres connector
        compile group: 'org.postgresql', name: 'postgresql', version: '9.4-1200-jdbc41'

        // Junit
        compile group: 'junit', name: 'junit', version: '4.12'

        // servlet
        compile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.0-b01'

        compile group: 'javax.el', name: 'javax.el-api', version: '2.2.1'

        compile group: 'org.springframework', name: 'spring', version: '3.2.0.RC1'

        }
        }

整个项目代码可以在 https://github.com/viper-pranish/menu-order

项目结构中的依赖关系

【问题讨论】:

  • 你能添加你的pom吗
  • 我想说要么你还没有将所需的库添加到你的战争中(向我们展示 WEB-INF/lib 的内容)
  • @Narrim lib 文件夹内什么都没有
  • 首先,删除org.springframework:spring 依赖项...您正在混合使用 Spring 版本,切勿混合框架的版本。旁边没有spring-version 这样的东西,所以不确定你期望哪个spring-core 版本,但那个根本不存在。您的最后一个错误是您只应用了 java 插件,而您想要一个 Web 应用程序,您还需要添加 war 插件。
  • @M.Deinum 我在子项目的 gradle 文件中添加了 warjetty 插件。而spring-version 是我在gradle.properties 文件中设置的变量。

标签: java spring jsp spring-mvc servlets


【解决方案1】:

很可能必要的 Spring MVC 相关 jar 文件没有在 tomcat 启动时加载和部署。但请注意:这些文件位于您的类路径中,因此在开发期间您不会在 Eclipse IDE 中遇到任何错误。仅在运行时发生。 解决这个问题:- 1)右键单击项目 2)点击属性 3)单击部署程序集选项卡 4)点击添加 5)单击Java构建路径条目 6)点击Maven依赖 7)点击完成 8)再次将Spring MVC应用重新部署到Tomcat 9)重启Tomcat

【讨论】:

    【解决方案2】:
    <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.1.7.RELEASE</version>
                <exclusions>
                    <exclusion>
                        <artifactId>commons-logging</artifactId>
                        <groupId>commons-logging</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.7.12</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-web</artifactId>
                <version>4.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-config</artifactId>
                <version>4.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-taglibs</artifactId>
                <version>4.0.2.RELEASE</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.1.7.RELEASE</version>
            </dependency>
    
        </dependencies>
    
    1. 添加 slf4j 依赖项。问题将解决。我的 pom.xml 依赖项解决了这个问题。

    2. 添加slf4j后如果问题没有解决,则在Deployment Assembly中添加Maven Dependency。

    【讨论】:

    • 欢迎来到 SO,Tapan!此处不鼓励仅使用代码的答案,因为它们无法深入了解问题的解决方式。请更新您的解决方案,说明您的代码如何解决手头的问题。
    • DispatcherServlet 有 import { import org.apache.commons.logging.Log;导入 org.apache.commons.logging.LogFactory};当 DispactehrServlet 类加载它需要的日志 jar 时。如果我们在第 522 行检查错误 AuthenticatorBase.class 的 statck 跟踪它的开始日志记录,那么它需要一个与其他日志相同的日志记录。
    • 添加slf4j后如果问题没有解决,则在Deployment Assembly中添加Maven Dependency。
    【解决方案3】:

    确保您已在两个位置添加了所有必需的 Spring jar: 在构建路径以及 WEB-INF/lib 文件夹中

    【讨论】:

      【解决方案4】:

      你可以简单地在web.xml的标签下添加标签,它会起作用。

      【讨论】:

      • 欢迎来到 Stack Overflow!如果您有代码要与我们分享,请不要将其发布为图片。您可以将其添加到您的帖子和format it as code
      【解决方案5】:

      正如@Denium 指出的,您不应该混合使用春季版本

      从 gradle.build 中删除 compile group: 'org.springframework', name: 'spring', version: '3.2.0.RC1' 并添加

      apply plugin: 'war'
      

      您也可以提供您的控制器 url 映射

      <bean name="/index"
                  class="com.mkyong.common.controller.IndexController" />
      

      【讨论】:

      • 照你说的做了,但我仍然遇到同样的问题。不仅仅是这个 gradle 项目面临错误。我也创建了一个 Maven 项目,它也给了我同样的错误。
      • @viper 你在控制台堆栈跟踪中看到了什么
      猜你喜欢
      • 2017-12-21
      • 2017-08-02
      • 2017-02-20
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多