- PR -

jakarta commonsのFile Uploadについて

投稿者投稿内容
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-09-28 17:48
jakarta commonsのFile Uploadモジュールを使用してファイルのアップロードプログラムを作成しております。
Windows環境では、実行できたのですが、
Linux環境(Tomcat/4.1.24)で実行すると、エラーとなってしまいます。

<<クラスパスの設定>>
/usr/local/jakarta-tomcat/common/lib/commons-fileupload-1.0.jar
/usr/local/jakarta-tomcat/common/lib/commons-beanutils.jar

ソースでエラーになると思われる部分:
DiskFileUpload upload = new DiskFileUpload();

エラー内容:
<<Ldescription>>
The server encountered an internal error () that prevented it from fulfilling this request.
<<exception>>
javax.servlet.ServletException: サーブレットの実行により例外を投げました
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
...
<<root cause>>
java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
at FileUploadServlet.doPost(FileUploadServlet.java:24)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
...

K
大ベテラン
会議室デビュー日: 2004/04/07
投稿数: 174
投稿日時: 2004-09-28 17:53
実行時にクラスがみつからないだけではないでしょうか。
tomcat のcommon/libの下あたりに該当のjarはありますか?
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-09-28 18:01
早速の回答有難うございます。

該当のJARはあります。 

入れてあるのでコンパイルは通りまして実行の際に「java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream」が出たのです。

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

なぜなんでしょうね。 T.T

ご教授よろしくお願いします。




あいつー
ベテラン
会議室デビュー日: 2004/05/20
投稿数: 89
投稿日時: 2004-09-28 18:22
あいつーです。

コンパイル時のビルドパスには入っていて、
実行時のクラスパスには入っていない、というオチはありえませんか?
K
大ベテラン
会議室デビュー日: 2004/04/07
投稿数: 174
投稿日時: 2004-09-28 19:41
引用:

コンパイル時のビルドパスには入っていて、
実行時のクラスパスには入っていない、というオチはありえませんか?


自分もそういう意味で書きました。だから、該当のjarがtomcatからみえるところにあるかと聞いたのですが。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-29 00:42
見つからない、といっているのはServlet APIの標準クラスなので、普通はありえないエラー
だと思うのですが。そのサーブレットを実行しているWebアプリケーションの構成はどうなって
いるのでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-09-29 01:30
関連するライブラリを jre/lib/ext に配置していると言うことはないでしょうか?
そうすると上位のクラスローダで読み込まれてしまうため、サーブレット関連のライブラリを読み込んでいるクラスローダを参照できなくなります。
該当するようであればWeb アプリケーションで利用するライブラリは WEB-INF/lib に配置することで解決すると思います。
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2004-09-29 09:45
ご回答ありがとうございます。

確かにextの中にも入れてみました。クラスパスにも設定してあっちこっち入れてみました。

でもWindowsXPで実行の時は面倒でextに入れてCLASSPATHには設定してませんがOKでした。
Linuxはだめでしょうか。

一応extのjarを消してもう一度やってみます。

ちなみに「コンパイル時のビルドパスには入っていて、 実行時のクラスパスには入っていない」っていうことはどういう意味ですか。
コンパイル時に参照するクラスパスと実行の際参照するクラスパスは違うのでしょうか。

今回のエラーはservlet.jarの中のServletInputStreamっていうクラスがないというエラーです。
すると他にもServletInputStreamクラスを使うservletがあればエラーになりますね。

ばかげな質問で申し訳ありません。 

よろしくお願いします。

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