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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

2回答

22744閲覧

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

sususu

総合スコア99

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

2クリップ

投稿2018/03/25 09:37

編集2018/03/29 15:41

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

コンソールを見てみると表題のエラー文の前に下記のような文があったのでそれが原因だと思い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
イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/26 11:12

まあ、lib配下が面白いことになってるけどね
sususu

2018/03/26 11:31

libに入れてはいけないものがありましたでしょうか?すいません何かありましたらご教授お願いします!
退会済みユーザー

退会済みユーザー

2018/03/26 11:33

ソース系jarとテスト系jarだけどどこ見ていれたの?
退会済みユーザー

退会済みユーザー

2018/03/26 11:34

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

2018/03/26 12:12

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

2018/03/26 12:19

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

回答2

0

ベストアンサー

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

java

1 try { 2 ProductBean pb = dao.detail(id); 3 request.setAttribute("pb", pb); 4 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/revice.jsp"); 5 dispatcher.forward(request, response); 6 } catch (Exception e) { 7 e.printStackTrace(); 8 } 9 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/error.jsp"); 10 dispatcher.forward(request, response);

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

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

java

1 try { 2 ProductBean pb = dao.detail(id); 3 request.setAttribute("pb", pb); 4 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/revice.jsp"); 5 dispatcher.forward(request, response); 6 } catch (Exception e) { 7 e.printStackTrace(); 8 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/error.jsp"); 9 dispatcher.forward(request, response); 10 }

投稿2018/03/30 00:33

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sususu

2018/03/30 03:02

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

2018/03/30 07:21

d(・ω・
guest

0

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

  • 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 01:12

編集2018/03/28 14:42
yuji38kwmt

総合スコア437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sususu

2018/03/26 10:37

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問