- PR -

JSPとサーブレットでのArrayListの受け渡しについて

1
投稿者投稿内容
reiko
会議室デビュー日: 2004/10/27
投稿数: 3
投稿日時: 2004-10-27 09:39
はじめまして。初めて投稿させていただきます。
よろしくお願いいたします。

サーブレットで取得したDBからの検索結果をJSP側に渡すやり方に
ついて、教えてください。

今は、以下のような形でやろうとしています。
-----
List objArray = new ArrayList(); //ArrayListのインスタンス化
:
objArray = objDb.subExecQuery(objConn, strKey); //検索実行結果をセット
:
request.setAttribute("dbr", objArray.toArray()); //リクエストにセット(☆)
-----

コンパイルはできるのですが、
実行時に(☆)印の行でエラーが発生し、うまくいきません。
HTTPステータス500-という意味不明のエラー画面になります。

ちなみに上のobjDb.subExecQueryは私が作ったメソッドで、
Listを戻します。

色々調べてみているのですが、なぜエラーになるのか、どう
すればいいのか、わからない状態です。

何かご存知の方がいらっしゃいましたら、ご教授いただけないでしょうか?
どうぞ、よろしくお願いいたします。

[ メッセージ編集済み 編集者: reiko 編集日時 2004-10-27 09:47 ]

[ メッセージ編集済み 編集者: reiko 編集日時 2004-10-27 09:48 ]
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-10-27 09:56
引用:

reikoさんの書き込み (2004-10-27 09:39) より:
HTTPステータス500-という意味不明のエラー画面になります。


あなたが「意味不明」と判断したエラー画面の中に、問題解決のヒントがあります。
エラー画面に表示されるものはスタックトレースと呼ばれるもので、
例外が発生した原因と場所を示しています。
その読み方については以下のURLが参考になるでしょう。
http://milkyway.merseine.nu/JavaIntroduction/JavaIntroduction007.html
http://java-house.jp/ml/archive/j-h-b/024782.html#body

subExecQuery()の戻り値が怪しい気がしますが、まずはスタックトレースの解析からですね。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-10-27 10:02
>実行時に(☆)印の行でエラーが発生し、うまくいきません。

対処方法がわからないのであれば、
画面にメッセージ等が出てくるので、コピペするなりして、
回答者にある程度の情報を教えないと適切な回答がしにくいです。

で、
request.setAttribute("dbr", objArray.toArray()); //リクエストにセット(☆)
これを
System.out.println(objArray);
に変更すると、なにが出力されますか。

また
System.out.println(objArray.toArray());
に変更するとどうなりますか?
reiko
会議室デビュー日: 2004/10/27
投稿数: 3
投稿日時: 2004-10-27 11:52
koeさん、かつのりさん
アドバイスどうもありがとうございます。

まずスタックトレースの内容および、JSPとサーブレットのソースですが、
以下のようになっています。
(スタックトレース)
========================================================================
HTTPステータス 500 -

type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外
org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
pkgMe.clsGetFileLink.doPost(clsGetFileLink.java:29)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


原因
java.lang.ClassCastException
org.apache.jsp.me003_jsp._jspService(me003_jsp.java:49)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
pkgMe.clsGetFileLink.doPost(clsGetFileLink.java:29)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

注意 原因のすべてのスタックトレースは、Apache Tomcat/5.0.28のログに記録されています
========================================================================

(JSP)
========================================================================
<%@ page contentType="text/html;charset=Shift_JIS" %>
<%@ page import="java.util.*" %>
<%@ page import="pkgMe.clsBeanFileLink" %>
<jsp:useBean id="dbr" scope="request" class="java.util.ArrayList"/>
<html>
<head>
<link rel=STYLESHEET type="text/css" href="style.css">
<title>me003契約書</title>
</head>
<body>
<table border="0" width="100%"><tr><td class="tdTitle">契約書画面</td></tr></table>
<form name="fm_get_file_link" method="post" action="clsGetFileLink">
<div align="right">
<table border="0"><tr>
<td class="tdComments">ファイル名</td>
<td class="tdComments"><input type="text" size="30"></td>
<td class="tdComments">
<input type ="button" name="bt_search" value="検索(debug用)"
onclick="javascript:self.document.fm_get_file_link.submit();">
</td>
</tr></table></div>
</form>
</body>
</html>
========================================================================

(サーブレット)
========================================================================
package pkgMe;

//必要なクラスを読み込む
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.io.*;
import java.util.*;

//コントロール
public class clsGetFileLink extends HttpServlet {

public void doPost(
HttpServletRequest request
,HttpServletResponse response
) throws ServletException,IOException {

//値をセット
List objArray = new ArrayList();
objArray.add("aaa");
objArray.add("bbb");
objArray.add("ccc");
request.setAttribute("dbr", objArray.toArray());

//検索実行メッセージ
request.setAttribute("msg", "検索しました。");

//画面再表示
getServletConfig().getServletContext().
getRequestDispatcher("/me003.jsp").
forward(request, response);
}
}
========================================================================

スタックトレースを見ると、サーブレットからJSPに制御が渡ってJSPのコードを
実行している時にエラーが発生したと判断して、JSPソース内のuseBeanタグの行
だけを削除して再度実行してみたところ、
今度は正常に表示されました。(サーブレットは変更していない)

useBeanタグで宣言しているクラスと、サーブレット側でsetAttributeしている
オブジェクトのクラスが違うという事なのでしょうか??

答、あるいはヒントなど何でも結構ですので、ご意見をいただければありがたいです。
よろしくお願いいたします。
MINE
会議室デビュー日: 2003/07/02
投稿数: 17
投稿日時: 2004-10-27 12:59
引用:

useBeanタグで宣言しているクラスと、サーブレット側でsetAttributeしている
オブジェクトのクラスが違うという事なのでしょうか??


と思ったのなら、何を設定しているのかを調べてみてはいかがでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-10-27 13:04
toArray()の意味をわかって使用していますか?
toArray()の戻り値をuseBeanで定義した型にはキャストできませんよ。
reiko
会議室デビュー日: 2004/10/27
投稿数: 3
投稿日時: 2004-10-27 13:45
引用:

かつのりさんの書き込み (2004-10-27 13:04) より:
toArray()の意味をわかって使用していますか?
toArray()の戻り値をuseBeanで定義した型にはキャストできませんよ。




はい、toArray()の意味を理解していませんでした。
修正して実行してみましたら、問題なく動作するようになりました。

かつのりさんのご指摘のおかげで解決いたしました。
どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)