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

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

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

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

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

Java

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

servlet

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

Q&A

1回答

4167閲覧

DB接続してその値をservletからjspで画面出力

tanakanakata

総合スコア6

MySQL

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

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

JSP

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

Java

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

servlet

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

0グッド

0クリップ

投稿2017/03/22 11:53

java初心者なのと、初めての利用のため至らないところもありますがよろしくおねがいいたします。
タイトルにも記載しましたが、DBに接続してその値をservletで受け取り、jspで画面出力を行いたいと考えております。
ShopTop.javaからindex.jspで画面出力しようとした際に下記のエラーが発生してしまいました。
プルダウンに入れて、foreachで回そうとしたのですがそもそもjsp側で値を受け取れてなくそこでつまづいております。

jsp側の

// リクエストパラメータの取得 List<ShopItemDto> stif = (List<ShopItemDto>) request.getAttribute("shopTopItemForm"); List<ShopItemDto> stf = (List<ShopItemDto>) request.getAttribute("shopTopForm"); %>

部分を消すとShopTopで値が入っているのを確認いたしましたのでキャストの方法に問題があると思うのですが、見当違いでしょうか?
ご教示のほどよろしくおねがいたします。

構造は
WebContent
ーjsp
ーーtop
ーーーindex.jsp

となっております

###エラーメッセージ

org.apache.jasper.JasperException: An exception occurred processing JSP page /jsp/top/index.jsp at line 11 8: <% 9: String params = "全/角?文字"; 10: String a = URLEncoder.encode( params , "UTF-8"); 11: List<ShopItemDto> stif =(List<ShopItemDto>) request.getAttribute("shopTopItemForm"); 12: List<ShopItemDto> stf =(List<ShopItemDto>) request.getAttribute("shopTopForm"); Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:481) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) shop.ShopTop.doGet(ShopTop.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 原因 java.lang.ClassCastException: shop.ShopTopForm cannot be cast to java.util.List org.apache.jsp.jsp.top.index_jsp._jspService(index_jsp.java:148) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) shop.ShopTop.doGet(ShopTop.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

###ShopTop.java

package shop; import java.io.IOException; import java.sql.SQLException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.Servlet; 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 shop.dto.ShopItemDto; /** * TOPページ用サーブレット */ @WebServlet(name = "ShopTop", urlPatterns = { "/ShopTop" }) public class ShopTop extends HttpServlet implements Servlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ShopTop() { super(); } /** * TOPページ表示内容を取得し、JSPへ返却。<br> * 初期表示は、全商品を取得する。 * * @param request * リスエストパラメータ * @param response * レスポンス * @throws ServletException * @throws IOException */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 返却用Formの生成 ShopTopForm shopTopForm = new ShopTopForm(); ShopTopForm shopTopItemForm = new ShopTopForm(); ShopService shopService = new ShopService(); try { // 商品の取得 List<ShopItemDto> shopItemList = shopService.getTopItem(); List<ShopItemDto> shopItemGroupList = shopService.getTopItemGroup(); // 取得データをTOPページフォームに設定 shopTopForm.setShopItemList(shopItemList); shopTopItemForm.setShopItemGroupList(shopItemGroupList); } catch (SQLException e) { // データ取得エラー // TODO:最終的にエラーページへ遷移させるような作りにします。 e.printStackTrace(); throw new ServletException(e); } // 商品用Formを設定 request.setAttribute("shopTopForm", shopTopForm); request.setAttribute("shopTopItemForm", shopTopItemForm); // 遷移先URLの設定 request.getRequestDispatcher("jsp/top/index.jsp").forward(request, response); response.sendRedirect("jsp/top/index.jsp"); // リクエストパラメータの文字コードを指定 request.setCharacterEncoding("UTF-8"); } /** * ポストで渡された場合もゲットと同じ動作。 * * @param request * リスエストパラメータ * @param response * レスポンス */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } @SuppressWarnings("unchecked") public static <T> T automaticCast(Object src) { T castedObject = (T) src; return castedObject; } }

###index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page import ="java.net.URLEncoder" %> <%@page import="shop.dto.ShopItemDto" %> <%@ page import="java.util.List"%> <%@ page import="java.util.*"%> <% String params = "全/角?文字"; String a = URLEncoder.encode( params , "UTF-8"); // リクエストパラメータの取得 List<ShopItemDto> stif = (List<ShopItemDto>) request.getAttribute("shopTopItemForm"); List<ShopItemDto> stf = (List<ShopItemDto>) request.getAttribute("shopTopForm"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> <meta name="keywords" content="キーワード" /> <meta name="description" content="紹介文" /> <title>ホームページ・タイトル</title> <link rel="stylesheet" href="../../css/style.css" /> </head> <body> <!-- メイン --> <div id="main"> <!-- メインコンテンツ --> <div id="container"> <div id="contents"> <p><img src="../../img/line.gif" alt="" border="0" /></p> <h2>商品検索</h2> <form action="/test_ec/ShopTop" method="post"> <table> <tr> <td style="padding: 5px 10px;"> 商品グループ: </td> <td> <select name="itemGroup" style="width:130px;height:25px;"> <option value="0"></option> <c:forEach var="itemGroup" items="${shopTopItemForm.shopItemGroupList}"> <option value="${itemGroup.groupCode}"> <c:out value="${itemGroup.groupName}" /> </option> </c:forEach> </select> </td> <td style="padding: 5px 10px;"> 価格: </td> <td> <select name="priceMin" style="width:130px;height:25px;"> <option value="0">下限なし</option> <option value="1000">1000円</option> <option value="2000">2000円</option> <option value="3000">3000円</option> <option value="4000">4000円</option> <option value="5000">5000円</option> <option value="10000">10000円</option> </select> ~ <select name="priceMax" style="width:130px;height:25px;"> <option value="0">上限なし</option> <option value="1000">1000円</option> <option value="2000">2000円</option> <option value="3000">3000円</option> <option value="4000">4000円</option> <option value="5000">5000円</option> <option value="10000">10000円</option> </select> </td> </tr> <tr> <td style="padding: 5px 10px;"> ソート: </td> <td > <select name="sort" style="width:130px;height:25px;"> <option value="0"></option> <option value="asc">価格が低い順</option> <option value="desc">価格が高い順</option> </select> </td> </tr> <tr> <td colspan="2"> <button type="submit" class="button button-khaki"> <span>検索</span> </button> </td> </tr> </table> </form> <p><img src="../../img/line.gif" alt="" border="0" /></p> <h2>商品の一覧</h2> <c:forEach var="item" items="${shopTopForm.shopItemList}" varStatus="status"> <p class="left_box"> <img src='<c:out value="${item.image}"/>' alt="" border="0" style="widht:50px;height:50px;"/> <a href=" <c:url value="/ShopDetail"> <c:param name="itemCode" value="${item.itemCode}"/> </c:url> "> <br/> <b><c:out value="${item.itemName}"/>:</b> <b><c:out value="${item.price}円"/></b> <br /> </a> <br clear="left"> </p> </c:forEach> <br clear="all"> <p><img src="../../img/line.gif" alt="" border="0" /></p> <br /> <p class="back"><a href="#header">▲ページトップに戻る</a></p> <br /> </div> </div> <!-- メインコンテンツ終わり --> </div> <!-- メイン終わり --> </body> </html>

###補足情報
mac、tomcat8.5

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

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

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

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

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

guest

回答1

0

ShopTopForm shopTopForm = new ShopTopForm();

ShopTopForm shopTopItemForm = new ShopTopForm();

request.setAttribute("shopTopForm", shopTopForm);
request.setAttribute("shopTopItemForm", shopTopItemForm);
しているということは、
List<ShopItemDto> stif = (List<ShopItemDto>) request.getAttribute("shopTopItemForm");
List<ShopItemDto> stf = (List<ShopItemDto>) request.getAttribute("shopTopForm");

ではなく、
ShopTopForm stif = (ShopTopForm) request.getAttribute("shopTopItemForm");
ShopTopForm stf = (ShopTopForm) request.getAttribute("shopTopForm");
としなければ値は受け取れないのではないでしょうか
どうも
List型に入っている
List<ShopItemDto> shopItemList = shopService.getTopItem();
List<ShopItemDto> shopItemGroupList = shopService.getTopItemGroup();

request.setAttributeして送りたがっているように思えるのですが、
それをしている部分も、受け取っている部分もないのではないでしょうか

投稿2017/03/22 13:06

編集2017/03/22 13:06
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tanakanakata

2017/03/22 16:10

ご回答ありがとうございます、勉強不足で申し訳ありません。 ご指摘されて初めて気がつきました…お恥ずかしい限りです。 ご指摘された部分を踏まえて ShopTopForm stif = (ShopTopForm) request.getAttribute("shopTopItemForm"); ShopTopForm stf = (ShopTopForm) request.getAttribute("shopTopForm"); を追記したり、本来 List<ShopItemDto> shopItemList = shopService.getTopItem(); List<ShopItemDto> shopItemGroupList = shopService.getTopItemGroup(); を受け取りたかったので、それに対応するsetとgetも記載したのですが、index.jspではnullのままでした…。 web.xml等も修正したのですがエラーも出ておらず見当がつかない状態です。 よろしければ調べ方などのご教授を願えますでしょうか? 無理を言ってしまい申し訳ありませんが、何卒よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2017/03/22 17:03 編集

再度読んでみると、どうも上記で私が回答した内容は見当違いで、その部分を訂正する必要はなかったようです 上記で私が指摘した部分は shopTopForm.setShopItemList(shopItemList); shopTopItemForm.setShopItemGroupList(shopItemGroupList); でおそらくshopTopForm及びshopTopItemFormのインスタンス内にList<ShopItemDto>変数の内容を配置しているのでその後shopTopForm及びshopTopItemFormをsetAttributeで送れば jsp側に情報は伝わる正しい書き方でした 不要な訂正なので 上記の質問内に記述されたコードにとりあえず戻すべきかと思います
退会済みユーザー

退会済みユーザー

2017/03/22 17:34 編集

index.jspの 上から五行目の部分が <%@page import="shop.dto.ShopItemDto" %> になっていますが <%@ page import="shop.dto.ShopItemDto" %> のように、@とpの間に半角スペースを一つ入れるのではないでしょうか 11: List<ShopItemDto> stif =(List<ShopItemDto>) request.getAttribute("shopTopItemForm"); この部分でエラーが出るのは、ShopItemDtoクラスがインポートされていない時に起きる事態のように思えます 他のimportはうまくいってるようなのに、このクラスだけがインポートされていない時に起きそうなエラーが出ています そして、他のimportでは離れている <%@ とpage が このクラスをインポートするための行である <%@page import="shop.dto.ShopItemDto" %> の部分だけスペースなしになっています この部分がエラーの原因である可能性が高いのではないかと思います 上記回答は完全に見当違いでしたが、改めてエラーの原因の可能性がある部分を指摘させていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問