68

tomcat7 で jsps をコンパイルできません。サンプルのサーブレットが正常に実行されるまで、サービスは稼働しています。私はOracle Java 8を実行しています。

誰かが私を正しい方向に向けることができますか?

スタックトレースは次のとおりです。

type Exception report

message Unable to compile class for JSP:

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 1 in the generated java file
The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files

Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:468)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    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:728)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.35 logs.

コードはこんな感じで tomcat7 のサンプルコードなので正しいと思います。

<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>
<html>
<head>
  <title>JSP 2.0 Examples - Hello World SimpleTag Handler</title>
</head>
<body>
<h1>JSP 2.0 Examples - Hello World SimpleTag Handler</h1>
<hr>
<p>This tag handler simply echos "Hello, World!"  It's an example of
a very basic SimpleTag handler with no body.</p>
<br>
<b><u>Result:</u></b>
<mytag:helloWorld/>
</body>
</html>
4

11 に答える 11

96

JDK 8 をサポートする最新バージョンの tomcat を使用する必要があります。

apache-tomcat-7.0.35 が JDK8 をサポートしていないことを確認できます。apache-tomcat-7.0.50 が JDK8 をサポートしていることも確認できます。

于 2014-01-24T01:10:41.397 に答える
13

JDK8 のクラス形式が変更されたため、Tomcat は JSP をコンパイルできません。新しいバージョンの Tomcat を入手してみてください。

私は最近同じ問題を抱えていました。これは Tomcat のバグです。または、JDK 8 のクラス ファイル形式は、以前の JDK8 バージョンとはわずかに異なります。これにより矛盾が生じ、Tomcat は JDK8 で JSP をコンパイルできません。

次の参考文献を参照してください。

于 2013-11-12T18:31:40.100 に答える
3

Maven を使用している場合は、tomcat7-maven-plugin を pom.xml に追加すると、問題なく動作します。このプラグインは、JDK 1.8 をサポートする Tomcat サーブレット コンテナー バージョン 7.0.47 でプロジェクトを実行します。

    <plugins>
    <plugin>
     <groupId>org.apache.tomcat.maven</groupId>
     <artifactId>tomcat7-maven-plugin</artifactId>
     <version>2.2</version>
     <configuration>
<!-- Include context file for Datasource configuration -->
     <contextFile>./src/main/webapp/META-INF/context.xml</contextFile>
    <port>8080</port>
     </configuration>
     <dependencies>
<!-- Include jdbc driver dependency if using datasource (in my case oracle) -->
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.4.0</version>
    </dependency>
  </dependencies>
    </plugin>
    </plugins>

これが役に立つことを願っています! ありがとう

于 2017-03-16T16:04:01.673 に答える
1

<%@page import="java.util.Map.Entry"%>jspファイルに追加してみてください

于 2016-01-04T16:37:00.343 に答える
1

正しい/同じ答えがたくさんありますが、今後の参考のために:

Tomcat 7 も同様です。使用中のフレームワークのバージョン (他の同様の質問で提案されているように) だけを更新するだけでは不十分であることに注意してください。

Tomcat プラグインのバージョンも更新する必要があります。Java 7 を使用して私にとってうまくいったのは、tomcat7-maven-plugin (= Tomcat 7.0.47) のバージョン 2.2 にアップグレードすることでした。

于 2016-05-01T00:59:36.377 に答える
0

JIRAナレッジベースから:

Symptoms

ワークフロー アクションにアクセスできない場合があります

  1. JIRA が画面に例外をスローする場合がある
  2. 次の条件のいずれかまたは両方が存在する可能性があります。

atlassian-jira.log に次のように表示されます。

     2007-12-06 10:55:05,327 http-8080-Processor20 ERROR [500ErrorPage] 
     Exception caught in500 page Unable to compile class for JSP
    org.apache.jasper.JasperException: Unable to compile class for JSP
   at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:572)
   at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:305)

_

Cause:

Tomcat コンテナーは、JSP パーサーによって生成された .java および .class ファイルをキャッシュし、それらは Web アプリケーションによって使用されます。これらが破損したり、見つからない場合があります。これは、JSP への変更を含むパッチまたはアップグレードの後に​​発生する可能性があります。

Resolution

1. スタンドアロン JIRA を使用している場合は /work フォルダーの内容を削除し、EAR/WAR インストールを使用している場合は /work フォルダーの内容を削除します。2. JIRA アプリケーション プロセスを実行しているユーザーに、/work ディレクトリへの読み取り/書き込み権限があることを確認します。3. JIRA アプリケーション コンテナを再起動して、ファイルを再構築します。

于 2013-10-08T11:16:38.363 に答える
0

このインポートを追加<%@page import="java.util.Map" %>

これでうまくいきましたが、<%@ page import="java.util.HashMap" %> も追加する必要がありました。上記の答えは正しいようです。新しいTomcatを使用している場合、これらの行を追加する必要はないかもしれませんが、システム全体を変更できなかったので、これはうまくいきました.
ありがとうございました

于 2013-10-08T09:35:16.013 に答える