- - PR -
ファイルのアップロードができません。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-15 23:50
Seijunと申します。初めまして。
Windows XP HOME,JDK1.5.0_10,Tomcat 5.5.20, commons-fileupload-1.0 or 2.0, commons-io-1.3、WTP1.5.3の環境下で、ファイルアップロードをしたいと思い、ネット情報を参考にして、次のようなサーブレットを書いてみました。 ========================================== package pack; import java.io.*; import java.util.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.servlet.*; import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.*; /** * Servlet implementation class for Servlet: UploadFileServlet * */ public class UploadFileServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String path="C:/wtp153/workspace/Images"; DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); factory.setSizeThreshold(1024); factory.setRepository(new File("c:/temp")); upload.setSizeMax(-1); upload.setHeaderEncoding("Windows-31J"); try { List list = upload.parseRequest(request); Iterator iterator = list.iterator(); while(iterator.hasNext()) { FileItem fitem = (FileItem)iterator.next(); String fileName = fitem.getName(); if ((fileName != null) && (!fileName.equals(""))) { fileName = (new File(fileName)).getName(); fitem.write(new File(path + "/" + fileName)); } } } catch (FileUploadException e){ e.printStackTrace(); } catch (Exception e) { // } response.sendRedirect("upFile.html"); } } ========================================== ところが、何故か List list = upload.parseRequest(request); のところで、例外が発生し、画像ファイル(JPG)がアップロードできません。 ========================================== 致命的: サーブレット UploadFileServlet のServlet.service()が例外を投げました java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126) at pack.UploadFileServlet.doPost(UploadFileServlet.java:34) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) ========================================== Javaは始めたばかりで、どうにも原因が分かりません。ネットではこのようなプログラムで、画像ファイル等のアップロードが出来ているようです。対処方法がおわかりの方がお出ででしたら、ご教示願えれば幸いです。 [ メッセージ編集済み 編集者: 未記入 編集日時 2007-03-15 23:51 ] | ||||
|
投稿日時: 2007-03-16 00:08
たぶん実装の問題ではなく、クラスファイルの配置の問題です。
pack.UploadFileServlet が、jre/lib/ext とか、サーブレット関連の API が読み込まれるクラスローダよりも親のクラスローダで読み込まれているのではないでしょうか。 WEB-INF/lib または WEB-INF/classes に置きましょう。 | ||||
|
投稿日時: 2007-03-16 00:21
seijun1953です。有り難うございます。
Eclipse 3.2のWTP1.5.3を使っているので、クラスファイルは、 c:/wtp153/workplace/Upload/build/classesの下にあります。ブレークポイントを設定して、コードを追いかけると、 List list = upload.parseRequest(request); のところで、catchのブロックに追いやられてしまいます。他のプロジェクトは、WTPの標準のプロジェクト作成方法で問題なく動いているのですが・・・。 [ メッセージ編集済み 編集者: seijun1953 編集日時 2007-03-16 00:23 ] | ||||
|
投稿日時: 2007-03-16 09:27
インギさん、Seijun1953です。
Tomcatのcommon/libだけでなく、jdk1.5.0_10/jre/lib/extにもcommonsのライブラリを置いていましたが、後者に置いてあったcommonsのライブラリをsubという下位ディレクトリを作ってそちらに移動すると、画像のアップロードができるようになりました。 ヒントをどうも有り難うございました。それにしても、どうしてなのかなあ・・・。 | ||||
|
投稿日時: 2007-03-16 10:20
ここらへんが参考になるかと。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28912&forum=12&3 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15194&forum=12&start=8 なんとなくクラスパスに通ってくれて便利かもしれませんが、基本的に jre/lib/ext にライブラリを配置すべきではありません。 | ||||
|
投稿日時: 2007-03-16 21:31
seijun1953です。
どうも有り難うございました。 |
1