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

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

解決済

2回答

21225閲覧

【DAO】のListをservletクラスで呼び出す方法について

mutani

総合スコア20

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クリップ

投稿2018/09/26 07:39

編集2018/09/26 09:21

前提・実現したいこと

selectで取得した値をリストに格納して、servletを介してJSPに出力する。

<詳細>
ソースコード内のslListをservletで取得したい。
servlet内のコードの書き方についてご教示いただけないでしょうか。

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

・正常に値を取得できない。

該当のソースコード

DAO

1public List<t_productBean> select(t_productBean t_productBean) { 2 3 Connection conn = null; 4 List<t_productBean>slList = new ArrayList<t_productBean>(); 5 try { 6 //データベースへ接続 7 conn = DriverManager.getConnection(url,user,password); 8 9 //select文の準備 10 String sql = "SELECT * FROM t_product WHERE product_id = ?"; 11 12 13 PreparedStatement pstmt = conn.prepareStatement(sql); 14 15 //SELECT文中の?に使用する値を設定しSQL完成 16 pstmt.setInt(1, t_productBean.getproduct_id()); 17 18 //SElECT文を実行し、結果を取得 19 ResultSet rs = pstmt.executeQuery(); 20 21 while(rs.next()) { //select文の結果をArrayListに格納 22 int product_id = rs.getInt("product_id"); 23 String product_genre_code = rs.getString("product_genre_code"); 24 String product_name = rs.getString("product_name"); 25 String product_maker = rs.getString("product_maker"); 26 int product_price = rs.getInt("product_price"); 27 int product_stock = rs.getInt("product_stock"); 28 int product_sales = rs.getInt("product_sales"); 29 String product_remarks = rs.getString("product_remarks"); 30 31 if(product_genre_code.equals("1")) { 32 product_genre_code ="指定なし"; 33 }else if(product_genre_code.equals("2")) { 34 product_genre_code = "時計"; 35 }else if(product_genre_code.equals("3")) { 36 product_genre_code = "電子機器"; 37 }else if(product_genre_code.equals("4")) { 38 product_genre_code = "携帯"; 39 }else{product_genre_code ="error";} 40 41 t_productBean pb = new t_productBean(product_id,product_genre_code,product_name 42 ,product_maker,product_price,product_stock,product_sales,product_remarks); 43 pb.setproduct_id(product_id); 44 pb.setproduct_genre_code(product_genre_code); 45 pb.setproduct_name(product_name); 46 pb.setproduct_maker(product_maker); 47 pb.setproduct_price(product_price); 48 pb.setproduct_stock(product_stock); 49 pb.setproduct_sales(product_sales); 50 pb.setproduct_remarks(product_remarks); 51 52 System.out.println("sl"+product_id); 53 System.out.println("sl"+product_genre_code); 54 System.out.println("sl"+product_name); 55 System.out.println("sl"+product_maker); 56 System.out.println("sl"+product_price); 57 System.out.println("sl"+product_stock); 58 System.out.println("sl"+product_sales); 59 System.out.println("sl"+product_remarks); 60 61 t_productBean t_product = new t_productBean(product_id,product_genre_code,product_name 62 ,product_maker,product_price,product_stock,product_sales,product_remarks); 63 64 System.out.println( 65t_product.getproduct_id()); 66 67 slList.add(t_product); 68 } 69 70 }catch(SQLException e) { //例外SQL例外あり 71 e.printStackTrace(); 72 return null; 73 }finally { //catchがなくても必ず実行 74 //データベース切断 75 if(conn != null) { 76 try { 77 conn.close(); 78 }catch(SQLException e) { 79 e.printStackTrace(); 80 return null; 81 } 82 } 83 } 84 return slList; 85 } 86}

servlet

1package servlet; 2 3import java.io.IOException; 4import java.util.ArrayList; 5import java.util.List; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14import model.Selectlogic; 15import model.Updatelogic; 16import model.t_productBean; 17 18@WebServlet("/ProductUpdate") 19public class ProductUpdate extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 22 public ProductUpdate() { 23 super(); 24 } 25 26 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 response.setCharacterEncoding("UTF-8"); 28 29 String product_id_parameter = request.getParameter("product_id"); 30 String product_name = ""; 31 String product_genre_code = ""; 32 String product_maker = ""; 33 int product_price = 0; 34 int product_stock= 0; 35 int product_sales= 0; 36 String product_remarks = ""; 37 38 Integer product_id = Integer.parseInt(product_id_parameter); 39 40 41 t_productBean T_product = new t_productBean(product_id,product_genre_code,product_name 42 ,product_maker,product_price,product_stock,product_sales,product_remarks); 43 44 Selectlogic.execute(T_product); 45 46 List<t_productBean>productList = new ArrayList<t_productBean>(); 47 productList.add(new t_productBean(product_id,product_genre_code,product_name,product_maker,product_price,product_stock,product_sales,product_remarks)); 48 49 request.setAttribute("productList", productList); 50 RequestDispatcher rd = request.getRequestDispatcher("/ProductUpdate.jsp" ); 51 rd.forward(request,response); 52 } 53 54 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 55 request.setCharacterEncoding("UTF-8"); 56 57 //formの値を取得 58 String product_id_parameter = request.getParameter("product_id"); 59 String product_genre_code = request.getParameter("product_genre_code"); 60 String product_name = request.getParameter("product_name"); 61 String product_maker = request.getParameter("product_maker"); 62 String product_price_parameter = request.getParameter("product_price"); 63 String product_stock_parameter = request.getParameter("product_stock"); 64 String product_sales_parameter = request.getParameter("product_sales"); 65 String product_remarks = request.getParameter("product_remarks"); 66 67 switch (product_genre_code) { 68 case "指定なし": 69 product_genre_code ="1"; 70 break; 71 72 case "時計": 73 product_genre_code ="2"; 74 break; 75 76 case "電子機器": 77 product_genre_code ="3"; 78 break; 79 80 case "携帯": 81 product_genre_code ="4"; 82 break; 83 } 84 85 //String型をintに変換 86 Integer product_id = Integer.parseInt(product_id_parameter); 87 Integer product_price = Integer.parseInt(product_price_parameter); 88 Integer product_stock = Integer.parseInt(product_stock_parameter); 89 Integer product_sales = Integer.parseInt(product_sales_parameter); 90 91 92 93 //インスタンス化 94 t_productBean T_product = new t_productBean(product_id,product_genre_code,product_name 95 ,product_maker,product_price,product_stock,product_sales,product_remarks); 96 97 Updatelogic.execute(T_product); 98 99 RequestDispatcher dispatcher = request.getRequestDispatcher("/ProductList" ); 100 dispatcher.forward(request,response); 101 102 } 103 }

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<!DOCTYPE html> 5<html> 6 <head> 7 <meta charset = "utf-8"> 8 <title>更新画面</title> 9 <link rel="stylesheet" type="text/css" href="css/ProductInfo.css"> 10 </head> 11 <body> 12 <form action="" method="post" name="product"> 13 <table><c:forEach var="productList" items="${productList}"> 14 <!--商品IDジャンルコード--> 15 <tr> 16 <th align = "left">商品ID</th><th align = "left">ジャンル</th> 17 </tr> 18 <tr> 19 <td><input name ="product_id" type="text" value="" placeholder="${productList.product_id }"></td><td> 20 <select name = "product_genre_code" > 21 <option selected>${productList.product_genre_code }</option> 22 <option>指定なし</option><option>時計</option><option>電子機器</option><option>携帯</option> 23 </select> 24 </td> 25 </tr> 26 <!--商品名メーカー品--> 27 <tr> 28 <th align = "left">商品名</th><th align = "left">メーカー品</th> 29 </tr> 30 <tr> 31 <td><input name = "product_name" type="text" placeholder=${productList.product_name }></td> 32 <td><select name = "product_maker"> 33 <option selected>${productList.product_maker }</option> 34 <option>指定なし</option><option>パナソニック</option><option>ソニー</option><option>シャープ</option> 35 </select> 36 </td> 37 </tr> 38 <!--金額と在庫--> 39 <tr> 40 <th align = "left">金額</th><th align = "left">在庫数</th> 41 </tr> 42 <tr> 43 <td><input name = "product_price" type="text" placeholder=${productList.product_price }></td> 44 <td><input name = "product_stock" type="text" placeholder=${productList.product_stock }></td> 45 </tr> 46 <!--販売個数--> 47 <tr> 48 <th align="left">販売個数</th> 49 </tr> 50 <tr> 51 <td><input name="product_sales" type="text" placeholder=${productList.product_sales }></td> 52 </tr> 53 <!--備考テキストエリア--> 54 <tr><!--備考--> 55 <th align="left">備考</th> 56 </tr> 57 </c:forEach> 58 </table> 59 <table> 60 <tr><!--テキストエリア--> 61 <td><textarea name="product_remarks"></textarea></td> 62 </tr> 63 </table> 64 <input class="sctn" type="image" alt="登録" width="50" height="30" src="img/sc.png" /> 65 </form> 66 </body> 67</html>

試したこと

・DAOの時点でslListに値が格納されていない可能性を考慮してコンソール出力したが問題なかった。

補足情報

このソースコードはクラスの一部であり、ほかにもメソッドがあります。

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

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

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

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

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

A-pZ

2018/09/26 07:41

サーブレットから取得できないとありますが、サーブレットのコードがあると回答が得られるでしょう。
dice142

2018/09/26 07:42

どこでどういうエラーが起きているのでしょうか?質問文からはコンパイルエラーを解決できないというように読めるのですが、試したことを見ると解決されているように見えます。
m.ts10806

2018/09/26 07:43

あくまで返すためのデータを作っているだけのコードが提示されているように見受けられますが、実際にエラーが起きている、jspに渡すレスポンスのコード、表示側で受け取っているコードはどのようになっているのでしょうか。
mutani

2018/09/26 08:09

A-pZ様 ご連絡ありがとうございます。ご指摘くださいましたサーブレットを質問文に記載いたしました。ご指摘ありがとうございました。
mutani

2018/09/26 08:11

dice142様 ご連絡ありがとうございます。 プログラム自体は正常に動作するようにはなりましたが、DAOクラス内で取得した値をうまくJSPまで持っていけないといった感じで、現在の実行結果がすべて「0」や「1」となってしまいます。
mutani

2018/09/26 08:14

mts10806様 ご連絡ありがとうございます。JSPに渡す処理を行っているサーブレットとJSP(受け取り側のコード)を追記いたしました。 お忙しいとは思いますがご助言、ご教授の程よろしくお願いいたします。
dice142

2018/09/26 08:17

コンパイルエラーが解消されているのでしたら、質問文の「コンパイルエラーになる」はノイズとなるので修正してください。
mutani

2018/09/26 08:23

dice142様 ご指摘いただきました箇所を修正いたしました。ご指摘ありがとうございました。
dice142

2018/09/26 08:30

「selectで取得した値をリストに格納して、servletを介してJSPに出力する。」とありますが、どこにselectで取得している部分があるのでしょうか?提示されたコード内には見当たらない気がしますが。
mutani

2018/09/26 08:57

dice142様 ご連絡ありがとうございます。DAOクラスの10行目にselect文があります。ご確認いただければ幸いです。
dice142

2018/09/26 09:00

select文ではなくselectメソッドの方ですね。DAOクラスのselectメソッドでslListをreturnしていますが、このselectメソッドはどこで呼び出しているのでしょうか?
mutani

2018/09/26 09:07

dice142様 申し訳ございません。勘違いをしておりました。ご指摘いただいた件ですが、一度servletで呼び出してみましたが構文エラーとなりいろいろいじっている間にエラーはなくなりましたが恐らくそのせいで呼び出せていないと思われます。
m.ts10806

2018/09/26 09:09

そこを解消しないとサーブレット、jsp以前の問題ですね。「エラーが出ないように修正」は根本解決になっていません。質問としてはエラーが出るコードとエラー内容を記載するのが具体的な回答を得られるやり方です。
m.ts10806

2018/09/26 10:10 編集

重複コメントのため削除
dice142

2018/09/26 09:11

? 呼び出していないのならそもそもの流れがおかしいことになりませんか?DAOのselectメソッドを呼び出さないと値が取り出せないのではないですか?
mutani

2018/09/26 09:18

mts10806様 質問の仕方が悪く申し訳ございません。私が聞きたかったことはservletでの呼び出し方(書き方)です。試したことの部分にエラーが出ないようにしたと書いたことによって誤解を与えてしまいました。申し訳ございません。
mutani

2018/09/26 09:20

dice142様 仰る通りでございます。ですので、質問の4行目に「servlet内のコードの書き方についてご教示いただけないでしょうか。」と記載させていただきました。ですが、試したことに不要な記載をしたため誤解を与えてしまいました。申し訳ございません。
guest

回答2

0

ベストアンサー

ようやく合点がいきました。
要は「サーブレットからDAOのselectメソッドの呼び出し方及び値の受け取り方がわからない」ということですね。

ただ、質問者様のために(というか確認の意を込めて)いくつか整理しておきます。
まず実行の順ですが、以下のようになっているはずです。

  1. (おそらく)なんらかのJSPからサーブレットにGETメソッドもしくはPOSTメソッドでデータを送る
  2. サーブレットでformの値を受け取り、Beansインスタンスに格納
  3. DBとのやりとりのためにDAOのselectメソッドを呼び出し、リストを取得
  4. JSPにデータを渡し、JSPで表示処理を行う

で、おそらく1,2,4の手順は既にもしくは仮に実装できているもので、
3の手順の方法がわからないので、提示したコードにはその部分が抜けた状態で載せてあるんですよね?
(ここで質問者様と回答者側で混乱が発生してた)

さて、slListの取得の方法ですが、以下の手順で行います。

  1. DAOインスタンスの生成
  2. 生成したDAOインスタンスのselectメソッドを呼び出し、なんらかの変数で受け取る

一応コードの書き方とあるので、簡単に載せます。

java

1DAO hoge = new DAO(); 2ArrayList<Bean> huga = hoge.select(bean);

こんな感じで取得できるはずです。
(変数名とかクラス名とか適当なので補ってください。)


一応質問されてたのはここまでですが、手順4のサーブレット→JSPのデータの受け渡しが
どうにも上手くいってないような気がしてならないので書きます。
(私の知らない方法でデータの受け渡しができてるのであれば問題ないです。)

普通は、サーブレット側でsetAttributeでスコープに値を保存し、
JSP側でgetAttributeでスコープに保存していた値を取得するように行います。

しかし、mts10806様の仰るようにコード内にgetAttributeがないので
サーブレット側でsetAttributeで保存した値を受け取っていないのではないかと思います。

ともあれ、今回の質問の範囲外ではあるので、その場合は新たにご質問されるとよろしいかと思います。

投稿2018/09/26 09:52

dice142

総合スコア5158

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

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

mutani

2018/09/26 10:01

dice142様 ご回答ありがとうございます。 不手際の多い質問にもかかわらず、丁寧な回答をくださいましてありがとうございます。 今後は分かりやすい質問(要点をまとめた質問)を心がけていきます。 後ほど回答くださいました3のリスト取得部分を実装してみます。 本当にありがとうございます。
dice142

2018/09/26 10:04

情報をまとめるのは難しいですが、徐々に慣れていきましょう。
mutani

2018/09/27 01:23

ありがとうございます。
guest

0

もしかしたら他で設定などしているのかもしれませんが、
提示されたコードを見る限りjsp側でgetAttributeしていないのでそもそも渡された情報を受け取っていないよに見受けられます。

基本的にはsetAttributeされた情報はjspでgetAttributeすることで受け取れます。
ただ気を付けないといけないのは確かObject型で渡されるので正しくキャストした上で受け取る必要がありますので、
jsp側でselectを作っているDAOのクラスをimportするなどして連携させる必要がありますね。

投稿2018/09/26 08:37

m.ts10806

総合スコア80850

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

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

mutani

2018/09/26 08:55

ご回答ありがとうございます。 試しては見ますが、そもそもservletで受け取った値をコンソール出力したときに正しい値を受け取れていないようです。 また、コンソール出力した値とJSPで出力した値は同じ値なので、JSP側で受け取れていると考えております。 さらに質問をするようで申し訳ございませんが、ほかのJSPもこのような書き方で学習を進めてきましたが今後の為にもmts10806様が仰ったようにgetAttributeで値を受け取ったほうが良いのでしょうか。 五月雨式の質問で申し訳ございませんが、ご回答いただけると幸いです。 何卒よろしくお願いいたします。
m.ts10806

2018/09/26 08:59

「このような書き方」がどのような書き方をしているかコードからは今一つ読み取れていませんが・・。 あくまでサーブレットからjspに渡したいのではないのですか? 適当な、例えば「test」とか文字列の受け渡しはきちんとできている前提で話を進めてますよね? 手段は1つではありませんが、コードを読んだ限りで回答しています。 もし関係している情報で提示していない情報があればなるべく全て提示された方が良いように思います。例えばweb.xmlの内容とか。
mutani

2018/09/26 09:25

書き方の質問については、質問文にのせてあるJSPのソースコードのことを指しています。 分かり辛く申し訳ございません。 また、[test]の文字列の受け渡しを行ってみましたが、正常に表示されました。 web.xmlの内容はイマイチわからないので、編集しておりません。
m.ts10806

2018/09/26 10:16

たぶん既に回答で指摘されているように情報整理の粒度と各種機能の理解度にも影響していそうに思います。 文字列の受け渡しをどのように実現されたかわかりませんが、要件を整理して細分化し、少しずつ問題を解決していったほうが良いように思います。 xmlについてはJavaでサーブレットを学ぶ上では必須とも言えるので少しずつ理解していくようにしてください。
mutani

2018/09/27 01:25

ご親切にありがとうございます。 今回の質問の仕方や、問題解決の方法について非常に勉強になりました。 まだまだ未熟ではありますが、精進していきます。
m.ts10806

2018/09/27 01:30

解決したようで何よりです がんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問