マンガでよめる痔のこと・薬のこと

初歩的な質問ですみません。
下記環境で、Javaを勉強しています。
教材 :やさしいJava 活用編 Lesson8 Sample5
実行環境:j2sdk1.4.1_07 (教材では、j2sdk-1_4_0)
Tomcat 5.0(教材では、Tomcat-3.2.3)
IE6.0
サーブレットでリクエストを受付け、JavaBean経由でDBに接続(Access2000を利用)しDBの中身をJSPで表示するいう流れです。サーブレットのURLを指定して実行してもjspページには何も表示されません。
ログファイルには下記エラーが記述されています。
勘違いか、何らかの初歩的なミスだと思いますが、解決方法が見つかりません。解決方法をご存知の方教えて下さい。よろしくお願いします。
尚、JDBC-ODBCドライバを使用していますが、サーブレットからではなくJavaアプリからではAccess2000のDB参照更新が出来ています。サーブレットから(JavaBean経由)だとうまくいかないという事象です。

java.sql.SQLException: [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6879)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7036)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3028)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at CarDB.CarDBBean.<init>(CarDBBean.java:22)
at Sample5.doGet(Sample5.java:16)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
~略~

このQ&Aに関連する最新のQ&A

A 回答 (6件)

#5の補足です。



ここでは、海外のサイトの内容などにより、Tomcat5のバグではないか、との安易な憶測をしてしまいましたが、もうちょこっとだけ調べ直してみたところ、どうやらそうではなさそうです。(Apache Software Foundationのみなさん、ごめんなさい。)

主な原因は、やっぱしURLにありそうです。(たぶん、Windowsプラットフォーム限定だと思われる。)

まず初めに、以下のサイトを御覧になってください。(ステータスは、「修正しないでしょう」で閉じています。)
[Bug ID]4093794
[Synopsis]JDBC-ODBC driver does not accept DSN-less connection URLs
http://bugs.sun.com/bugdatabase/view_bug.do?bug_ …

で、そこから派生するMicrosoftの公式サイト
http://support.microsoft.com/kb/q165866/

「DSNレス接続」に関する分かりやすい解説
http://www.geocities.co.jp/SiliconValley-PaloAlt …

以下のサイトもたまたま見付けましたので、開発ソフトは「Visual J#」ですが、質問者さんにはもう一度、データソース名がJavaソースコード内と一致しているのかどうか(スペースが前後にないか、もしくは入っているのかどうかなど)の確認をお願いします。
http://msdn2.microsoft.com/ja-jp/library/9bbt582 …

Javaで「DSNレス接続」をする方法については今も分かりませんが、もしかしたらデータベースのカテゴリ内で質問すれば、何かいい方法が見付かるかも知れません。
    • good
    • 0
この回答へのお礼

色々と有難うございます。
精鋭揃いのApache Software FoundationにあってTomcat5のこうした形でのバグは確かに考えにくいですね。
データソース名は再度確認しましたが問題ないという認識です。
MySQLで実験してみようとしていますが、ルートパスワードを忘れてしまいログインすらできず。そちらの対応にいま苦労しています。
DSNレス接続についても少し勉強してみます。

お礼日時:2006/08/23 22:27

>もしOffice2000Proをお持ちでしたらAccessも同梱されていると思いますので、当該ソースでアクセス可能かどうか実験してみていただけませんでしょうか。


小生の自宅にあるOffice XPは、Accessが同梱されていないタイプです。(とほほ…。)ただ、[JavaHouse-Brewers:45130]のスレッド内では、Access2000にも接続できていたそうですので、RDBMS固有の問題ではなく、環境によっては出来るものもあれば、出来ないものもあるらしいとのことです。

その他にも、以下のサイトの過去ログ[1043]では、JDBC:ODBCのURL指定方法に問題があるのではないかという所まではきているのですが、そこで終っています。
http://www.hellohiro.com/bbs/7.html

国内のサイトでは、これが限界でしょう。なので、今度は海外へ飛びます。

まず最初は、公式サイトから。
http://forum.java.sun.com/thread.jspa?threadID=7 …
このサイトの一番下から2番目の回答の所では、jdk 1.5のregisterDriverメソッドを使えばいいと、書かれています。以下のサイトの3番目でも、Windowsのregistryに関する記述がありますが、信憑性については微妙です。
http://www.softwaretree.com/products/jdx/faq/trb …

他にも、こちらのサイトでは、最終的に質問者さん自身が次のように述べています。
http://www.thescripts.com/forum/thread18803.html
「The problem is not url, because it run on java class but not with jsp.
Probably the problem is a tomcat configuration or bug.」

実際に、以下のサイトでもTomcat 4.0までは正常に動いていたのに、Tomcat 5.0にアップグレードしてから急にデータベースに接続できなくなった、と言っています。
http://forum.java.sun.com/thread.jspa?threadID=5 …

以上を踏まえた上で、最終的には以下のような対応になるかと。
1jdk 1.5をインストールして、registerDriverメソッドを使ってみる。
2Tomcat 4の最新バージョンをインストールして、そちらからもデータベース接続できないか、試してみる。
3ACCESS2000をあきらめて、他のフリーRDBMS(MySQLやPostgreSQLなど)に乗り換えてみる。
    • good
    • 0

NO1の者です。


あのあの、これも違うとおもうのですが一様。
DBの更新は出来るってことですよね??
SessionをつかってないからBeansが活かされてないのかな?って思うのですが・・ちがいますよね^^;
また考えてお答えしますね。
    • good
    • 0
この回答へのお礼

ご回答有難うございます。

Sessionを使うのはユーザを特定管理するためですよね。
それは実際はクッキーとしてWebブラウザに文字列を保存している事になるので、初回からアクセスできないというのはもっと根本的な原因かと思うのですが。。。
実験してみますね。

お礼日時:2006/08/21 21:30

インフォシークのトップページにて、以下の一文をまるごとコピペして、検索。

すると、java-houseのサイトを発見できます。

「データソース名および指定された既定のドライバが見つかりません。」

[JavaHouse-Brewers:33100]の一番下の方にあるスレッドからさらに、[JavaHouse-Brewers:27392]のスレッドが見付かります。これによると、ODBCのデータソース設定に起因しているそうです。

33100は、「Access97」で、27392の方は「SqlServer 6.5」とのことですが、エラーの内容がほぼ同じなのでこれじゃないかと思います。ただ、「Access2000」の方は使用したことがないので、動作未確認です。

それ以外で考えられることとしては、接続する際のユーザ名を指定していないことでしょうか?ここのサイトの過去ログでもよく出てきますが、ユーザ名を""にしていると最初の接続の時のみ、なかなかうまくいかないことがあります。(パスワードは何も指定していなければ、""でもOK。)私自身、Linux+MySQLにて、なかなか原因が分からず、苦労したことがあります。

質問者さんの場合は、引数が「usr」となっているので、そこに何か適当の文字列を設定してから、再度確認してみてください。(通常、Windowsでは、「admin」、Linuxでは「nobody」を使うことが多いです。)
    • good
    • 0
この回答へのお礼

ご回答有難うございます。

JavaHouse-Brewersの記事については当方でも確認し、
アクセス権限に問題があるのかを試してみました。
■データソースはユーザーデータソースに指定してもシステムデータソースに指定しても結果は同様(SQLExceptionの発生)でした。
■また、ユーザ名を""でなくAdministratorとしても結果は同様でした。

もしOffice2000Proをお持ちでしたらAccessも同梱されていると思いますので、当該ソースでアクセス可能かどうか実験してみていただけませんでしょうか。

依然原因が不明です。

お礼日時:2006/08/21 21:17

>データ ソース名および指定された既定のドライバが見つかりません


とあるので、文字通りデータソース名が間違っているのでしょう。
ODBCの設定をして、Javaアプリからアクセスできているなら、データソースの設定自体はできているはずです。
それが見つからないなら、おそらく名前を打ち間違えていませんか?

>at CarDB.CarDBBean.<init>(CarDBBean.java:22)
この辺が怪しいです。JDBCDriverManager.getConnectionに渡している引数をチェックしてください。
    • good
    • 0
この回答へのお礼

ご回答いただきまして有難うございます。

CarDBBean.javaでは、次のように処理しています。
//接続の準備
String drv = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:CarDB";
String usr = "";
String pw = "";

//データベースへの接続
Class.forName(drv);
Connection cn = DriverManager.getConnection(url, usr, pw);

JavaアプリからはCarDB.mdbにアクセスできたので
引数には問題ないかと思うのですが・・・。

お礼日時:2006/08/20 11:56

こんばんは^^


その本持ってないので何ともいえませんがもしかして??って思った事を書かせていただきますね。
アクセスもSQL文ですよね??
Connectionミス。
トムキャットが立ち上げってない。(再起動とか)
SQL構文ミス。
importでsql.*;しちゃったほうが・・してたらごめんなさい。
JSPがWeb-infに入ってる。
などだと思うのですが・・、全部やってるよ!って感じでしたらごめんなさい。
もう少し心当たり探ってみますね。
    • good
    • 0
この回答へのお礼

すいません。先日お礼の投稿をさせていただいたつもりでいたのですが、表示されていないようですので再度投稿いたします。

ご指摘いただいた点はいずれも問題ありませんでした。
TOMCATは正常に動いており、SQLも正しいと思います。
JSPの配置も問題ありませんでした。

お礼日時:2006/08/20 12:04

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QBeanにてのDB接続方法

こんばんは、こちらの皆様には大変お世話になっております。

早速ですがまた質問です^_^;
今MVCモデルを使って社員データをDBにいれる簡単なプログラムを作っているのですが、DB接続がうまくいきません。というよりも私の考え方で合っているのかが定かではないのですが…。
BeanのほうでDB接続のメソッドを作って、それをサーブレットで使おうと思っているのですが、Beanクラスのコンパイルができないんです。(画面表示担当のJSPから直接DBへ接続するぶんにはなんの問題もありません)
Beanにはいろんなメソッドを作るつもりで、DBへの指示のSQL文も一つ一つメソッド(データを追加したり、削除したり)を作るつもりでいます。
問題はメソッドの中でDB接続の処理をしてしまうと、別のメソッドでStatementオブジェクトが使えなくなってしまうことです。
DB接続のメソッドは戻り値も引数もなく、DBへ指示を出すメソッドはその時々に合ったものにしようと考えています。この引数をうまく使うのかなぁ、と思いつつも良い案が浮かびません。それとも根本的に考え方が間違っているのでしょうか?

皆様お忙しいとは思いますがご教示のほど、宜しくお願いいたします<(_ _)>

こんばんは、こちらの皆様には大変お世話になっております。

早速ですがまた質問です^_^;
今MVCモデルを使って社員データをDBにいれる簡単なプログラムを作っているのですが、DB接続がうまくいきません。というよりも私の考え方で合っているのかが定かではないのですが…。
BeanのほうでDB接続のメソッドを作って、それをサーブレットで使おうと思っているのですが、Beanクラスのコンパイルができないんです。(画面表示担当のJSPから直接DBへ接続するぶんにはなんの問題もありません)
Beanにはいろんなメソ...続きを読む

Aベストアンサー

>今MVCモデルを使って社員データをDBにいれる簡単なプログラムを作っている

という文面を伺う限り、ControllerであるサーブレットがJDBC接続を呼び出すよりは、
ModelであるJavaBeansにJDBCをカプセルしたほうが良いと思います。
理由は、MVCアーキテクチャが生まれた背景にあります。なぜMVCにするのか、考えて見てください。

例えば、JavaBeansを以下のようにします。

public class EmployeeModel {
private String id;
private String name;
// アクセサ省略

public void create(){
Connection conn = ・・・
  ・・・
}
}

という感じです。
Servletは、
メソッド毎にConnection接続を書くことになるので、接続に関する操作をまとめたクラスを一つ作っておくと便利です。

具体的なソースを載せて、

・こう書いたのだけど、コンパイルが通らない。どうして?orどうすれば良いか?

みたいな問いかけをすれば、具体的なアドバイスも集まると思いますよ。

>今MVCモデルを使って社員データをDBにいれる簡単なプログラムを作っている

という文面を伺う限り、ControllerであるサーブレットがJDBC接続を呼び出すよりは、
ModelであるJavaBeansにJDBCをカプセルしたほうが良いと思います。
理由は、MVCアーキテクチャが生まれた背景にあります。なぜMVCにするのか、考えて見てください。

例えば、JavaBeansを以下のようにします。

public class EmployeeModel {
private String id;
private String name;
// アクセサ省略

...続きを読む

QjavaでDBから取得したデータのJSP表示

JAVAでDBから取得し
ArrayList shikakuCdList = shikakuCd_Data();
request.setAttribute("shikakuCdList", shikakuCdList);

JSPでコンボボックスに表示しようと思います
<% ArrayList bumonlist = (ArrayList)request.getAttribute("bumonCdList");%>


<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<option value=" (1)ここの記述方法も  "></option>
<% }%>

という記述にしていますが、うまく動きません。
よろしくお願いします。

Aベストアンサー

><% for ( int i = 0; i < bumonlist.size(); i++ ){%>
><option value=" (1)ここの記述方法も  "></option>
><% }%>
この部分ですが、

もし、shikakuCd_Data()の返すArrayListの中身が
JavaBean(下記はTestBean)であれば、

<% for ( int i = 0; i < bumonlist.size(); i++ ){%>
<% TestBean test = (TestBean)bumonlist.get(i); %>
<option value="<%= test.ゲッター %>"></option>
<% }%>

もしくは、useBeanアクションをつかい、
coreライブラリのforEachタグを使って出力する方法もあります。
こちらの方法がお勧めですが。

Qservletからjspへオブジェクトの配列情報を送る方法

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、各情報をsetする。
HttpServletRequestにsetAttributeでFileInfomation情報を付加し、
disp.jspへforwardする。

※以下の方法を考えています。
request.setAttribute("fileinfo1", fileinfo[0]);
request.setAttribute("fileinfo2", fileinfo[1]);
request.setAttribute("fileinfo3", fileinfo[2]);
・・・
(配列でsetAttributeできるのかわからなかったので、
 とにかくファイルの数分setAttributeしてみました)

getServletContext().getRequestDispatcher("/disp.jsp").forward(req, res)

わからないこと:
disp.jspでどのようにFileInfomationの情報を取得し、
内容を参照できるのかがよくわからないのです。
jspの暗黙オブジェクトrequestを使用して、request.getParameterをすると、
返ってくる値がStringのようなので、FileInfomationクラスにならないんですよね?

突っ込みどころ満載の質問かと思いますが、何かアドバイス頂ければと思います。
オブジェクトの配列をsetAttributeしてjspで読み出せる方法があれば、
それもご教授いただけますでしょうか。
よろしくお願いいたします。jsp難しいです・・・。

いつもお世話になっております。echo2002です。

さて、今回は以下のような処理を行いたいのですが、可能なのでしょうか?
”servletで作成したオブジェクトの配列をjspにforwardして表示させる”

こんなような処理を考えています。

構成:FileListServletクラス, FileInfomationクラス, disp.jsp

FileInfomationクラスではファイル名やファイルサイズなどの情報を持ち、
それぞれgetなどのアクセサメソッドを持つとします。

FileListServletクラスでの処理
FileInfomationクラスの配列を作成し、...続きを読む

Aベストアンサー

setなんちゃらメソッドで値を設定したら、getなんちゃらメソッドを呼べば良かったのです。つまり、set/get以下が同名のメソッド同士をセットで使えば良いのです。
今回の場合は、getAttributeメソッドですね。
戻り値はObjectですがこれはキャストすれば良いのです。
FileInfomation 変数 = (FileInfomation)request.getAttribute("fileinfo1");
てな具合です。

なお、getParameterメソッドは、クライアント(ブラウザ)から送信されたパラメータを取得するメソッドです。

さて、話を次の段階に進めて、配列を受け渡しできるか?となりますが、、できます。
サーブレット側で、
request.setAttribute("キー文字列", fileinfo);
として、JSP側で、
FileInfomation[] 変数 = (FileInfomation[])request.getAttribute("キー文字列");
とすれば、良いのです。

QDAOクラスの使い方

ある書籍を参考に勉強しております。以下のDAOクラスのデータ追加に関して使い方がわかりません。
サーブレット、もしくはJSPにどのように書けば、DBにデータを追加できるようになるのでしょうか?
宜しく御願い致します。

package chap11_database.sec03;

import java.sql.*;
import java.util.ArrayList;

public class EmployeeDAO {
//データベースとの接続に必要な情報を保持するフィールド変数
private final static String DRIVER_URL ="jdbc:mysql://192.168.2.200:3306/satoh" + "?useUnicode=true&characterEncoding=utf8";
private final static String DRIVER_NAME = "com.mysql.jdbc.Driver";
private final static String USER_NAME = "root";
private final static String PASSWORD = "1qaz!QAZ";

//接続メソッド
protected Connection createConnection(){
try{
Class.forName(DRIVER_NAME);
Connection con = DriverManager.getConnection(DRIVER_URL, USER_NAME, PASSWORD);
return con;
}
catch(Exception e){
e.printStackTrace();
}
return null;//例外が発生した場合はnullを返す。
}

//切断メソッド
protected void closeConnection(Connection con){
try{
con.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
public ArrayList<Employee> findAll(){
//社員一覧を保持するリスト
ArrayList<Employee> list = new ArrayList<Employee>();

Connection con = null;
try{
//データベースに接続
con = createConnection();

//データベースにSQL文を送信
String sql = "select * from employee";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String address = rs.getString("address");
int tel = rs.getInt("tel");
Date birthday = rs.getDate("birthday");
Employee employee = new Employee(id, name, address, tel, birthday);
//TO(Employeeオブジェクト)を、社員一覧を保持するリス手に追加
list.add(employee);
}
//社員一覧を返す。
return list;

}catch(Exception e){
e.printStackTrace();
return null;
}finally{
//データベースからの切断
closeConnection(con);
}
}

//社員登録メソッド
public void create(Employee emp){
Connection con = null;
try{
//データベースに接続
con = createConnection();

//データベースにSQL文を送信
String sql = "insert into employee values(?, ?, ?, ? ,?)";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setInt(1, emp.getId());
stmt.setString(2, emp.getName());
stmt.setString(3, emp.getAddress());
stmt.setInt(4, emp.getTel());
stmt.setDate(5, emp.getBirthday());
stmt.executeUpdate();

}catch(Exception e){
e.printStackTrace();
}finally{
//データベースからの切断
closeConnection(con);
}
}
}

ある書籍を参考に勉強しております。以下のDAOクラスのデータ追加に関して使い方がわかりません。
サーブレット、もしくはJSPにどのように書けば、DBにデータを追加できるようになるのでしょうか?
宜しく御願い致します。

package chap11_database.sec03;

import java.sql.*;
import java.util.ArrayList;

public class EmployeeDAO {
//データベースとの接続に必要な情報を保持するフィールド変数
private final static String DRIVER_URL ="jdbc:mysql://192.168.2.200:3306/satoh" + "?useUnico...続きを読む

Aベストアンサー

こんばんわ、データの追加に関しての質問に絞っているので一覧表示はできたのでしょうか?

基本的に「public void create(Employee emp)」のメソッドがデータの追加のメソッドになりますので、データを持ったEmployee型のインスタンスを渡すだけでデータの追加になるはずです。

Employee emp = new Emplpyee();
emp.setId("1");
emp.setName("aa");
emp.setAddress("aa");
emp.setTel("090");
emp.setBirthday("00");

EmployeeDAO dao = new EmployeeDAO();
dao.create(emp);

こんな感じで大丈夫なはずです。

QJavaBeansの配列の値取得方法について

いつもお世話になっております。

JavaBeansで値を計算し、多次元配列に格納しています。
それをjsp側で受け取る方法がどうしてもわからずに困っています。
ちなみにサーブレットは使用していません。

[JavaBeans:]
               ・
               ・
               ・
public class FallPersonSQL {

public int check[][] = new int[7][4];

public int[][] getCheck(){

               (略)
return check;
}
}
********************************************************
[jsp:]
               ・
               ・
               ・ 
<input
type="text"
value="<jsp:getProperty name="fallperson" property="check" />"
/>
               ・
               ・
               ・
これだけですと、[[I@1fc7299 や [[I@198c113 と更新するたびに値が変わり表示されます。

・Beanの取得の宣言方法が根本的に違っているのでしょうか?

・いったんjsp側で配列に格納し直さなければならないのでしょうか?

・Beanの作成時になにか行わなければならないのでしょうか?

どなたがご教授のほどよろしくお願いいたします。

いつもお世話になっております。

JavaBeansで値を計算し、多次元配列に格納しています。
それをjsp側で受け取る方法がどうしてもわからずに困っています。
ちなみにサーブレットは使用していません。

[JavaBeans:]
               ・
               ・
               ・
public class FallPersonSQL {

public int check[][] = new int[7][4];

public int[][] getCheck(){

               (略)
return check;
}
}
*****...続きを読む

Aベストアンサー

お世話になります。

Beanの中で
public int[][] getArray(){
return …
}
みたいな,配列を返すメソッドがありますよね?


んで,JSPで,
<jsp:useBean id="test" class="SampleTest" scope="page"></jsp:useBean>
とやってた場合,

<%
int[][] sample = test.getArray();
for(int i=0; i<sample.length() ; i++)
{
for(int j=0 ; j<sample[i].length() ; j++)
{
out.println(sample[i][j]);
out.println("<BR>"); //これはおまけ
}
}
%>

で出力できたと思いますが,
違ってたらごめんなさい。

Qデータベース、jsp、servlet、JavaBeans・・

データベース、jsp、servlet、JavaBeans・・
授業で勉強しはじめた者です。

そもそも、データベースの概念がわかりません。データベースには沢山のデーターがあって、
それがテーブルになっている。それをsqlを使って書き換えることができる。
でも、元のデータは書き換えることはできない。
デスクトップに表示されるのは、命令にたいする処理であって元はそのままになっている。
と言うことは、例えばデーターベースという宇宙があるとして、その中にデータが星のように散らばっているのでしょうか?
そして、元のデータを書き換えるにはどうすればいいのでしょうか?
CELECT文などで書き換えられたデータはその時だけ?
よくわかりません。自分の勉強不足だと承知の上どなたかご回答よろしくお願いいたします。

Aベストアンサー

データベースを概念的に言うと・・・

図書館を想像してください。
図書館の建物が「データベース」です。
図書館内にはたくさんの本棚がありますよね。その本棚が「テーブル」です。
本棚に入っている1冊1冊の本が「データ」です。
本棚の本を取り出して読むことが「SELECT」です。
本棚に新しい本を追加することが「INSERT」です。
本棚の本を取り替えることが「UPDATE」です。
本棚から本を抜き取ることが「DELETE」です。

イメージがわくでしょうか?

QリクエストからArrayListのデータが取得出来ない

いつもお世話になっております。

表題の通り、リクエストからArrayListのデータが取得出来ないのです。

javaで、
ArrayList cmArray = new ArrayList();
データベースからデータ取得
request.setAttribute("category",cmArray.toArray());

jspで
ArrayList list = new ArrayList();
list = (List)request.getAttribute("category");
と取得しようとしています。
そうすると、java.lang.ClassCastExceptionが発生してしまいます。

どなたか分かる方がいましたら、ご教授下さい。
よろしくお願い致します。

Aベストアンサー

requestには、cmArray.toArray()でObjectの配列が入ってます。
なのでJSPでListで受け取ろうとしてClassCastExceptionが発生しています。

request.setAttribute("category",cmArray);
でいいんではないでしょうか。

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



---------------------------------------------------

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

QJSPで