HTTP状态500-java.lang.LinkageError

HTTP状态500-java.lang.LinkageError,java,spring,maven,Java,Spring,Maven,我正在使用spring框架和maven工具使用java开发一个MVC web应用程序 当我运行应用程序时,出现以下错误 HTTP Status 500 - java.lang.LinkageError: loader constraint violation: when resolving method "org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax/servlet/ServletConfi

我正在使用spring框架和maven工具使用java开发一个MVC web应用程序

当我运行应用程序时,出现以下错误

HTTP Status 500 - java.lang.LinkageError: loader constraint violation: when resolving method 
"org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(Ljavax/servlet/ServletConfig;)Lorg/apache/tomcat/InstanceManager;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, 
org/apache/jsp/redirect_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for the method's defining class, 
org/apache/jasper/runtime/InstanceManagerFactory, have different Class objects for the type org/apache/tomcat/InstanceManager used in the signature

在WEB应用程序的
WEB-INF/lib
文件夹中有特定于服务器的jar文件。例如:jsp-api.jar、el-api.jar、servlet-api.jar等。如果使用maven进行依赖关系管理,则需要删除并排除所有这些


删除后,如果代码中出现编译错误,则从项目属性添加服务器运行时。

在WEB应用程序的
WEB-INF/lib
文件夹中有特定于服务器的jar文件。例如:jsp-api.jar、el-api.jar、servlet-api.jar等。如果使用maven进行依赖关系管理,则需要删除并排除所有这些


删除它之后,如果代码中出现编译错误,则从项目属性添加服务器运行时。

war文件中是否有servlet-api.jar?请在部署期间删除它,因为每个Web服务器都有自己的servlet api实现。因此,只在代码中使用它进行编译。

是否有servlet-api.jar是war文件的一部分?请在部署期间删除它,因为每个Web服务器都有自己的servlet api实现。因此,只在代码中使用它进行编译。

根据您发布的错误,加载org/apache/jsp/redirect_jsp的类加载器,以及
org/apache/jasper/runtime/InstanceManagerFactory的类型org/apache/tomcat/InstanceManager具有不同的类对象,这意味着您正在引用一个jar,该jar在两个不同的类加载器中包含org.apache.tomcat.InstanceManager,并且这些加载器具有委托关系。基于类对象的完全限定类名和加载程序,类对象是唯一的

这是一个关于这类错误的非常好的例子


您需要了解如何加载该类两次,并修改设置,以便只加载一次。

根据您发布的错误,加载org/apache/jsp/redirect\u jsp的类加载器,以及
org/apache/jasper/runtime/InstanceManagerFactory的类型org/apache/tomcat/InstanceManager具有不同的类对象,这意味着您正在引用一个jar,该jar在两个不同的类加载器中包含org.apache.tomcat.InstanceManager,并且这些加载器具有委托关系。基于类对象的完全限定类名和加载程序,类对象是唯一的

这是一个关于这类错误的非常好的例子


您需要了解如何加载该类两次,并修改设置,以便只加载一次。

如前几篇文章所述,这应该是由于您的项目中存在冲突的库(jsp api、servlet api、el api等),您需要排除这些库

如果您使用的是SpringBoot,那么在生成要在tomcat中部署的war时,需要排除tomcat libs

例如

<exclusion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
<exclusion>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-el</artifactId>
</exclusion>

org.springframework.boot
弹簧启动机tomcat
org.apache.tomcat.embed
tomcat嵌入式el

如前几篇文章所述,这应该是由于项目中的库(jsp api、servlet api、el api等)存在冲突,您需要排除这些库

如果您使用的是SpringBoot,那么在生成要在tomcat中部署的war时,需要排除tomcat libs

例如

<exclusion>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
<exclusion>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-el</artifactId>
</exclusion>

org.springframework.boot
弹簧启动机tomcat
org.apache.tomcat.embed
tomcat嵌入式el

应用程序在本地运行,但发生部署到服务器错误。您是否在两个位置使用相同的服务器?提取war文件并检查WEB-INF/lib文件夹中是否存在servlet api jar。应用程序在本地运行,但发生部署到服务器错误。您是否在两个位置使用相同的服务器?提取war文件并检查WEB-INF/lib文件夹中是否存在servlet api jar。应用程序在本地运行,但将发生部署到服务器错误。如何解决此问题。请帮助我应用程序在本地运行,但将发生部署到服务器错误。如何解决此问题。请帮帮我