严重:servlet jsp 的 Servlet.service() 抛出异常 java.lang.LinkageError:加载器约束冲突

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18994557/
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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 13:11:10  来源:igfitidea点击:

SEVERE: Servlet.service() for servlet jsp threw exception java.lang.LinkageError: loader constraint violation

javaspringjspservletsspring-mvc

提问by brittanyRey

I'm working with Spring and trying to launch an application using tomcat 7, but I keep getting this error and I couldn't find much on Linkeage Errors in relation to Spring.

我正在使用 Spring 并尝试使用 tomcat 7 启动一个应用程序,但我不断收到此错误,并且在与 Spring 相关的 Linkeage Errors 上找不到太多信息。

Here is the full error:

这是完整的错误:

Sep 24, 2013 7:54:15 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/WEB_002dINF/views/home_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type avax/el/ExpressionFactory; used in the signature
    at org.apache.jsp.WEB_002dINF.views.home_jsp._jspInit(home_jsp.java:23)
    at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
    at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:171)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:356)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

回答by user1724646

I have encountered this same error when deploying an app on tomcat 6.0

我在 tomcat 6.0 上部署应用程序时遇到了同样的错误

I found in the release notes that the el-api JAR file is already included by default. Tomcat is trying to load two different JARs which it does not like.

我在发行说明中发现默认情况下已经包含 el-api JAR 文件。Tomcat 正在尝试加载它不喜欢的两个不同的 JAR。

Delete the el-api JAR in your WEB-INF/lib folder and try again.

删除 WEB-INF/lib 文件夹中的 el-api JAR,然后重试。

回答by user3108159

Was getting the same error when trying the Spring roo application. Thanks to user1724646, the issue was resolved by commenting out the el-api.jar in the pom.xml

尝试 Spring roo 应用程序时遇到相同的错误。感谢 user1724646,问题通过在 pom.xml 中注释掉 el-api.jar 解决

 <!--<dependency>
        <groupId>javax.el</groupId>
        <artifactId>el-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
 </dependency> -->

回答by kpentchev

This problem is caused by two versions of the el-apibeing loaded. By default the Tomcat 7 Commonclassloader loads el-api 2.2More info about this can be found on http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html. The jars loaded by this classloader are located in $CATALINA_HOME/lib. The solution would be to remove the el-api jar from your web application (i.e. WEB-INF/lib).

此问题是由el-api正在加载的两个版本引起的。默认情况下,Tomcat 7Common类加载器会加载el-api 2.2有关此内容的更多信息,请访问http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html。这个类加载器加载的 jars 位于$CATALINA_HOME/lib. 解决方案是从您的 Web 应用程序(即WEB-INF/lib)中删除 el-api jar 。