【问题标题】:java.lang.LinkageError: loader constraint violation: when resolving interface method javax.servlet.jsp.JspApplicationContext.getExpressionFactory() [duplicate]java.lang.LinkageError:加载程序约束冲突:解析接口方法时 javax.servlet.jsp.JspApplicationContext.getExpressionFactory() [重复]
【发布时间】:2011-12-23 09:37:19
【问题描述】:

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

这是怎么引起的,我该如何解决?

【问题讨论】:

  • 您能指定服务器及其版本吗?

标签: jsp jsf servlets jsf-2


【解决方案1】:

你的类路径一团糟。

这个特殊的异常表明您在 webapp 的 /WEB-INF/lib 文件夹中乱扔了任意下载的 servletcontainer 特定于 servletcontainer 的库,该库与您实际部署 webapp 的 servletcontainer 不兼容。特定的异常消息表明您的/WEB-INF/lib 包含jsp-api.jarj2ee.jar 和/或javaee.jar 文件。

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

另见:

【讨论】:

  • 嗨 BallusC 非常感谢你....
  • 不客气。由于您是新来的,请不要忘记在回答(最)有助于解决问题时将其标记为已接受。另请参阅meta.stackexchange.com/questions/5234/…不要忘记对您之前提出的问题做同样的事情,只要适用:stackoverflow.com/users/1029046/muthu
  • 如果您的 lib 文件夹中有一个“el-api.jar”jar,也会发生这种情况
  • @BalusC 我也遇到了这个问题,尤其是当我使用 maven 并使用嵌入式 Tomcat 运行应用程序并以“运行”为目标时。如果我通过 el-impl 排除对 el-api 的传递依赖,并允许我的项目使用对 el-api 的“提供”依赖,则没有一个 JSF 表达式正在处理,但 JSP 表达式正在处理。
【解决方案2】:

在将项目从 WAS6 迁移到 WAS 7 时,我遇到了同样的错误。修复方法如下:

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

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 2013-11-20
    • 2022-08-17
    • 1970-01-01
    • 2014-08-16
    • 2018-04-04
    • 2012-02-03
    相关资源
    最近更新 更多