- PR -

jakarta commonsのFile Uploadについて

投稿者投稿内容
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-09-30 02:11
>すると他にもServletInputStreamクラスを使うservletがあればエラーになりますね。
そのサーブレットが WEB-INF/classes または lib に入っていればエラーにはなりません。

クラスローダは以下のように階層構造になっています。
コード:

システムクラスローダ(rt.jar などを読み込む)
LTomcatののクラスローダ(servlet.jar など)
LWebアプリケーション毎のクラスローダ(WEB-INF/lib,classes)


#Tomcatのアーキテクチャには明るくないので不正確かもしれません
この階層構造のなかで、子クラスローダで読み込まれたクラスから、親のクラスは参照できるのですが、逆はだめです。
よって commons-fileupload-1.0.jar などが lib/ext に入っていると Tomcat のクラスローダで読み込まれている servlet.jar を参照できず NoClassDefFoundError となるのです。
lib/ext にどかどかライブラリを置けばコンパイルなどは一瞬楽ですが様々なトラブルを引き起こしますのでおすすめいたしません。

[ メッセージ編集済み 編集者: インギ 編集日時 2004-09-30 03:39 ]
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-09-30 11:32
インギ様

ありがとうございます。

EXTに「upload.jar」を入れたのは同様のエラーがおきて色々試してみたんですが

いまだに良く解らないです。 T.T

servlet.jar が参照できなかったのならどうしてServletInputStreamだけできないんでしょう。

サーブレット自体が動いちゃいけないんじゃないでしょうか。

いつもこんな質問で申し訳ありませんがよろしくお願いします。


uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-30 12:09
引用:

MUSEさんの書き込み (2004-09-30 11:32) より:
servlet.jar が参照できなかったのならどうしてServletInputStreamだけできないんでしょう。
サーブレット自体が動いちゃいけないんじゃないでしょうか。


混乱されているようですが、インギさんの書き込みをよーく読んで理解してください。
クラスがどこにロードされているかによって、たとえ普通なら参照できるはずのクラスでも、
参照できないことがあるのです。

それから、
引用:

WINDPWS XPでは動いてたけどLINUXでは「DiskFileUpload 」クラスを生成する時に例外が発生します。


エラーが起きている場所は、どのように特定されたのでしょうか。
スタックトレースの出力とこの説明が合ってないように思うのですが。
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-09-30 17:45
linux環境で動きました。

「source /etc/profile」とコマンドを実行したのですが、どうやら、うまく
クラスパスが反映されなかったのが原因みたいです。サーバを再起動したら動きました。

ありがとうございました。

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