Javaの勉強をしながら名刺管理システムを開発しようと考えています。
DB→servlet→jspの流れでDBから持ってきた値を、jspに出力させたいのですが
エラーが出てしまいます。
エラーを出さずに無事に表示させために、お力を貸して頂ければと思いますので宜しくお願い致します。
初心者ですので情報が足りてなく、言葉足らずな部分もたくさんあると思いますので
遠慮なく申しつけて頂ける幸いです。
###発生している問題・エラーメッセージ
An exception occurred processing JSP page /WEB-INF/jsp/Business.jsp at line 20
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
servlet.BusinessServlet.doGet(BusinessServlet.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
###ソースコード
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model.CardData,java.util.List" %>
<%
@SuppressWarnings("unchecked")
List<CardData> cdList = (List<CardData>)request.getAttribute("cdList");
%>
###補足情報
*言語 Java
*環境 eclipse4.5 All in one
windows7
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/10 01:48
回答2件
0
requestスコープのattributecdList
に値が設定されておらず、変数cdList
がnull
になっている可能性が高そうです。
サーブレットで、request.setAttribute("cdList")
を正しく行っているかどうかを確認してみてください。
行っていても、if文などの分岐でそこを通らない可能性などがあれば、それも確認してください。
(追記)
回答ではありませんが、このようなケースは良くあることなので、防止策について書かせていただきます。
JSP側でNullPointerException
が発生すると追っかけにくくなりますので、下記のようにしてサーブレット側で防ぐようにします。
1.DAOのselectメソッドがnull
を返さないようにする
DAOに限りませんが、戻り値がnull
になるようなメソッドはできるだけ書かないようにしましょう。
どのようなケースでnull
を返しているかにもよりますが、SELECTに失敗していれば例外をスローする、検索結果無しの場合は、戻り値がList<Item>
なら、Collections.emptyList()
を返すようにします。
2.分岐によってセットし忘れがないようにする
if文などで、ifの方には書いたけどelseのところでsetAttribute
を忘れてしまうようなケースがあります。
setAttribute
は分岐の中に書かないようにして、かつlist
がnull
でないことを保証するとなお良いです。
例:
lang
1 2List<CDItem> list; 3if ( ... ) { 4 list = dao.findById(id); 5} 6else { 7 list = dao.findAll(); 8} 9 10if (list == null) { 11 throw new ServletException(); // システムエラー 12} 13 14// listがnullでないことが保証される 15request.setAttribute("cdList", list); 16
(追記2)
上記の1について、実装例を書きましたのでリンクを載せておきます。
Java8版 簡易DAOサンプル (Gist)
https://gist.github.com/argius/e71722f5cad6f79227fc
投稿2015/11/10 02:15
編集2015/11/10 12:36総合スコア9388
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/10 02:29
2015/11/10 06:41
2015/11/10 06:47
2015/11/10 06:51
2015/11/10 06:56
2015/11/10 06:56
2015/11/10 06:58
2015/11/10 07:12
2015/11/10 07:15
2015/11/10 07:17
2015/11/10 07:35
2015/11/10 07:54
2015/11/10 07:56
2015/11/10 08:03
2015/11/10 08:25
2015/11/10 08:34
2015/11/10 08:49
2015/11/10 08:50
2015/11/10 08:56
2015/11/10 09:14
2015/11/10 09:14
2015/11/10 09:31
2015/11/10 09:35
2015/11/10 09:46
2015/11/10 09:47
2015/11/10 09:48
2015/11/10 10:08 編集
2015/11/10 10:09
2015/11/10 10:09
2015/11/10 10:10
2015/11/10 10:17
2015/11/10 10:19
2015/11/10 10:27
2015/11/10 10:30
2015/11/10 10:33
2015/11/10 10:35
2015/11/10 10:45
2015/11/10 10:46
2015/11/10 11:06 編集
2015/11/11 01:16
2015/11/11 01:41
2015/11/11 01:47
2015/11/11 01:53
2015/11/11 01:57
2015/11/11 02:04
2015/11/11 02:10
2015/11/11 03:58
2015/11/11 05:29
2015/11/11 05:34 編集
2015/11/11 05:35
2015/11/11 05:41
2015/11/11 05:52
2015/11/11 05:58
2015/11/11 06:06
2015/11/11 06:24
2015/11/11 06:49
2015/11/11 06:52
2015/11/11 07:13
0
ベストアンサー
試しに、
List<CardData> cdList = (List<CardData>)request.getAttribute("cdList");
ではなくて、この部分をnewとかして手動でオブジェクトを詰めてみてください。
投稿2015/11/10 01:57
総合スコア856
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/10 02:05
2015/11/10 02:20
2015/11/10 02:36
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。