HTTP状态500 - 实例化servlet类org.springframework.web.servlet.DispatcherServlet时出错

时间:2016-10-26 07:42:45

标签: java spring jsp spring-mvc servlets

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

使用的技术: -     Spring MVC 4.3.3.RELEASE     Gradle 3.1     Tomcat 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)

它说无法找到调度程序servlet类,但是当ctrl + click spring-dispatcher-servlet中的调度程序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

enter image description here

我的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

项目结构内的依赖关系

enter image description here

5 个答案:

答案 0 :(得分:2)

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

enter image description here

答案 1 :(得分:1)

正如@Denium所指出的,你不应该混合弹簧版本

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

apply plugin: 'war'

您也可以提供控制器网址映射

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

<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依赖项。

答案 4 :(得分:0)

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

相关问题