java.lang.LinkageError:javax.servlet.jsp.JspApplicationContext.getExpressionFactory

Br3*_*r3x 29 jsp tomcat servlets linkageerror

当我尝试在Tomcat 7上运行我的webapp时,我得到以下异常:

exception

javax.servlet.ServletException: 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/index_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 javax/el/ExpressionFactory used in the signature
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:343)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

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/index_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 javax/el/ExpressionFactory used in the signature
org.apache.jsp.index_jsp._jspInit(index_jsp.java:31)
org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:180)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Run Code Online (Sandbox Code Playgroud)

似乎两个.jar图书馆之间存在冲突,但我不知道它们是哪个.我怎样才能弄明白并解决它?

Bal*_*usC 55

当你包括在不同的服务器品牌/版服务器专用库,会发生/WEB-INF/lib你的web应用,如jsp-api.jar,el-api.jar,servlet-api.jar,等你需要删除它们.该/WEB-INF/lib不应包含任何特定于服务器的库.它们属于特定服务器本身(Tomcat已将它们放在其/lib文件夹中).

这是一个非常常见的初学者的错误,只要他们在IDE项目中遇到JSP/Servlet API上的编译错误.这应该以不同的方式解决,即通过在IDE中集成服务器并将服务器作为"目标运行时"添加到项目中.

也可以看看:


vad*_*dim 16

你必须添加到您的项目库中的两个选项,如jsp-api.jar,el-api.jar,servlet-api.jar,等:

  1. 将这些库添加为您的外部罐子Java Build Path;
  2. 将它们添加为maven依赖项,provided为每个依赖项设置范围,例如:
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)