質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.23%

Servlet.service()が例外を投げました

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 19K+

sususu

score 82

表題の件のような今までに見たことないエラーが出てきてしまいました。
ご教授お願いいたします。

コンソールを見てみると表題のエラー文の前に下記のような文があったのでそれが原因だと思いGoogle翻訳にかけてみました。

 At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.


日本語に変換してみました。

少なくとも1つのJARが、まだTLDを含んでいないTLDについてスキャンされました。 スキャンしたが、そこにTLDが見つからなかったJARの完全なリストについては、このロガーのデバッグログを有効にしてください。 スキャン中に不要なJARをスキップすると、起動時間とJSPのコンパイル時間が改善されます。

そこで下記のサイトを参照しTLDの事を調べてみたのですが解決方法がわかりません。
https://codezine.jp/article/detail/1526
またデバッグログを有効についても引き続き調べているところです。

当該コードは下記の通りでJSPのページに遷移した時に
『Servlet.service()が例外を投げました』と出てしまいます。

どなたかわかる方ご教授の方よろしくお願いいたします。

サーブレット
package shopping;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.ProductBean;
import dao.ProductDAO;

/**
 * Servlet implementation class Detail
 */
@WebServlet("/Detail")
public class Detail extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int id = Integer.parseInt(request.getParameter("id"));
        ProductDAO dao = new ProductDAO();
        try {
            ProductBean pb = dao.detail(id);
            request.setAttribute("pb", pb);
            RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/revice.jsp");
            dispatcher.forward(request, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
        RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/error.jsp");
        dispatcher.forward(request, response);
    }

}
JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
編集ページです。
<form method="POST" enctype="multipart/form-data" action="Revice">
<table>
<tr>
<td><input type = "file" style = display:none></td>
<td><img src = "${pb.path}" height = "64"/></td>
<td><input type = "text" name = "name" value = "<c:out value = "${pb.name}"/>"/></td>
<td><input type = "text" name = "price" value = "<c:out value = "${pb.price}"/>"/></td>
<td><input type = "text" name = "explanation" value = "<c:out value = "${pb.explanation}"/>"/><td>
<td><input type = "submit" value = "修正完了"></td>
</tr>
</table>
</form>
</body>
</html>


イメージ説明
環境は以下の通りです。
よろしくお願いいたします。
開発環境
OS windows10
エディション enterprise
言語 java8.0.1310.11
MariaDB10.1
HeidiSQL
eclipse NEON

ログを追加しました!
情報: Server version:        Apache Tomcat/8.0.43 [日 3 25 18:12:42 JST 2018]
情報: Server built:          Mar 28 2017 14:42:59 UTC [日 3 25 18:12:42 JST 2018]
情報: Server number:         8.0.43.0 [日 3 25 18:12:42 JST 2018]
情報: OS Name:               Windows 10 [日 3 25 18:12:42 JST 2018]
情報: OS Version:            10.0 [日 3 25 18:12:42 JST 2018]
情報: Architecture:          amd64 [日 3 25 18:12:42 JST 2018]
情報: Java Home:             C:\pleiades\java\8\jre [日 3 25 18:12:42 JST 2018]
情報: JVM Version:           1.8.0_131-b11 [日 3 25 18:12:42 JST 2018]
情報: JVM Vendor:            Oracle Corporation [日 3 25 18:12:42 JST 2018]
情報: CATALINA_BASE:         C:\pleiades\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 [日 3 25 18:12:42 JST 2018]
情報: CATALINA_HOME:         C:\pleiades\tomcat\8 [日 3 25 18:12:42 JST 2018]
情報: Command line argument: -Dcatalina.base=C:\pleiades\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 [日 3 25 18:12:42 JST 2018]
情報: Command line argument: -Dcatalina.home=C:\pleiades\tomcat\8 [日 3 25 18:12:42 JST 2018]
情報: Command line argument: -Dwtp.deploy=C:\pleiades\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps [日 3 25 18:12:42 JST 2018]
情報: Command line argument: -Djava.endorsed.dirs=C:\pleiades\tomcat\8\endorsed [日 3 25 18:12:42 JST 2018]
情報: Command line argument: -Dfile.encoding=UTF-8 [日 3 25 18:12:42 JST 2018]
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\pleiades\java\8\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/pleiades/eclipse/jre/bin/../jre/bin/server;C:/pleiades/eclipse/jre/bin/../jre/bin;C:/pleiades/eclipse/jre/bin/../jre/lib/amd64;C:\Program Files\Java\jre1.8,_141\bin;C:\Program Files\Java\jre1.8._141\bin;C:\Program Files\Java\jre1.8,0_141\bin;C:Program Files/Java/jre1.8,0_141\bin;C/Program Files/Java/1.8,0_141\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Users\SUZURA\AppData\Local\Microsoft\WindowsApps;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\pleiades\java\8\jdk-8u131-windows-x64\bin;C:\pleiades\java\8\bin;C:\Users\SUZURA\AppData\Local\Microsoft\WindowsApps;;C:\pleiades\eclipse;;. [日 3 25 18:12:42 JST 2018]
情報: Initializing ProtocolHandler ["http-nio-8080"] [日 3 25 18:12:42 JST 2018]
情報: Using a shared selector for servlet write/read [日 3 25 18:12:43 JST 2018]
情報: Initializing ProtocolHandler ["ajp-nio-8009"] [日 3 25 18:12:43 JST 2018]
情報: Using a shared selector for servlet write/read [日 3 25 18:12:43 JST 2018]
情報: Initialization processed in 1219 ms [日 3 25 18:12:43 JST 2018]
情報: サービス Catalina を起動します [日 3 25 18:12:43 JST 2018]
情報: Starting Servlet Engine: Apache Tomcat/8.0.43 [日 3 25 18:12:43 JST 2018]
情報: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. [日 3 25 18:12:44 JST 2018]
情報: Starting ProtocolHandler ["http-nio-8080"] [日 3 25 18:12:44 JST 2018]
情報: Starting ProtocolHandler ["ajp-nio-8009"] [日 3 25 18:12:44 JST 2018]
情報: Server startup in 1389 ms [日 3 25 18:12:44 JST 2018]
重大: サーブレット shopping.Detail のServlet.service()が例外を投げました [日 3 25 18:12:49 JST 2018]


下記追記事項です
1.タグリブを消してみたのですが、
『 サーブレット shopping.Detail のServlet.service()が例外を投げました』
という記述は消えませんでした。
2.タグリブとフォームからフォームまで消して実行したら下記のようなエラーになりました。
イメージ説明
3.画像やテキストの中のコメントを取得せずに他のサーブレットから直接飛んだ場合は1のようなエラー分は出ませんでした。なのでおそらく取得している画像かコメントかパスがエラーを発生させているのかもしません。
引き続き調べてみます!

正しいかわかりませんがフォルダーの階層追記いたします!
├─.settings
├─build
│  └─classes
│      ├─bean
│      ├─dao
│      └─shopping
├─src
│  ├─bean
│  ├─dao
│  └─shopping
└─WebContent
├─META-INF
└─WEB-INF
└─lib
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2018/03/26 20:34

    まあ、javadocは許容にしておく(不要だがや

    キャンセル

  • sususu

    2018/03/26 21:12

    ソース系とテスト系というものがあったのですね!勉強になります。記憶があいまいなのですが、教本に乗っていたか次のURLから飛んでダウンロードしたと思います。確か前回質問もしています。https://mvnrepository.com/artifact/org.glassfish.web/jstl-impl/1.2 さっき一応ダウンロードしなおしたらファイル名が違ったので間違いかもしれませんが…一応差し替えましたがエラーは消えませんでした💦javadocですか!調べてみます!

    キャンセル

  • sususu

    2018/03/26 21:19

    ioの方だったのですねすいませんそれはhttps://commons.apache.org/proper/commons-io/からダウンロードしてその後、一応と思って全部入れてしまっていました。今後testとあるものは入れないようにしていきたいと思います。ありがとうございます!

    キャンセル

回答 2

checkベストアンサー

+2

doPostメソッドの実装に誤りがあります。

        try {
            ProductBean pb = dao.detail(id);
            request.setAttribute("pb", pb);
            RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/revice.jsp");
            dispatcher.forward(request, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
        RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/error.jsp");
        dispatcher.forward(request, response);

もしtry~catchの中で特に例外がスローされなかった場合、RequestDispatcher.forwardが2回実行されることになり、レスポンスを出力し終わったにもかかわらずもう一度出力することになります。

正しくはこうでしょうか。

        try {
            ProductBean pb = dao.detail(id);
            request.setAttribute("pb", pb);
            RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/revice.jsp");
            dispatcher.forward(request, response);
        } catch (Exception e) {
            e.printStackTrace();
            RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/error.jsp");
            dispatcher.forward(request, response);
        }     

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/30 12:02

    本当にいつもありがとうございます!
    おかけ様ですぐに解決することができました!
    自分は見ている箇所が違ったのでもっと見当がつけられるように頑張りたいと思います!
    ありがとうございました!!

    キャンセル

  • 2018/03/30 16:21

    d(・ω・

    キャンセル

+1

すみません、解決する回答ではありませんが、下記のことを確認できると解決する糸口が見つかりそうです。

  • taglib*.jarなどのライブラリは、プロジェクトに取り込まれているでしょうか?
    イメージ説明

  • jspからコアタグに関する記述(<c:out><%@taglib prefix = "c">など)を消した場合、エラーは出ますか?

  • Servlet.service()に対するスタックトレース(エラーの詳細)は、どこかに表示さていないでしょうか?たとえば標準エラー出力などです。

 追記1(標準エラー出力)

標準エラー出力は、Eclipseのコンソール(赤文字)か、Tomcatのstderr logに出力されていると思います(下図参照)。
イメージ説明

 追記2(気になったところ)

  • <img src = "${pb.path}" height = "64"/>ですが、他と同様に<c:out>${pb.path}を参照する必要があると思います。
  • value = "<c:out value = "${pb.price}"/>"は、「二重引用符の中に二重引用符がある」状態ですが、問題ないでしょうか?value = '<c:out value = "${pb.price}"/>'のように一重引用符を使わないといけないと思います。

 追記3(その他、あるとよさそうな情報)

  • フォルダ構成一覧(treeコマンド)などがあると、もしかしたら解決の糸口になるかもしれません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/26 19:37

    提示いただいた3件に関して調べてみました。
    1に関しては上の画面で調べてみたのですがタグライブラリは入っていました、また他のページのCoreタグライブラリは機能していたので他が原因みたいです。
    2に関しては追記事項に記載結果を載せさせていただきましたが、タグライブラリを消してもエラーは消えませんでした。
    3に関してはコンソールの中を調べてみたのですが、質問文に記載された部分以外は見当たりませんでしたが、コンソール以外に参照できそうなところはありますでしょうか?

    取り急ぎ返信させていただきました。
    ご回答ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる