Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

70

fileupload

JAVAのFileUpLoadですが、
一度commons-fileupload.jarを使用して、ファイルのアップロードは出来たのですが、
コードも変更せずに、*.jarも削除した訳でもないのに、
fileupができなくなりました。


TOMCATも再起動したり、workのデータを消したりとかしても同じくエラーが発生します。

エラーは以下です。

もし原因がほかにご存知であれば、教えてください。

2005-12-03 22:40:23 StandardContext[/balancer]org.apache.webapp.balancer.BalancerFilter: init(): ruleChain: [org.apache.webapp.balancer.RuleChain: [org.apache.webapp.balancer.rules.URLStringMatchRule: Target string: News / Redirect URL: http://www.cnn.com], [org.apache.webapp.balancer.rules.RequestParameterRule: Target param name: paramName / Target param value: paramValue / Redirect URL: http://www.yahoo.com], [org.apache.webapp.balancer.rules.AcceptEverythingRule: Redirect URL: http://jakarta.apache.org]]
2005-12-03 22:40:24 StandardContext[/jsp-examples]ContextListener: contextInitialized()
2005-12-03 22:40:24 StandardContext[/jsp-examples]SessionListener: contextInitialized()
2005-12-03 22:40:24 StandardContext[/servlets-examples]ContextListener: contextInitialized()
2005-12-03 22:40:24 StandardContext[/servlets-examples]SessionListener: contextInitialized()
2005-12-03 22:40:53 StandardWrapperValve[jsp]: サーブレット jsp のServlet.service()が例外を投げました
java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
    at org.apache.jsp.FileUp2_jsp._jspService(FileUp2_jsp.java:57)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:534)

9

回答

7462

閲覧

9件の回答

評価

0

>java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
これの存在と、クラスパスが通っていることを確認してください。

評価

0

ありがとうございます。

すいません、java.lang.とは
<%@ page import="java.lang.*"%>
を追加するということでしょうか?

それとも
ServletInputStream
がインポートされていないということでしょうか?

よろしくお願い致します。

評価

0

ファイルのアップロードが出来るシステムと
出来ないシステムを見比べてみたのですが、
PATHやコードは同じでやはりエラーが発生します。

ただ、j2sdk1.4.2_09にcommons-fileupload.jarを配置させている方が、
エラーが起こっています。

commons-fileupload.jarを他のシステムがつかんでいる為にエラーが起こるという可能性はあるのでしょうか?

評価

0

>を追加するということでしょうか?
ちがいます。英語を読めば分かるはずですが、左側はエラーの種類です。

>javax/servlet/ServletInputStream
こちらです。

>commons-fileupload.jarを他のシステムがつかんでいる為にエラーが起こるという可能性はあるのでしょうか?
tomcat起動時にエラーが出ていなければ、ないです。

評価

0

しかし、ServletInputStreamはサーブレットであって、
fileUploadはすべてJSPで記述しています。

ServletInputStreamをインポートする必要があるということでしょうか?

それと、
TOMCATの起動時にはエラーは起こらず、
TOMCATのlibにも同じjarがあり、
TOMCATは同じものが入っているのですが、
Servletでエラーが発生するのは、
TOMCATが壊れてしまっているのでしょうか?

ちなみに以下が送信側のコードです。


<%@page contentType="text/html;charset=Shift_JIS"%>
<%@page import = "java.util.*"%>

<HTML>
<HEAD>
<TITLE></TITLE>
<LINK REL="stylesheet" HREF="style.css" TYPE="text/css">
</HEAD>
<BODY onload="window.focus()">
画像のアップロード
<HR>
<SCRIPT TYPE="text/javascript">
function check(){
    if(document.form1.file_name.value==""){
        alert("アップロードするファイルを指定してください");
        return false;
    }
}
</SCRIPT>
<FORM NAME="form1" ACTION="FileUp2.jsp" METHOD="post"
    ENCTYPE="MULTIPART/FORM-DATA"     onSubmit="return check()">
<BR>
画像ファイル:<BR>
<INPUT TYPE="file" NAME="file_name" size="60"><BR>
<INPUT TYPE="submit" VALUE="アップロード">
</FORM>
<HR>
<INPUT TYPE="button" VALUE="戻る"
    onClick="location.href='index.jsp?id= '">
</BODY>
</HTML>




ちなみに以下が受信側のコードです。


<%@ page contentType="text/html; charset=Shift_JIS"%>
<%@ page import="java.util.*,java.io.*,java.sql.*"%>
<%@ page import="org.apache.commons.fileupload.* "%>


<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<%
java.util.Date dateNow = new java.util.Date();
DiskFileUpload dfu = new DiskFileUpload();
try{

    dfu.setSizeMax(100000);
    dfu.setRepositoryPath("D:\\WS000000.JPG");
    List lstItems = dfu.parseRequest(request);
    FileItem fi = (FileItem)lstItems.get(0);
    String strLocalFile = fi.getName();
    if(!strLocalFile.equals("")){
        String strFileName;
        int pBackSlash=strLocalFile.lastIndexOf("\\");
        if(pBackSlash!=-1){
            strFileName=strLocalFile.substring(pBackSlash+1);
        }else{
            strFileName=strLocalFile;
        }
        String strImageFilePath="D:\\WS00000999.JPG";
        File fileImage = new File(strImageFilePath);
        fi.write(fileImage);
        %>
        アップロード完了しました。<BR>
        <A HREF="upload_image_1.jsp">戻る</A>
    <%}else{%>
        エラーです。<BR>
    <%}%>
<%}catch(FileUploadBase.SizeLimitExceededException e){%>
    画像のファイルサイズが大きすぎます(最大100KB)。<BR>
    <A HREF="javascript:history.back()">戻る</A>
<%}catch(Exception e){%>
    <%=e.getMessage()%>
    <A HREF="index.jsp">戻る</A>
<%}%>
</BODY>
</HTML>

評価

0

>ServletInputStreamをインポートする必要があるということでしょうか?
インポートする必要があるのは、パッケージが異なる場合です。
jspの記述においては、java.langパッケージ以外はすべて必要があると思って良いです。

>TOMCATのlibにも同じjarがあり、TOMCATは同じものが入っているのですが、
それは、ディレクトリ構成が同じであるということですか。
クラスパスまで同じであることを確認しなければ、意味がありません。

>TOMCATが壊れてしまっているのでしょうか?
まだ結論を出すのは早いでしょう。
可能な限り、自分のコードあるいは設定を疑うべきです。

評価

0

しかしクラスパスはコンパイルする時に必要であって、
TOMCATでJSPを走らせるには必要なのでしょうか?

JSPをブラウザで表示させたときに、
workディレクトリにclassが作成されると思うのですが。。。


コードにおいては同じコードを使っているので、
間違いはないと思われます。


インターネットで検索してみると、

なんらかの理由でservlet.jar(Tomcat5だとこれだったと思うけど)
へのクラスパスが外れた状態になっているようです。

と書かれているHPがあったのですが、
普通にTOMCATをしようしていて、
servlet.jarが外れることはあるのでしょうか?

評価

0

>しかしクラスパスはコンパイルする時に必要であって、TOMCATでJSPを走らせるには必要なのでしょうか?
tomcatでクラスパスの設定が必要ないのは、server/とかcommon/がデフォルトでクラスパスになるからです。
そこにクラスが見つからなければ、やはりエラーになります。

コンパイルは、使うクラスの内部構造を参照するだけで、そのクラスを取り込むわけではありません。

なおjspは、jspコンパイラでいったんjavaファイルに変換され、そこからは通常のjavaファイルと同じです。

>普通にTOMCATをしようしていて、servlet.jarが外れることはあるのでしょうか?
ローカルで確認したところ、servlet-api.jarですね。
「tomcatをする」という言い方はともかく、たしかにふつうは考えられませんね。
マウス操作を誤って移動させたり、ということがない限りは。

まず、classes/libにファイルがあることを確認してみてください。
その後、そのファイルをwinzipででも開いて、中身を確認してみてください(jarはzipファイルです)。

評価

0

すみません、「使用」ですか。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。