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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

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

Q&A

解決済

1回答

1621閲覧

servlet とjspでDBから得た詳細ページを実装したい

yt07

総合スコア7

JSP

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

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

0グッド

0クリップ

投稿2020/05/20 09:59

編集2020/05/20 10:02

前提・実現したいこと

SELECT WHERE句を使い詳細ページを実装したく、SQL文で下記のようにサーブレットに記述しましたが、DBからうまくデータを引っ張ってこれません。長時間調べて試しましたがブラウザには値はNULLの状態です。
ご教授いただけたら幸いです。

発生している問題・エラーメッセージ

java.lang.NumberFormatException: null at java.base/java.lang.Integer.parseInt(Integer.java:614) at java.base/java.lang.Integer.parseInt(Integer.java:770) at servlet.ShowServlet.doGet(ShowServlet.java:49) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at filter.PageEncoding.doFilter(PageEncoding.java:39) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834)

ShowServlet.java

package servlet; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.HashMap; 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; /** * Servlet implementation class ShowServlet */ @WebServlet("/ShowServlet") public class ShowServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ShowServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append("Served at: ").append(request.getContextPath()); //DB connection String url = "jdbc:h2:tcp://localhost/~/posters"; String user ="sa"; String password = ""; try { Connection connection = DriverManager.getConnection(url, user, password); connection.setAutoCommit(false); String sql = "SELECT * FROM POSTS WHERE POST_ID = ?;"; PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1, Integer.parseInt(request.getParameter("POST_ID"))); ResultSet results = statement.executeQuery(); ArrayList<HashMap<String,String>> rows = new ArrayList<HashMap<String,String>>(); while(results.next()) { int post_id = results.getInt("POST_ID"); request.setAttribute("POST_ID", post_id); String message = results.getString("message"); request.setAttribute("message", message); String image = results.getString("image"); request.setAttribute("image", image); String video = results.getString("video"); request.setAttribute("video", video); } request.setAttribute("rows", rows); results.close(); statement.close(); } catch(Exception e) { e.printStackTrace(); } RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/show.jsp"); dispatcher.forward(request,response); } }

show.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h2>MEMO DETAIL</h2> <p>This app is made by Java Servlet and JSP.</p> <br> <form action="delete?id=<%= request.getAttribute("id") %>" method="POST"> <p>ID: <%= request.getAttribute("post_id") %></p> <p>TITLE: <%= request.getAttribute("message") %></p> <p>CONTENT:</p> <p><%= request.getAttribute("image") %></p> <p><%= request.getAttribute("video") %></p> <br> </form> <br> <a href="/Posters/LoginServlet">トップへ</a> </body> </html>

top.jsp

top.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>Posters</title> 10</head> 11<body> 12<p>ようこそ<c:out value="${userId }" />さん</p> 13<a href="/Posters/NewServlet">投稿する</a> 14<a href="/Posters/IndexServlet">ログアウト</a> 15<c:forEach var="post" items="${postList }"> 16 <p><c:out value="${post.message}"></c:out>:<c:out value="${post.image }"></c:out><c:out value="${post.video }"></c:out> 17 <a href="/Posters/ShowServlet?post_id=?">詳細</a> 18 </p> 19</c:forEach> 20 21 22 23 24</body> 25</html>

補足情報

eclipse
tomcat
DB:H2

よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2020/05/20 10:04

>長時間調べて試しましたが 大事なのは「俺はこんなに時間をかけて調べたんだ」という主張ではなく、「どういうキーワードを使ったのか」「どういう記事を参考にしたのか」「何を試したのか」という具体的な作業内容を記載することです。 でないと調べた内容が何も伝わりません。
yt07

2020/05/20 10:40

ご指摘ありがとうございます。 参考にした記事はこちらになります。https://qiita.com/tanakadaichi_1989/items/5602dbcc736cd03d03b8#deleteservletjava DBのデータを取り出すのにIDが必要であると思い、新たにPOST_ID(INT PRYMARY KEY AUTO_INCREMENT)を作り、POSTテーブルはPOST_ID、MESSAGE、IMAGE、VIDEOの状態です。 WHERE句でPOST_IDを選択し引き出そうとしましたがNULL。 beansの引数を(message,image,video)から(post_id,message,image,video)にして他の関係ファイルもpost_idを足しましたが、今度はSELECT*FROM POSTSとしたservletがきかなくなったため、テーブルはそのままにし、他ファイルのpost_idは元に戻しました。 ShowServlet.javaのDB接続のpost_idのパラメータの受け取り方の問題なのか、 top.jspでのクエリでのパラメータの渡し方に問題があるのか 不明の状態です。
guest

回答1

0

ベストアンサー

java.lang.NumberFormatException: null <-- ① at java.base/java.lang.Integer.parseInt(Integer.java:614) at java.base/java.lang.Integer.parseInt(Integer.java:770) at servlet.ShowServlet.doGet(ShowServlet.java:49) <-- ②

場所と原因が書かれてます。

指定したパラメータの値が null ( 対象のキーがない ) だから発生してます。
大文字小文字は注意しましょう。

投稿2020/05/20 10:14

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yt07

2020/05/20 12:02

ご教授ありがとうございます。 ご指摘くださった内容を踏まえ検証しエラー文からnullの原因を探りました。 大文字小文字を修正しクエリが送られているのを確認してから jspファイルに<a href="/Posters/ShowServlet?POST_ID=${post.post_id }">詳細</a>とするとうまくできました! 形はきれいとはいえませんがなんとか思うような実装ができたので助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問