java.lang.LinkageError:加载器约束违规:解析接口方法时javax.servlet.jsp.JspApplicationContext.getExpressionFactory()

时间:2011-11-07 05:34:54

标签: jsp jsf servlets jsf-2

我在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)

这是如何引起的?如何解决?

2 个答案:

答案 0 :(得分:12)

你的类路径很乱。

这个特殊的例外表明你已经在webapp的/WEB-INF/lib文件夹中乱丢了一个servletcontainer make / version的servletcontainer特定的库,它与你实际部署webapp的servletcontainer不兼容。特定的异常消息表明您的/WEB-INF/lib包含jsp-api.jarj2ee.jar和/或javaee.jar个文件。

您应该删除它们。 servletcontainer 已经随JSP一起提供。您永远不应该复制/移动特定于servletcontainer的库。它只会与目标运行时冲突。如果您这样做是为了解决IDE中的编译错误,那么您应该以不同的方式解决它。也就是说,您应该将目标servletcontainer集成到IDE中,然后将其与项目关联为 Targeted Runtime 。这样IDE将在编译时类路径中自动使用servletcontainer的库。

另见:

答案 1 :(得分:1)

将项目从WAS6迁移到WAS 7时出现了同样的错误。以下是修复:

  1. 更新web.xml:
    • 打开Project_name \ src \ main \ webapp \ WEB-INF \ web.xml
    • 添加以下侦听器:Com.sun.faces.config.ConfigureListener
    • 构建项目并将其部署到Websphere
  2. 更改装载机订单:
    • 打开Websphere应用服务器控制台
    • 转到:应用程序>>应用类型>> WebSphere企业应用程序
    • 点击项目
    • 点击“类加载和更新检测”
    • 选择“首先加载父装入程序的类”
    • 点击“应用”
  3. 禁用JSP类重新加载
    • 一个。转至:应用程序>>应用类型>> WebSphere企业应用程序
    • 点击项目
    • 点击JSP和JSF 选项
    • 取消选中“JSP enable class reloading”
    • 点击确定
  4. 更改JSF实施
    • 转到:应用程序>>应用类型>> WebSphere企业 申请
    • 点击项目
    • 单击JSP和JSF选项
    • 在JSF Implementation
    • 下选择“MyFaces 1.2”
  5. 启动项目