我在Eclipse IDE中使用JSF 2.0。当我尝试实现JSP和Servlet时,出现以下错误:
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/exCrop_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
at org.apache.jsp.exCrop_jsp._jspInit(exCrop_jsp.java:31)
at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:181)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
这是如何引起的?如何解决?
答案 0 :(得分:12)
你的类路径很乱。
这个特殊的例外表明你已经在webapp的/WEB-INF/lib
文件夹中乱丢了一个servletcontainer make / version的servletcontainer特定的库,它与你实际部署webapp的servletcontainer不兼容。特定的异常消息表明您的/WEB-INF/lib
包含jsp-api.jar
,j2ee.jar
和/或javaee.jar
个文件。
您应该删除它们。 servletcontainer 已经随JSP一起提供。您永远不应该复制/移动特定于servletcontainer的库。它只会与目标运行时冲突。如果您这样做是为了解决IDE中的编译错误,那么您应该以不同的方式解决它。也就是说,您应该将目标servletcontainer集成到IDE中,然后将其与项目关联为 Targeted Runtime 。这样IDE将在编译时类路径中自动使用servletcontainer的库。
答案 1 :(得分:1)
将项目从WAS6迁移到WAS 7时出现了同样的错误。以下是修复:
Com.sun.faces.config.ConfigureListener