java HTTP 状态 500 - 实例化 servlet 类 org.springframework.web.servlet.DispatcherServlet 时出错
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/40256447/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
HTTP Status 500 - Error instantiating servlet class org.springframework.web.servlet.DispatcherServlet
提问by viper
Please don't flag this post as a duplicate one because I didn't find any good resource in the relevant question.
请不要将此帖子标记为重复,因为我在相关问题中没有找到任何好的资源。
Technologies used :- Spring MVC 4.3.3.RELEASE Gradle 3.1 Tomcat 9.0
使用的技术:- Spring MVC 4.3.3.RELEASE Gradle 3.1 Tomcat 9.0
I created a dynamic web project and when I run it, I get the following error
我创建了一个动态 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)
It is saying that it could not find the dispatcher servlet class but when I ctrl + click
the dispatcher servlet path in the spring-dispatcher-servlet
, It lands to the spring Dispatcher Servlet class. I could not get the root cause of this problem.
它说它找不到调度程序servlet类,但是当我ctrl + click
在 中的调度程序servlet路径时spring-dispatcher-servlet
,它落在了spring调度程序servlet类。我无法找到这个问题的根本原因。
Here are my web.xml
and spring-dispatcher-servlet.xml
files
这是我的web.xml
和spring-dispatcher-servlet.xml
文件
web.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
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
Project directory
My gradle.build
file
我的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'
}
}
The whole project code can be found in https://github.com/viper-pranish/menu-order
整个项目代码可以在https://github.com/viper-pranish/menu-order找到
Dependencies inside the project structure
项目结构内的依赖关系
回答by Abhishek Adityan
回答by kuhajeyan
as @Denium pointed out you should not mix the spring versions
正如@Denium 指出的,你不应该混合使用 spring 版本
remove compile group: 'org.springframework', name: 'spring', version: '3.2.0.RC1'
from gradle.build
and add
compile group: 'org.springframework', name: 'spring', version: '3.2.0.RC1'
从 gradle.build 中删除并添加
apply plugin: 'war'
and you may to provide your controller url mapping as well
你也可以提供你的控制器 url 映射
<bean name="/index"
class="com.mkyong.common.controller.IndexController" />
回答by Shobhit Mittal
Make sure that you have added all the required Spring jars at both places: in build path as well as WEB-INF/lib folder
确保您已在两个位置添加了所有必需的 Spring jar:在构建路径以及 WEB-INF/lib 文件夹中
回答by Tapan
<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>
Add slf4j dependencies. The problem will resolve. My pom.xml dependencies it resolved the problem.
After adding slf4j if the problem is not resolved, then add Maven Dependency in Deployment Assembly.
添加 slf4j 依赖项。问题将得到解决。我的 pom.xml 依赖项解决了这个问题。
添加slf4j后如果问题没有解决,再在Deployment Assembly中添加Maven Dependency。
回答by Dhanraj Salian
Most probably the necessary Spring MVC related jar files are not loaded and deployed on tomcat startup. But note: these files are in your classpath and hence you are not getting any error in Eclipse IDE during development time. Happens only during runtime. to fix this:- 1)Right-click on project 2)Click on Properties 3)Click on Deployment Assembly Tab 4)Click Add 5)Click on Java Build Path Entries 6)Click on Maven Dependencies 7)Click Finish 8)Redeploy Spring MVC application to Tomcat again 9)Restart Tomcat
很可能在 tomcat 启动时没有加载和部署必要的 Spring MVC 相关 jar 文件。但请注意:这些文件在您的类路径中,因此您在开发期间不会在 Eclipse IDE 中收到任何错误。仅在运行时发生。解决这个问题:- 1)右键单击项目 2)单击属性 3)单击部署程序集选项卡 4)单击添加 5)单击 Java 构建路径条目 6)单击 Maven 依赖项 7)单击完成 8)重新部署 Spring MVC再次应用到Tomcat 9)重启Tomcat