プロが教える店舗&オフィスのセキュリティ対策術

今、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)
云々…

コードを載せていないので意味不明かもしれませんが、上記のエラーが何故出るのかお分かりの方いらっしゃいましたらご教示の程宜しくお願い致します<(_ _)>

A 回答 (2件)

>其の二



 Tomcatがオブジェクトを永続化(Serialize=ディスクへの保存)できないというエラーです。

 HttpSessionにセットするオブジェクトは、java.io.Serializableインタフェースをimplementsしてください。

 また、HttpSessionには、あまり大きなオブジェクトをセットしないようにしましょう。性能に影響します。

参考URL:http://www.dmz.hitachi-sk.co.jp/Java/Tech/servle …

この回答への補足

お忙しい中ご教示くださり、ありがとうございました。

>Tomcatがオブジェクトを永続化(Serialize=ディスクへの保存)できないというエラーです。

なるほど。シリアライズって意味がよくわからない、と思っていたので勉強になりました。

>HttpSessionにセットするオブジェクトは、java.io.Serializableインタフェースをimplementsしてください。

はい、SessionにセットするBeanクラスはSerializableインタフェースをimplementsしています(今回Serializableインタフェースをimplementsする理由がなんとなくわかりました。参考書にはBeanの場合はそう書くもんだ、としか載っていなかったので、とても勉強になりました。)
Serializableインタフェースをimplementsしているのに、それでもシリアライズできないのなぜなのでしょうか?
SessionにはBeanクラスをまるごとセットしているのですが、そのBeanがでかすぎてシリアライズできないのでしょうか?

>また、HttpSessionには、あまり大きなオブジェクトをセットしないようにしましょう。性能に影響します。

丁寧なアドバイスをありがとうございます。今のところ実現方法がSessionしかわからず悩んでいるところです。
クラスを使いこなして実現する、というビジョンが全然見えない私。まだまだ先は遠そうです。

今回はお忙しい中、本当にありがとうございました<(_ _)>

補足日時:2003/08/12 00:07
    • good
    • 0

> Serializableインタフェースをimplementsしているのに、


> それでもシリアライズできないのなぜなのでしょうか?
> SessionにはBeanクラスをまるごとセットしているのですが、
> そのBeanがでかすぎてシリアライズできないのでしょうか?

エラーメッセージでは、java.util.PropertyResourceBundle が
シリアライズできないと言っています。
SessionにセットされるBeanに上記クラスが存在しているということはないでしょうか?

Sessionに保存するBeanがSerializableをimplementsしていても、その中の
フィールドにシリアライズできないオブジェクトが存在する
場合には、やはりエラーになります。
    • good
    • 1
この回答へのお礼

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

お礼日時:2003/08/17 18:21

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