2011-01-28 1 views
5

私は最近JMeterを使って私のwebappのテストをローカルにロードし始めました。私は画像をアップロードするためのjspページを持っています。画像は私のサーブレットで処理されます。 、なぜServletFileUploadを指しているHttpServletRequestにNoClassDefFoundErrorがありますか?

boolean isPart = ServletFileUpload.isMultipartContent(req); 

....はい - ここで例外が参照している私のサーブレットからのコードです

exception 

javax.servlet.ServletException: Servlet execution threw an exception 

root cause 

java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest 
    org.apache.commons.fileupload.servlet.ServletFileUpload.isMultipartContent(ServletFileUpload.java:68) 
    spyder.servlets.imageProcessing.ImageProcessingServlet.uploadEditedImagesToDB(ImageProcessingServlet.java:527) 
    spyder.servlets.imageProcessing.ImageProcessingServlet.doPost(ImageProcessingServlet.java:153) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

:私は今日のプロセスを試したとき、私は次の例外/エラーが発生しました私はすべての必要な文をクラスに入れました。

この問題の原因となるシステム上の変更を思い出すことはできません。このプロセスはいつも問題なく実行されていますので、今のところこれが失敗する原因を理解できません。私がJMeterを使用した後で、それがむしろ偶然ではないと思います...

答えて

9

Commons FileUploadのようなすべてのサードパーティのWebアプリケーションライブラリは、Webアプリケーションの/WEB-INF/libに属しています。この例外は、JRE/libまたはJRE/lib/extに配置したときに発生します。

実際、Bozhoが言及しているように、クラスパスの別の場所に、servletcontainer固有のライブラリ(手を触れないでください)(Tomcat/lib)を移動/コピー/複製しないようにする必要があります。しかし、それはIMOがこの種の例外をもたらさなかったはずです。基本的に、FileUpload APIをロードしたクラスローダーには、Servlet APIについての知識は全くありません。

あなたがTomcat classloading HOW-TOを読めば、あなたはJRE/libJRE/lib/ext内のライブラリがTomcat/lib共通)と/WEB-INF/lib中のものとは異なるクラスローダ(ブートストラップ)によってロードされていることがわかります(Webアプリケーション) 。ブートストラップクラスローダーには、共通ライブラリとWebアプリケーションライブラリについての知識はありません。それはもう一方の方法です。 共通のクラスローダーは、ブートストラップクラスローダーについての知識を持ち、ウェブアプリケーションクラスローダーは両方について知識があります。サーブレットAPIは通常、共通クラスクラスローダーによってロードされるため、FileUpload APIはブートストラップクラスローダーによってロードされたことになるだけです。これは間違っています:)

+0

私のエラーを指摘していただきありがとうございます。私はjre/lib/extフォルダからサードパーティ製のjarファイルを削除しました(私はそこにコピーしました)。そして、Tomcatの再起動(再インストールではない)の後、プロセスは元に戻って実行されます。 – katura

+0

ようこそ。 – BalusC

+0

おかげでグラスフィッシュの問題も解決しました! – beatrice

2

これは、サーブレットコンテナにサーブレットAPIがないことを意味します。 Tomcatをきれいにインストールし、そこに展開しようとします。最初にサーブレットのapi jarがtomcat/libにあることを確認します。あなたがそれを持っていないことを確認してくださいwebapps/yourapp/WEB-INF/lib

+0

はい、servlet-api.jarはc:\ jakarta-tomcat \ libにのみあります。 Tomcat 6.0.29を実行しています。 – katura

+0

@katura - 新しくインストールしてみてください。インストール= unzip。 – Bozho

関連する問題