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

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

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

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3283閲覧

jspにDBから取得したデータを反映させたい

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/06/28 00:58

編集2021/07/05 02:24

イメージ説明

前提・実現したいこと

初心者のものです。
ID、商品名、単価を表示させるプログラムなのですが、MVCモデルで混乱してしまい、
まずはIDだけでも表示させようと取り組んでおります。
ですが、jspにDBから取得したデータを反映させたいのですが上手くいきません。
ご教授いただければ幸いです。

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

検索処理クラスではShohinBeanオブジェクトにユーザ情報をセットするコードでshohinBean を変数に解決できません
表示画面jspではidを表示させる部分で構文を削除してくださいと出てしまいます。

ID入力画面

HTML(ID入力画面)

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="shift_jis"> 5<title>商品ID入力画面</title> 6</head> 7<body> 8<div align="center"> 9 <form action="search" method="post"> 10 <table> 11 <tr> 12 <td>商品ID:</td> 13 <td><input type="text" name="shohinId"></td> 14 </tr> 15 </table> 16 <input class="button" type="submit" value="検索"> 17 </form> 18 </div> 19</body> 20</html>

BEAN

JAVA

1package jp.co.keyaki.bean; 2public class ShohinBean { 3 private String shohinId; 4 private String shohinName; 5 private int tanka; 6 public void setShohinid(String shohinId) { 7 this.shohinId = shohinId; 8 } 9 public String getShohinid() { 10 return shohinId; 11 } 12 public void setShohinname(String shohinName) { 13 this.shohinName = shohinName; 14 } 15 public String getShohinname() { 16 return shohinName; 17 } 18 public void setTanka(int tanka) { 19 this.tanka = tanka; 20 } 21 public int getTanka() { 22 return tanka; 23 } 24}

検索処理クラス

JAVA

1package jp.co.keyaki.service; 2import java.sql.Connection; 3import java.sql.DriverManager; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7import org.postgresql.util.PSQLException; 8import jp.co.keyaki.bean.ShohinBean; 9public class ShohinSearch { 10 public ShohinBean search(String shohinId) 11 throws ClassNotFoundException, SQLException { 12 Connection connection = null; 13 PreparedStatement preparedStatement = null; 14 ResultSet resultSet = null; 15 ShohinBean shohinBean = null; 16 try { 17 Class.forName("org.postgresql.Driver"); 18 connection = DriverManager.getConnection( 19 "jdbc:postgresql://【ホスト名】/【データベース名】", "【ユーザ名】", "【パスワード】"); 20 String SQL = "SELECT shohin_id FROM tb_shohin WHERE shohin_id = ?"; 21 preparedStatement = connection.prepareStatement(SQL); 22 preparedStatement.setString(1, shohinId); 23 ResultSet rs = preparedStatement.executeQuery(); 24 if (rs.next()) { 25 shohinBean = new ShohinBean(); 26 shohinBean.setShohinid(rs.getString("shohinId")); 27 } 28 } catch (ClassNotFoundException e) { 29 e.printStackTrace(); 30 } catch (PSQLException e) { 31 e.printStackTrace(); 32 } finally { 33 if (resultSet != null) { 34 resultSet.close(); 35 } 36 if (preparedStatement != null) { 37 preparedStatement.close(); 38 } 39 if (connection != null) { 40 connection.close(); 41 } 42 } 43 return shohinBean; 44 } 45 }

商品情報表示画面

jsp

1<%@ page contentType="text/html; charset=Windows-31J" %> 2<%@ page import="jp.co.keyaki.bean.ShohinBean" %> 3<% 4ShohinBean shohinBean = (ShohinBean) session.getAttribute("shohinBean"); 5%> 6<html> 7<head> 8<meta charset="shift-jis"> 9<title>商品情報 検索結果</title> 10</head> 11<body> 12 <div align="center"> 13 <table border="1"> 14 <tr><th>商品ID</th><th><%=shohinBean.getShohinid()%></th></tr> 15 <tr><th>商品名</th><td>ここに商品名を入れる</td></tr> 16 <tr><th>単価</th><td>ここに単価を入れる</td></tr> 17 </table> 18 </div> 19</body> 20</html>

###サーブレット

JAVA(サーブレット)

1package jp.co.keyaki.controller; 2import java.io.IOException; 3import javax.servlet.RequestDispatcher; 4import javax.servlet.ServletContext; 5import javax.servlet.ServletException; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9import jp.co.keyaki.bean.ShohinBean; 10import jp.co.keyaki.service.ShohinSearch; 11public class ShohinController extends HttpServlet { 12 public void doPost(HttpServletRequest request, HttpServletResponse response) 13 throws ServletException, IOException { 14 // forward実行時に遷移するページを指定 15 String target = null; 16 try { 17 // クライアントからのリクエストパラメータ(商品ID)を取得 18 String shohinId = request.getParameter("shohinId"); 19 // 商品IDをもとに、商品情報を検索(JavaBeans処理) 20 ShohinSearch shohinSearch = new ShohinSearch(); 21 ShohinBean shohinBean = shohinSearch.search(shohinId); 22 // 取得した商品情報Beanをリクエストスコープにセット 23 request.setAttribute("shohinBean", shohinBean); 24 // 商品情報表示画面のURLをセット 25 target = "/shohinDisplay.jsp"; 26 } catch (Exception e) { 27 e.printStackTrace(); 28 // システムエラー画面のURLをセット 29 target = "/systemError.jsp"; 30 } finally { 31 ServletContext context = this.getServletContext(); 32 RequestDispatcher dispatcher = context.getRequestDispatcher(target); 33 dispatcher.forward(request, response); 34 } 35 } 36}

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 id="WebApp_ID" version="3.1"> 6 <display-name>lesson6</display-name> 7 <servlet> 8 <servlet-name>search</servlet-name> 9 <servlet-class>jp.co.keyaki.controller.ShohinController</servlet-class> 10 </servlet> 11 <servlet-mapping> 12 <servlet-name>search</servlet-name> 13 <url-pattern>/search</url-pattern> 14 </servlet-mapping> 15 <welcome-file-list> 16 <welcome-file>index.html</welcome-file> 17 </welcome-file-list> 18</web-app>

ここにより詳細な情報を記載してください。

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

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

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

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

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

K_3578

2021/06/28 01:06

ソースコードはMarkDownのcode機能で提示してください。 ソースコードを選択してから<code>を押すとコードブロックになるので、後は 「ここに言語名を入力」とある文字列を言語名(Java等)に置き換えてください。
K_3578

2021/06/28 01:19

それぞれのコードがどういうものかパッとわかるように見出しは残しても良かったかもしれません。
退会済みユーザー

退会済みユーザー

2021/06/28 01:30

失礼いたしました。見出しを追加いたしました。
m.ts10806

2021/06/28 01:36

想定のデータが取得できているなら、あとは文字列なり配列なりオブジェクトを渡すときと変わりませんがそのあたりは認識問題ないですか?
K_3578

2021/06/28 01:40

エラーメッセージ出ているなら、そのままコピペで載せて頂いた方が良いです。
退会済みユーザー

退会済みユーザー

2021/06/28 01:46

ID入力画面からボタンで送信すると、 HTTPステータス 500 - An exception occurred processing JSP page /shohinDisplay.jsp at line 14 とエラーが表示されます、、
guest

回答1

0

ベストアンサー

サーブレット
request.setAttribute("shohinBean", shohinBean);
jsp
ShohinBean shohinBean = (ShohinBean) session.getAttribute("shohinBean"); %>

セットしたのはリクエストですが
ゲットしようとしているのはセッションです。
nullに対してキャストしようとしているエラーでは?(画面ではなくコンソールやログ確認のこと)

セット、ゲット共にいずれかに統一してください。

投稿2021/06/28 02:00

m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2021/06/28 02:13

requestに統一して、jspを ShohinBean shohinBean = (ShohinBean) request.getAttribute("shohinBean"); に変更したのですが、 HTTPステータス 500 - java.lang.NullPointerException のエラー表示が出てしまいました、、
m.ts10806

2021/06/28 02:18

では、結局回答の通りnullに対するキャストに変わりないと思います。 デバッグし、想定の値が想定のとおり来ているか、それにより想定の値が取得できているか確認してください
退会済みユーザー

退会済みユーザー

2021/06/28 08:07

以下のサーブレットでスコープにセットする段階でshohinIdもshohinBeanもnullだったのですが、どう修正したらよいのか分からない状態です、、 request.setAttribute("shohinBean", shohinBean);
m.ts10806

2021/06/28 08:20

つまり検索結果がnullもしくは0件ですね。 入力からの整合性を確認すると良いです。 検索入力と思われる画面の要素のname属性の属性値はshohin_id 検索処理を行うサーブレットで受け取ろうとしているパラメータと一致してますか?
退会済みユーザー

退会済みユーザー

2021/06/29 06:33

request.getParameter("shohinId")の段階でnullであったため、 name属性との相違を疑いましたが一致しております。 他に考えられる原因はありますでしょうか。
m.ts10806

2021/06/29 07:05

提示されたコードが全てなら違うので確認してほしいと指摘しました。 入力フォーム∶shohin_id サーブレット∶shohinId 一致していません。
退会済みユーザー

退会済みユーザー

2021/06/29 07:18

失礼いたしました。編集が更新されておりませんでした。 提示させていただいたコード(一致させたもの)で request.getParameter("shohinId")がnullとなっております。
dodox86

2021/06/29 07:49

@質問者さん > 編集が更新されておりませんでした。 > 提示させていただいたコード(一致させたもの)で 元のコードが違っていたのと名前の不一致で迷走しているようですが、DBからクエリーした時点で間違っていますね。SQLはこうですが、 > String SQL = "SELECT shohin_id FROM tb_shohin WHERE shohin_id = ?"; ResultSetから取り出すときはこうなっています。この時点で不一致です。 > shohinBean.setShohinid(rs.getString("shohinId"));
m.ts10806

2021/06/29 08:05

確かにそこもですね。 存在しないキー参照でException拾いそうに思います。 SQLExceptionかな
退会済みユーザー

退会済みユーザー

2021/06/29 09:39

ご回答ありがとうございます。 カラム名がshohin_idとなっているため、サーブレットをshohin_idの方をすると表示できました! ただ、サーブレットのコードが編集不可なのですが、shohinIdでSQLからshohin_idの情報を取得することは可能でしょうか?
m.ts10806

2021/06/30 07:25 編集

なぜそこにあるコードが編集不可なのか分かりかねますが、SQLが書かれたJavaが編集できるなら可能。 できないなら不可能です。 そこで存在しない列をgetStringしてるので。 同じプログラム内で編集可不可が分かれてるとは考え難い。(課題なら出題者に抗議する内容。取得できるコードになってない)
dodox86

2021/06/30 10:34

なぜこちらの回答が低評価なのでしょうね。おおもとの質問内容が途中で変更されているので噛み合わなくなっていたのを誤解されたのでしょうか。 (打ち消しの高評価をさせていただきました) SQLが書かれたサーブレットのコードを変更できないのであれば対応は不可能だと私も思います。それに、「shohinIdでSQLからshohin_idの情報を取得すること」という要望はもう別の質問と言えます。
退会済みユーザー

退会済みユーザー

2021/06/30 10:42

皆様ご丁寧にありがとうございました!
退会済みユーザー

退会済みユーザー

2021/06/30 13:04

課題であったため、元々存在していたサーブレットを基にプログラムの作成をしていて混乱しておりましたが、 サーブレットを自身で作成し、カラム名にそろえたところ実行することができ、mvcモデルの仕組みをより理解を深められました! 色々とご迷惑をおかけいたしました、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問