- PR -

Servletのコンパイルとデータベース接続について

1
投稿者投稿内容
Dream
常連さん
会議室デビュー日: 2004/01/29
投稿数: 43
投稿日時: 2004-02-04 16:35
Struts1.1とTomcat4.1.29でWeb開発を行っています。
Tomcatの自動リロードをオンにして、自動的にコンパイルするようにしているのですが、更新されてから次のページにアクセスしようとすると、javax.servlet.ServletException、とjava.lang.NullPointerException
というエラーが出てしまいます。
自動更新されたときというのは、これが当然の動作なのでしょうか?
みなさんは、自動的にファイルが更新されても、何の問題もなく次々とページ間を移動できているのですか?

それと、実は今作っているものはdatasourceを使ってデータベースに接続をしているのですが、それが何か悪さをしているのではないかと疑っています。というのも、datasourceを使わないページ(たとえばcsvファイルのダウンロード)などのページは正常に動作してくれているからです。
何かお分かりになる方がいらっしゃいましたら、アドバイスよろしくお願いします。


[ メッセージ編集済み 編集者: Dream 編集日時 2004-02-04 16:45 ]

[ メッセージ編集済み 編集者: Dream 編集日時 2004-02-04 17:06 ]
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-02-04 18:09
どこの処理で NullPointerException が発生しているかは
わかりますよね?そこを提示しないと他の人はわかりません。
#session に入れているオブジェクトを使っているとこだと推測
Dream
常連さん
会議室デビュー日: 2004/01/29
投稿数: 43
投稿日時: 2004-02-04 18:23
ご返答ありがとうございます。

基本的な質問で大変恐縮なのですが、
リロードされた際にsessionに入れたオブジェクトというのもすべてなくなってしまうのですか?
だとすると、セッションにはログインしたユーザーネームとIDを入れており、それを各ページでセッションから取り出しています。それを用いることによって、データベースにアクセスするようにしていますので、そこが悪いのでしょうか?
実際のコードは
session.setAttribute("user",user);
として、各ページでgetAttributeで取り出して毎回使用しています。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-02-04 18:46
引用:

Dreamさんの書き込み (2004-02-04 18:23) より:
リロードされた際にsessionに入れたオブジェクトというのもすべてなくなってしまうのですか?



これ自分で確かめられませんか?
Dream
常連さん
会議室デビュー日: 2004/01/29
投稿数: 43
投稿日時: 2004-02-05 00:12
セッションに入れたオブジェクトはリロードされても消えずに維持されているようです。一度リロードされると、destroyされてセッションオブジェクトも消えるのかと思ったのですが。
server.xml等の設定をいじるのでしょうか?
lokto
会議室デビュー日: 2003/12/15
投稿数: 6
投稿日時: 2004-02-05 00:41
引用:

Dreamさんの書き込み (2004-02-05 00:12) より:
セッションに入れたオブジェクトはリロードされても消えずに維持されているようです。一度リロードされると、destroyされてセッションオブジェクトも消えるのかと思ったのですが。
server.xml等の設定をいじるのでしょうか?


クラスのリロードはクラスローダの置換(?)で行われていると思われるので、
WEB-INF/classesやWEB-INF/lib以下のクラスのインスタンスはそのWebアプリの
リロードで消えてしまうと思います。
なので、StringのようなJREに入っているクラスや
Tomcatのcommon以下に置いているクラスのインスタンスなら
リロードをしてもたぶん消えないでしょう。

また、WEB-INF/classesやWEB-INF/lib以下のクラスでもSerializableにしておけば
セッションに積んでいるものについては、
リロード時に自動的にシリアライズ/デシリアライズしてくれるかもしれません。

確信のないあやふやな回答ですみません。

[ メッセージ編集済み 編集者: lokto 編集日時 2004-02-05 00:47 ]
Dream
常連さん
会議室デビュー日: 2004/01/29
投稿数: 43
投稿日時: 2004-02-05 19:07
ご返答ありがとうございました。
確かに、Stringクラスをセッションに入れてたものは維持されていましたが、私が実際に使用しているのは、WEB-INF/lib以下に入っている外部jarをインスタンス化したものをセッションに入れて使用していたので、リロードした際に消えてしまうというのは、つじつまが合っていて納得できました。どうもありがとうございました。

この機会にいろいろ知りたいと思うのですが、このような知識を、みなさんはどのようにして身につけていかれたのでしょうか?経験をつむしかないかもしれませんが、正直言って本から得られる知識というのには、限界があるとおもいますし・・・。
いろんなHPやこのサイトにあるような掲示板からなのでしょうか?
すいませんが、よろしくお願いします。
lokto
会議室デビュー日: 2003/12/15
投稿数: 6
投稿日時: 2004-02-08 02:22
引用:

Dreamさんの書き込み (2004-02-05 19:07) より:
確かに、Stringクラスをセッションに入れてたものは維持されていましたが、私が実際に使用しているのは、WEB-INF/lib以下に入っている外部jarをインスタンス化したものをセッションに入れて使用していたので、リロードした際に消えてしまうというのは、つじつまが合っていて納得できました。どうもありがとうございました。


本当に前の説明でいいのかちょっと自信が無いですね。表面的な説明ですし。

引用:

この機会にいろいろ知りたいと思うのですが、このような知識を、みなさんはどのようにして身につけていかれたのでしょうか?経験をつむしかないかもしれませんが、正直言って本から得られる知識というのには、限界があるとおもいますし・・・。
いろんなHPやこのサイトにあるような掲示板からなのでしょうか?


本やWebは手っ取り早いのでいいんですが、中上級者向けやマイナーな分野は少ないですね。また、Webは間違いが多いので内容が本当に正しいかチェックしなければならないです。
他にも、開発者メーリングリストや仕様書、ソースなどの情報源を利用しています。突き詰めていくと最後は仕様書やソースを読むことになりますが。

結局「分からないときにどこまで徹底して調べるか」と「根本的な動作原理(?)を知っているか」ですかね。
1

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