29

Tomcat 7でWebアプリケーションを実行しようとすると、次の例外が発生します。

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)

2つの書店の間に対立があるようですが、.jarどちらであるかはわかりません。どうすればそれらを理解して解決できますか?

4

6 に答える 6

58

これは、、 、 など、異なるサーバーのメーカー/バージョンのサーバー固有のライブラリを/WEB-INF/libWeb アプリケーションに含める場合に発生します。それらをすべて削除する必要があります。にサーバー固有のライブラリを含めないでください。それらは特定のサーバー自体に属しています(Tomcatはそれらをそのフォルダーに既に持っています)。jsp-api.jarel-api.jarservlet-api.jar/WEB-INF/lib/lib

ちなみに、これは、IDE プロジェクトの JSP/サーブレット API でコンパイル エラーが発生した場合によくある初心者の間違いです。これは別の方法で解決する必要がありました。つまり、サーバーを IDE に統合し、サーバーを「ターゲット ランタイム」としてプロジェクトに追加することです。

以下も参照してください。

于 2011-12-13T12:04:02.933 に答える
16

jsp-api.jarel-api.jar、などのプロジェクト ライブラリに追加するには、次の 2 つのオプションがありますservlet-api.jar

  1. これらのライブラリを外部 jar としてJava Build Path;
  2. それらを Maven 依存関係として追加し、providedそれぞれのスコープを設定します。次に例を示します。
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.1</version>
    <scope>provided</scope>
</dependency>
于 2013-02-08T15:10:04.027 に答える
2

このページを確認してください

http://www.jarfinder.com/index.php/java/info/org.apache.jasper.runtime.HttpJspBase

これで使用したjarファイルを見つけてください。2つ見つかった場合は1つ削除してください。:)

于 2011-12-13T10:57:29.653 に答える