Tomcat7でjspをコンパイルできません。サンプルサーブレットが正常に実行されるまで、サービスは稼働しています。 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>
JDK 8をサポートする最新バージョンのTomcatを使用する必要があります。
Apache-Tomcat-7.0.35がJDK8をサポートしていないこと、Apache-Tomcat-7.0.50がJDK8をサポートしていることを確認できます。
JDK8のクラス形式が変更されたため、TomcatはJSPをコンパイルできません。 Tomcatの新しいバージョンを取得してください。
私は最近同じ問題を抱えていました。これはTomcatのバグです。JDK8のクラスファイル形式は、以前のJDK8バージョンのものとは若干異なります。これにより不整合が発生し、TomcatはJDK8でJSPをコンパイルできません。
次の参照を参照してください。
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>
これが役立つことを願っています!ありがとう
Ubuntu 12.04 LTSで実行されており、サポートされている最新の公式Tomcat7パッケージは7.0.26であるため、Tomcat全体を簡単に更新することはできません。
Jdk8でテストするように注文しましたが、いくつかのjarを最新の7.0。*バージョンに対して変更することでこの問題を解決できました。
Jasper.jar、jasper-el、Tomcat-utilをバージョン7.0.53に切り替え、ecj-4.3.1.jarを追加しました。これにより、アプリケーションがオンラインに戻ります。
しかし...また、これでパッケージ化されたコンテンツを変更したので、Tomcat全体をダウンロードして、自己インストールされたパッケージとして使用する方が良いかもしれません。したがって、これは非常に汚れたクイックハックまたは回避策としてのみ参照してください。
このインポート<%@page import="Java.util.Map" %>
を追加します
これでうまくいきましたが、<%@ page import = "Java.util.HashMap"%>を追加する必要もありました。上記の答えは正しいようです。新しいTomcatを使用している場合、これらの行を追加する必要はないかもしれませんが、システム全体を変更できなかったため、これは機能しました。
ありがとうございました
<%@page import="Java.util.Map.Entry"%>
をjspファイルに追加してみてください
多くの正しい/同じ答えがありますが、将来の参考のために:
Tomcat 7も同じです。使用しているフレームワークのバージョン(他の同様の質問で提案されている)だけを更新するだけでは十分ではないことに注意してください。
Tomcatプラグインのバージョンも更新する必要があります。 Java 7を使用してうまくいったのは、Tomcat7-maven-plugin(= Tomcat 7.0.47)のバージョン2.2へのアップグレードでした。
JIRAナレッジベース から:
Symptoms
ワークフローアクションにアクセスできない場合があります
- JIRAは画面に例外をスローする場合があります
- 次の条件のいずれかまたは両方が存在する場合があります。
次は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コンテナは、Webアプリケーションで使用されるJSPパーサーによって生成された.Javaおよび.classファイルをキャッシュします。これらが破損したり、見つからないことがあります。これは、JSPへの変更を含むパッチまたはアップグレードの後に発生する場合があります。
Resolution
1.スタンドアロンJIRAを使用している場合は/ workフォルダーの内容を削除し、EAR/WARインストールを使用している場合は/ workを削除します。 2. JIRAアプリケーションプロセスを実行しているユーザーに/ workディレクトリへの読み取り/書き込み権限があることを確認します。 3. JIRAアプリケーションコンテナーを再起動して、ファイルを再構築します。
Tomcat 7.0.19でアプリケーションをJava 6からJava 8にアップグレードするときに、まったく同じ問題に直面しました。 Tomcatを7.0.59にアップグレードすると、この問題は解決します。
他の人が言ったように、私は以前にこれに遭遇しました:ちょうどupgrade jetty plugin
maven
を使用している場合
pom.xmlのjetty
プラグインに移動し、それを更新します
<plugin>
<groupId>org.Eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.0.v20150612</version>
<configuration>
<scanIntervalSeconds>3</scanIntervalSeconds>
<httpConnector>
<port>${jetty.port}</port>
<idleTimeout>60000</idleTimeout>
</httpConnector>
<stopKey>foo</stopKey>
<stopPort>${jetty.stop.port}</stopPort>
</configuration>
</plugin>
これがお役に立てば幸いです
私は最近同じ問題に出くわします。私はjdk.8.0.102でTomcat7.0.32でIntelliJx64を使用していました。問題はありませんでした。展開に直接アクセスできましたlocalhost:[port][mywebapp]または/ ROOT。
Eclipse neonに移行しようとしたとき、空の文字列としてパスを設定しようとしました。実行環境をJava7に強制し、モジュールを空に設定しても、つま先の問題は解決しませんでした。ただし、Tomcatインストールを7.072に変更し、コンテキストパス構成をpath = ""に手動で変更すると、Eclipseで問題が解決しました。 (サーバーをダブルクリックし、モジュールタブに切り替えることでパスを操作できます。)
私の不思議は、なぜIntelliJがTomcatインストールバージョンに関連すると思われる同じバグで問題を与えていなかったのですか?
使用中のIDEとの関係もあるようです。