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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

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

servlet

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

Q&A

解決済

1回答

2285閲覧

DAOで設定した情報をServletに連携できず、値がnullとなってしまいます

shogakusha

総合スコア12

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

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

servlet

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

0グッド

0クリップ

投稿2020/06/17 13:00

編集2020/06/18 00:46

前提・実現したいこと

Javaで、文書管理ツールを作成しています。
DBはMySQLを使用しています。

ツールのトップ画面で「検索」ボタン押下後、検索結果を表示する一覧画面に遷移します。
一覧画面の各検索結果に「詳細」リンクがあり、押下したら詳細画面へ遷移し、該当文書のタイトル、作者、内容が表示されるように実装したいです。
DAOではIDの情報を取得するができ、タイトル、作者、内容の値を取得できているのですが、Servletではタイトル、作者、内容の値がnullとなってしまい、理由が分かりません。
初学者のため、質問に難有りかと思いますが、ご容赦ください。
ご教示いただけますと幸いです。
どうぞ、よろしくお願いいたします。

該当のソースコード

list.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" 3 import="java.io.*,java.util.*,java.text.*,dto.*"%> 4<!DOCTYPE html"> 5<html> 6<head> 7<meta charset="UTF-8"> 8<title>一覧画面</title> 9</head> 10<body> 11 12 <table border="1"> 13 <thead> 14 <tr> 15 <th>ID</th> 16 <th>タイトル</th> 17 <th>作者</th> 18 <th>作品詳細</th> 19 <th>編集</th> 20 </tr> 21 </thead> 22 <tbody> 23 <% 24 // リストデータをリクエストから取得 25 ArrayList<BookSearchDto> bookList = new ArrayList<BookSearchDto>(); 26 bookList = (ArrayList) request.getAttribute("list"); 27 28 for (int i = 0; bookList.size() > i; i++) { 29 BookSearchDto bookSearchDto = bookList.get(i); 30 int id = bookSearchDto.getId(); 31 String bookName = bookSearchDto.getBooktitle(); 32 String author = bookSearchDto.getAuthor(); 33 request.setAttribute("id", id); 34 %> 35 <tr> 36 <td><%=id%></td> 37 <td><%=bookName%></td> 38 <td><%=author%></td> 39 <td><a href="./BookDetailServlet?id=<%=id%>">作品詳細</a></td> 40 <td><a href="./BookEditServlet?id=<%=id%>">編集</a></td> 41 </tr> 42 <% 43 } 44 %> 45 46 </tbody> 47 </table> 48 <form method="get" action="./BookAllSearchServlet"> 49<br><button onclick="history.back()">戻る</button> 50 </form> 51</body> 52</html>

BookDetailServlet.java

1package book; 2 3import java.io.IOException; 4import java.util.ArrayList; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12 13import dao.BookDao; 14import dba.DBManager; 15import dto.BookDto; 16 17/** 18 * Servlet implementation class BookDetailServlet 19 */ 20@WebServlet(description = "一覧画面にて作品詳細ボタン押下時に受け取るServletクラス", urlPatterns = { "/BookDetailServlet" }) 21public class BookDetailServlet extends HttpServlet { 22 private static final long serialVersionUID = 1L; 23 24 /** 25 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 26 * response) 27 */ 28 protected void doGet(HttpServletRequest request, HttpServletResponse response) 29 throws ServletException, IOException { 30 31 int id = 0; 32 String bookName = null; 33 String detail = null; 34 String author = null; 35 36 BookDto book = new BookDto(id, bookName, detail, author); 37 String idAsString = request.getParameter("id"); 38 id = Integer.parseInt(idAsString); 39 40 DBManager db = new DBManager(); 41 42 try { 43 BookDao bookDao = new BookDao(db); 44 ArrayList<BookDto> list = bookDao.find(id); 45 46 request.setCharacterEncoding("UTF8"); 47 request.setAttribute("list", list); 48 49 if (list != null) { 50 bookName = book.getBooktitle(); 51 detail = book.getBooktext(); 52 author = book.getAuthor(); 53 request.setAttribute("booktitle", bookName); 54 request.setAttribute("text", detail); 55 request.setAttribute("author", author); 56 RequestDispatcher dispatcher = request.getRequestDispatcher("/detail.jsp"); 57 dispatcher.forward(request, response); 58 } 59 } catch (Exception e) { 60 e.printStackTrace(); 61 } 62 } 63 64} 65

BookDao.java

1package dao; 2 3import java.sql.Connection; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6import java.util.ArrayList; 7 8import dba.DBManager; 9import dto.BookDto; 10import dto.BookSearchDto; 11 12public class BookDao { 13 Connection conn = null; 14 PreparedStatement pStmt = null; 15 ResultSet rs = null; 16 17 private DBManager db; 18 19 public BookDao(DBManager db) { 20 this.db = db; 21 } 22 23 public ArrayList<BookSearchDto> findAll() throws Exception { 24 ArrayList<BookSearchDto> bookList = new ArrayList<BookSearchDto>(); 25 String sql = "SELECT ID, BOOKTITLE, BOOKTEXT, AUTHOR, UPDATETIME, UPDATEUSER, INSERTTIME, INSERTUSER FROM T_BOOK"; 26 27 Connection conn = db.getConnection(); 28 PreparedStatement pStmt = conn.prepareStatement(sql); 29 ResultSet rs = pStmt.executeQuery(); 30 31 while (rs.next()) { 32 int id = rs.getInt("ID"); 33 String booktitle = rs.getString("BOOKTITLE"); 34 35 String author = rs.getString("AUTHOR"); 36 37 BookSearchDto bookSearch = new BookSearchDto(id, booktitle, author); 38 bookList.add(bookSearch); 39 } 40 return bookList; 41 } 42 43 public ArrayList<BookSearchDto> find(String bookName) throws Exception { 44 45 ArrayList<BookSearchDto> bookList = new ArrayList<BookSearchDto>(); 46 String sql = "SELECT ID, BOOKTITLE, AUTHOR FROM T_BOOK WHERE BOOKTITLE LIKE ?"; 47 48 Connection conn = db.getConnection(); 49 50 PreparedStatement pStmt = conn.prepareStatement(sql); 51 52 pStmt.setString(1, bookName + "%"); 53 54 ResultSet rs = pStmt.executeQuery(); 55 56 while (rs.next()) { 57 int id = rs.getInt("ID"); 58 bookName = rs.getString("BOOKTITLE"); 59 String author = rs.getString("AUTHOR"); 60 BookSearchDto bookSearch = new BookSearchDto(id, bookName, author); 61 bookList.add(bookSearch); 62 63 } 64 return bookList; 65 } 66 67 public ArrayList<BookDto> find(int id) throws Exception { 68 String booktitle = null; 69 String text = null; 70 String author = null; 71 72 BookDto book = new BookDto(id, booktitle, text, author); 73 ArrayList<BookDto> list = new ArrayList<BookDto>(); 74 String sql = "SELECT BOOKTITLE, BOOKTEXT, AUTHOR FROM T_BOOK WHERE ID = ?"; 75 76 Connection conn = db.getConnection(); 77 78 PreparedStatement pStmt = conn.prepareStatement(sql); 79 id = book.getId(); 80 pStmt.setInt(1, id); 81 82 ResultSet rs = pStmt.executeQuery(); 83 84 while (rs.next()) { 85 id = rs.getInt("ID"); 86 booktitle = rs.getString("BOOKTITLE"); 87 text = rs.getString("BOOKTEXT"); 88 author = rs.getString("AUTHOR"); 89 90 book = new BookDto(id, booktitle, text, author); 91 list.add(book); 92 } 93 return list; 94 } 95 96 public boolean regist(BookDto book) throws Exception { 97 boolean judge = false; 98 String sql = "INSERT INTO T_BOOK(BOOKTITLE, BOOKTEXT, AUTHOR) VALUES(?, ?, ?)"; 99 String booktitle = book.getBooktitle(); 100 String booktext = book.getBooktext(); 101 String author = book.getAuthor(); 102 103 Connection conn = db.getConnection(); 104 105 PreparedStatement pStmt = conn.prepareStatement(sql); 106 pStmt.setString(1, booktitle); 107 pStmt.setString(2, booktext); 108 pStmt.setString(3, author); 109 110 int count = pStmt.executeUpdate(); 111 112 if (count == 1) { 113 judge = true; 114 } 115 return judge; 116 } 117 118 public boolean update(BookDto book) throws Exception { 119 boolean judge = false; 120 String sql = "UODATE T_BOOK SET BOOKTITLE = ?, BOOKTEXT = ?, AUTHOR = ?"; 121 122 String booktitle = book.getBooktitle(); 123 String booktext = book.getBooktext(); 124 String author = book.getAuthor(); 125 126 Connection conn = db.getConnection(); 127 128 PreparedStatement pStmt = conn.prepareStatement(sql); 129 pStmt.setString(1, booktitle); 130 pStmt.setString(2, booktext); 131 pStmt.setString(3, author); 132 133 int count = pStmt.executeUpdate(); 134 135 if (count == 1) { 136 judge = true; 137 } 138 return judge; 139 } 140}

detail.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" import="java.io.*,java.util.*,java.text.*,dto.*"%> 3<!DOCTYPE html"> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>詳細画面</title> 8</head> 9<body> 10 <% 11 // リストデータをリクエストから取得 12 int id = 0; 13 String bookName = null; 14 String author = null; 15 String detail = null; 16 17 BookDto book = new BookDto(id, bookName, detail, author); 18 request.getAttribute("book"); 19 20 bookName = book.getBooktitle(); 21 author = book.getAuthor(); 22 detail = book.getBooktext(); 23 %> 24 <h2><%=bookName%></h2> 25 <h3> 26 作者:<%=author%></h3> 27 <%=detail%> 28 <br> 29 <button onclick="history.back()">戻る</button> 30 31</body> 32</html>

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

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

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

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

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

shogakusha

2020/06/17 13:52

ありがとうございます。 String idAsString = request.getParameter("id"); とし、数値型へ変換したことで、idを取得することができました。 しかしながら、タイトル、作者、内容がnull表示されてしまいます。 追加の質問で恐縮ですが、BookDetailServlet.javaで、bookName、detail 、authorに値を取得するにはどのようにしたらよろしいのでしょうか。 ご教示いただきたいです。
javahack

2020/06/17 14:52

ここではなく、A-pZさんの回答のコメント欄に書くべきでは?
shogakusha

2020/06/17 15:04

すみません。 ありがとうございます! 初めて投稿したもので、勝手を分かっていませんでした。 失礼いたしました。
guest

回答1

0

ベストアンサー

JSPにて、

./BookDetailServlet?id=<%=id%>

のリンクを押して、リクエストパラメータ:id の値に、検索して表示したい番号がサーブレットへリクエストされていますので、これを受け取るサーブレットにて受け取ればよいのですが、

java

1public class BookDetailServlet extends HttpServlet { 2 private static final long serialVersionUID = 1L; 3 4 /** 5 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 6 * response) 7 */ 8 protected void doGet(HttpServletRequest request, HttpServletResponse response) 9 throws ServletException, IOException { 10 11 int id = 0; 12 String bookName = null; 13 String detail = null; 14 String author = null; 15 16 BookDto book = new BookDto(id, bookName, detail, author); 17 id = book.getId(); 18 19 DBManager db = new DBManager();

と、リクエストパラメータからidの値を取得している処理がないようです。

java

1String idAsString = request.getParameter("id");

とした後、数値型に変換すれば良いかと存じます。

投稿2020/06/17 13:16

A-pZ

総合スコア12011

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

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

shogakusha

2020/06/17 15:03

ありがとうございます。 String idAsString = request.getParameter("id"); とし、数値型へ変換したことで、idを取得することができました。 しかしながら、タイトル、作者、内容がnull表示されてしまいます。 追加の質問で恐縮ですが、BookDetailServlet.javaで、bookName、detail 、authorに値を取得するにはどのようにしたらよろしいのでしょうか。 ご教示いただきたいです。
A-pZ

2020/06/18 09:34

bookを見た限りでは、検索はしておらず、BookDto book = new BookDto(id, bookName, detail, author);としているだけなので取得していないでしょう。 検索結果は、ArrayList<BookDto> list = bookDao.find(id); に入っていると思われますので、listの中から取得すれば良いかと。
shogakusha

2020/06/18 11:01

ありがとうございます。 解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問