• ベストアンサー

JDBCにてデータをひく際のエラーの対処法

今、MVCモデルで、社員のデータを登録したり、DBの中のデータを表示したり、というプログラムに挑戦中なのですが、また躓きました。 サーブレットが画面遷移担当なのですが、まず最初に新規登録かログインかを選択する画面(JSP)にうつります。そして新規登録のボタンを押すと画面遷移していくのですが、それはとりあえず完成しました(入力チェックはまだですが)。最初の画面→データ入力画面→データ確認画面→パスワード入力画面→最初の画面に戻る、といった感じです。DB(アクセス)をみるときちんとデータが入力されています。 問題はログインのほうです。最初の画面に社員番号とパスワードをいれるテキストがあって、そこにいれてから画面遷移をするとメニュー画面が現れ、データ訂正・データ表示等のボタン選択をします。そこでデータ訂正を押すと新規登録で使った「データ入力画面」に遷移するのですが、きちんとDBからとってきたはずの値が表示されず、空白のままです。 おぼつかないながらもログをみてみたところ、なにやら下記のエラーが2つ出ているようです。 其の一 LifecycleException: コンテナ StandardContext[/jsp10] はまだ起動されていません at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1147) 云々… 其の二 2003-08-09 18:07:54 StandardManager[/SyainData] セッション 2F258A0A42AEDDBCA2C1646579EF67EA のためにセッション属性 bean をシリアライズできません java.io.NotSerializableException: java.util.PropertyResourceBundle at java.io.ObjectOutputStream.writeObject0(Unknown Source) 云々… コードを載せていないので意味不明かもしれませんが、上記のエラーが何故出るのかお分かりの方いらっしゃいましたらご教示の程宜しくお願い致します<(_ _)>

  • Java
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#30871
noname#30871
回答No.1

>其の二  Tomcatがオブジェクトを永続化(Serialize=ディスクへの保存)できないというエラーです。  HttpSessionにセットするオブジェクトは、java.io.Serializableインタフェースをimplementsしてください。  また、HttpSessionには、あまり大きなオブジェクトをセットしないようにしましょう。性能に影響します。

参考URL:
http://www.dmz.hitachi-sk.co.jp/Java/Tech/servlet/memo.html
makinko0129
質問者

補足

お忙しい中ご教示くださり、ありがとうございました。 >Tomcatがオブジェクトを永続化(Serialize=ディスクへの保存)できないというエラーです。 なるほど。シリアライズって意味がよくわからない、と思っていたので勉強になりました。 >HttpSessionにセットするオブジェクトは、java.io.Serializableインタフェースをimplementsしてください。 はい、SessionにセットするBeanクラスはSerializableインタフェースをimplementsしています(今回Serializableインタフェースをimplementsする理由がなんとなくわかりました。参考書にはBeanの場合はそう書くもんだ、としか載っていなかったので、とても勉強になりました。) Serializableインタフェースをimplementsしているのに、それでもシリアライズできないのなぜなのでしょうか? SessionにはBeanクラスをまるごとセットしているのですが、そのBeanがでかすぎてシリアライズできないのでしょうか? >また、HttpSessionには、あまり大きなオブジェクトをセットしないようにしましょう。性能に影響します。 丁寧なアドバイスをありがとうございます。今のところ実現方法がSessionしかわからず悩んでいるところです。 クラスを使いこなして実現する、というビジョンが全然見えない私。まだまだ先は遠そうです。 今回はお忙しい中、本当にありがとうございました<(_ _)>

その他の回答 (1)

  • ssj
  • ベストアンサー率73% (11/15)
回答No.2

> Serializableインタフェースをimplementsしているのに、 > それでもシリアライズできないのなぜなのでしょうか? > SessionにはBeanクラスをまるごとセットしているのですが、 > そのBeanがでかすぎてシリアライズできないのでしょうか? エラーメッセージでは、java.util.PropertyResourceBundle が シリアライズできないと言っています。 SessionにセットされるBeanに上記クラスが存在しているということはないでしょうか? Sessionに保存するBeanがSerializableをimplementsしていても、その中の フィールドにシリアライズできないオブジェクトが存在する 場合には、やはりエラーになります。

makinko0129
質問者

お礼

返事が遅くなり、大変申し訳ありませんでした。 質問してからいろいろとコードをいじってみたのですが、それでもやはり思い通りの動きをせず悩んでいました。とことが昨日の土曜日に別のパソコンで実行してみたとこと(私と同じTomcat4.0)ソースが全く一緒であるのにも関わらずきちんと値を保持して動いたのです。そして今日自分のパソで実行してみたのですが、ログにてエラー。 うーん、これはどういうことなんだろう? とりあえずソース自体に問題があるのではなく、Tomcatの設定(?)に問題があるらしい、ということがわかりました。もう少し状況を整理してみようと思います。 今回は私の為に時間を削って書き込みしていただき、ありがとうございました<(_ _)>

関連するQ&A

  • 日付データのエラーチェックに関して

    最近Javaを習い始め、Eclipseを使ってサーブレット/JSPを学習している者です。使っているデータベースはOracle9iです。OSはWindowsXPです。 現在、学習しているのはJSPで表示したブラウザのフォームからデータを入力して、データベースにそのデータを登録、更新などを行う作業です。 質問は入力されたデータのエラーチェックについてなのですが、データベースに日付を西暦で2009/03/05とDATE型で登録していて、その日付をブラウザから登録、更新する際に「日付は半角で西暦/月/日と入力してください」と指定して、それ以外の入力がされた場合はエラー画面を表示したいのですが、フォームから送られてくるデータはString型でそれをSimpleDateFormatメソッドを使ってDate型に変換してtryで例外処理をしてエラー画面に画面遷移すればいいと思うのですが、サーブレット内でその処理を実行しようとするとエラーになってしまいます。 どのようにソースを書けばいいのでしょうか? JSPのフォームのソース(一部) <input type="text" name="day"> サーブレットのソース(一部) public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("Windows-31J"); String day = request.getParameter("day"); try { ここから先が分かりません。

    • ベストアンサー
    • Java
  • 画面遷移でセッション切れになります

    いつもお世話になっております。 サーブレットを使用した画面遷移で jsp(ログイン)→servlet(ログイン確認)→jsp(メニュー) →servlet(データ取得)→jsp(データ一覧表示) という流れで画面遷移を行っていたのですが、 二つ目のjsp(メニュー)まではセッションが残っているのですが 次のservletに遷移した瞬間セッションがが切れてしまいnullを検出してしまいます。 はじめのservlet(ログイン確認)にて getAttributeを使用しセッションを残していたのですが、 セッション切れの原因がわかりません。 セッション切れする原因はなんなのでしょうか。 皆様の知恵をお借りできれば幸いです。

    • ベストアンサー
    • Java
  • Java Struts MVCモデル 正しい書き方

    Java Struts1.3.10 皆でとあるシステムを作ることになったのですが、 JSP・ActionForm・Actionそれぞれの関係の在り方について悩んでいます。 ログイン機能を例とします。 1機能、1Form、1Actionとした場合は: 1.Login.jspでIDとPASSを入力。 2.LoginResultForm.javaにIDとPASSを格納。 3.LoginResultAction.javaでDBチェック(IDとPASSの存在・権限) 4.Result.jspへ遷移。ID・PASS・権限を表示する 使用するファイルは4つとなります。 1JSP、1Form1、Actionとした場合は: 1.Login.jspでIDとPASSを入力。 2.LoginForm.javaにIDとPASSを格納。 3.LoginAction.javaでDBチェック(IDとPASSの存在) 4.ResultForm.javaにIDとPASSを渡す(Sessionなど) 5.ResultAction.javaでDBから権限を取得、ResultFormに格納 6.Result.jspへ遷移。ID・PASS・権限を表示する 使用するファイルは6つとなります。 現在意見が三つありまして、 1.違うForm同士にデータのやり取りが発生するようであれば(1機能とし)、同じフォームにするべきではないのか? 2.Fromのメンバの数が少ないうちは良いが、今後数が増えると可読性が悪くなるから分けるべきではないのか? 3.フォームは同じでないとまずいが、ActionはJSPごとに分けるべき というものです。 1.ではログイン者情報をセッションに保持することは許可しています。(一部例外を認めている) これらはいずれもStrutsフレームワークの範疇から逸脱している、あるいはMVCモデルに反している、そもそも非効率的ということはないのでしょうか? つまりあくまで実装の仕方の問題でしかない、という結論でよろしいでしょうか?

    • ベストアンサー
    • Java
  • JavaBeanを用いてJDBCでのDBへの接続

    単体のJavaプログラム(Javaアプリケーション)からはDBにアクセスすることができるのですが、以下のような場合だとDB接続ができないようなのです。 JSPコンテナであるトムキャットを用い、JSPからBeanを呼んで、Beanの中でDBドライバーの登録とDBへの接続を行うプログラム DBドライバーの登録はうまくいっているようで、DBへ接続をするところでエラーがでるのです。 なぜなのでしょうか?DBはmySQLを使用して、当然コマンドプロンプトで開いています。

  • struts:ActionFormの扱いについて

    いつもお世話になっております。 只今strutsの勉強中なのですが、 A.jspで入力させたものをB.jspで確認させ、 B.jsp画面でボタンが押されたらDBへ登録し完了画面C.jspを出す。 と言うようなものを作っております。 ActionFormはすべて同じものを使用しています。 遷移とDB登録は動きましたが、 問題なのはB.jspからDB登録処理を行うActionでFormがクリアーされてしまいます。 DB登録が完了するまでの間A.jspで入力された値を保持するような方法はないでしょうか? ご教授よろしくお願い致します。

    • ベストアンサー
    • Java
  • フレームを使用した際のセッションについて

    初めて投稿させて頂きます。 現在ServletとJSPを使ったプログラミングを行っております。 その中で、"フレームを使用した際にセッションのデータが引き継がれない"という現象が起きてしまい、 どうにも進めることができなくなってしまいました。 下記に詳しく内容を記述します。 ページの流れとしては、 1.ログインJSP(login.jsp)にてIDとパスを入力 ↓ 2.入力されたものをServlet(Login.class)が受け取りデータベースと照合 ↓ 3.IDとpassが一致している場合にframeset用のJSP(fs.jsp)に遷移 (RequestDispatcherにパスを指定→forword) ↓ 4.frameset用のJSPからフレームA(frameA.jsp)とフレームB(frameB.jsp)のJSPを呼びだす という流れです。 fs.jspまではsessionのデータが引き継がれているのですが、 frameA.jsp、frameB.jspでsessionのデータを参照することができません。 セッションIDの取得を試みた所、fsとframeAとframeB、すべてのIDが違う状態です。 ローカル上で動かす場合には問題なくセッションが引き継がれるのですが、 (セッションIDが同一であり、中にあるIDやパスの情報を取得することができる。) サーバー上にあげるとうまく引き継ぐことができません。 サーバー側でファイルの呼び出しの際、マシン名が違う時にセッションが別で生成されるという仕様を見たことがあるので、 それが原因なのかとも思っているのですが、framesetで書いているリンクや、Tomcatのコンテキストルートの修正等を行ってみましたがうまくいきませんでした。 Javaのバージョンは1.6.0、tomcatのバージョンは6.0です。 もし質問が何かズレていたり、何か必要な情報が足りないようでしたら恐れ入りますがその部分も指摘して頂けたら嬉しいです。 どうか皆様の知恵をお貸しください。宜しくお願いします。

  • JAVA・JSP間のデータの受け渡し

    質問が下手なので文章にせず箇条書きにして質問させてもらいます。 完成させたいもの:勤怠登録 環境:  MySQL Tomcat WindowsXP ツール  Exlipse 大まかな流れ---------------------------------------------- ・JSP(HTMLでも可)のログイン画面  (1)、「Id」と「Pass」の入力が行える ↓ Id・Passを渡す ・Javaのログイン認証クラス  (1)、取得した「Id」「Pass」でDB内を検索、結果を返す  (2)、(1)で登録がある場合はDB内の該当データ(勤怠情報)を取得 ↓ (2)で取得したデータを渡す ・JSP勤怠情報閲覧画面 ---------------------------------------------------------- ・現在、悩んでいる点  Javaのログイン認証クラスの(2)で取得した値を  勤怠登録閲覧画面(JSP)に渡してやりたいのですが  方法がわかりません。  JSP→JAVA は「post」  JAVA→JSP が判らないのです 取得した勤怠データは構造体(C言語的な表現ですが)に入いれた後、 ArrayListで作った変数に追加していきました。 補足:  勤怠データ構造体(クラス)の内容{    date 日付    time 出勤時間    time 退勤時間  } 以上です まだ初めて3ヶ月ほどの初心者ゆえ 説明不足な点があると思いますがお教え願えないでしょうか。

  • サブウィンドウへのデータの受け渡し方

    はじめまして。 一覧画面から、ボタン押下でサブウィンドウを開き、詳細登録画面を表示するというような、 複数サブウィンドウで構成される webアプリケーションをつくりたいのですが、 実現可能かわからなく、困っています。 (1)サブウィンドウへのデータの受け渡し sessionにユーザ情報やその他のデータを格納して、 サブウィンドウに情報を渡そうと思っていますが、 sessionに格納した情報はサブウィンドウにも引継ぎができますか? sessionのスコープで調べていたのですが、 よくわかりませんでした。 (2)一つのブラウザ上で画面遷移せず、ほとんどサブウィンドウを開いて画面遷移する構成にしています。 こういう構成のwebアプリケーションを今まで見たことがなく、何か問題や弊害があるのではないか? webアプリケーションの構成として間違っていないか?不安です。 ちょっとしたことでもご指摘いただければありがたいです。 よろしくお願いします。

  • フォーム入力前後のテーブルデータの同一性の確認方法は?(トランザクション?)

    PHP4.3 + PEAR + PostgreSQL + Apache + Linux/Debian Sarge を使っています。 重複を許さないデータを登録するために、既に登録されているデータを確認しつつ、テーブルに新データを追加する方法についてお尋ね致します。 下記の流れを考えています。 (1)既に登録されているデータを画面に表示する。  ↓ (2)フォームを利用してユーザーが新データを入力する。  ↓ (3)フォーム入力を受信して、新データをテーブルに追加する。 この場合、(1)でのデータ表示から(3)のデータ追加登録までトランザクションをかけておかなければ、他のユーザーが同じデータを追加登録してしまう恐れがあるかと思います。 一方、(1)においてデータベースに接続した時に得たインスタンス(?)を $_SESSION['db'] = DB::connect(DSN)           (PEARを利用しています) のようにしてセッション変数に保存しても、(3)の処理に引き継ぐことができませんでした。 このような処理はどのように行えばよいのでしょうか。

    • ベストアンサー
    • PHP
  • php+mysqlでデータを表示更新削除するシステムを製作中ですが

    PHP+MYSQLでデータを取り出し、入力変更を行うシステムを製作しているのですが、 取り出したデータを保持してのページ遷移ができません。 どのように行えばよいのでしょうか? 製作中のシステムの条件は以下の通りです。 ・MYSQLから取り出したデータはクラスに保持する。 ・フレームワークは使用しない。 ・セッションは使用しない。 ・直接ページ遷移するのではなくMVCモデルのように 一度コントローラ部のような所に遷移し変更削除の確認画面に遷移する。 入力画面←→コントローラ部←→確認画面 のような感じです ・確認画面から入力画面に戻った時、入力変更した項目は表示する。 以上です。自分で調べた限りではセッションを使用しないと不可能のような気がしますが・・・。

    • 締切済み
    • PHP