apache tomcatにてWebアプリを構築しています。
下記手順を行ったところ見慣れないエラーが発生してしまい、ページが開けなくなってしまいました。
①JSPとJAVAを配置しているフォルダAをZIPに圧縮(バックアップとして)
②フォルダAの名前をフォルダBへ変更
③ZIPを解凍しフォルダAを配置
②については、フォルダA内のJPSを変更したが、うまく動作しないためフォルダ名を変更して一時退避。
③については、ZIPの解凍にて元のフォルダAの状態に戻そうとした
という経緯になります。
下記はエラー文です。
type 例外レポート
メッセージ JSPのクラスをコンパイルできません:
説明 The server encountered an internal error that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: 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
An error occurred at line: 1 in the generated java file
The type java.io.ObjectInputStream 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:469)
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:722)
また、更新を何度か繰り返すとエラー文が変わり下記のようなものになるときもあります。
type 例外レポート
メッセージ java.lang.ClassNotFoundException: org.apache.jsp.hoge_jsp
説明 The server encountered an internal error that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.hoge_jsp
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:177)
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)
原因
java.lang.ClassNotFoundException: org.apache.jsp.hoge_jsp
java.net.URLClassLoader.findClass(Unknown Source)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:132)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:63)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172)
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)
注意 原因のすべてのスタックトレースは、Apache Tomcat/7.0.32のログに記録されています
足りない情報等ありましたら
是非教えていただければと思います。
宜しくお願いいたします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
今回の現象について、
「JavaとTomcatのバージョン」と
「TomcatのWorkフォルダ」が関係していたようです。
Java1.8.0_111とTomcat 7.0.32を使用していましたが、
Tomcat 7.0.32に内蔵されていたECJ (Eclipse Compiler for Java)のバージョンが低く
Java8の環境で正常にコンパイルできていない事が原因でした。
解決方法としては「Tomcatをバージョンアップ」「Javaのバージョンダウン」があります。
Tomcatの有効なバージョンについては不明ですが、
公式のChangelogに「Tomcat 7.0.34時点でEclipse JDT Compiler 4.2.1へアップデート」と記載されていたので、恐らくTomcat 7.0.34以上のバージョンであれば、今回の問題は解決すると思われます。
Javaのバージョンダウンについては、
Java7以下へ落とせば解決すると思われます。
もう一つの原因ですが、TomcatのWorkフォルダに古いコンパイル済みのJavaが残っていたため
Java1.8.0_111とTomcat 7.0.32を使用していても動作していたようです。
しかし、今回アプリケーションのフォルダに変更がかかったため、
再コンパイルが必要となり、コンパイルのエラーが発生しました。
上記の事から、JavaやTomcatのバージョンアップの際は
Workフォルダ内の削除が必要なのかもしれません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
解決できるかどうかは不明ですが、Tomcatなどへ搭載済みのWebアプリケーションの名前を変える場合や、zip圧縮する場合は、いったんTomcatを停止してから行わないと、自動的にリロードされ、中途半端な状態で起動しようとしてエラーが出ます。
Tomcatを一旦停止し、EclipseからプロジェクトのクリーンとTomcatのワークディレクトリをクリーンしてからTomcatを起動すると解決するかもしれません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる