質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Eclipse

    1657questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

プロジェクトファイル名SampleServletでsample.htmlを実行するとエラーになる。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 347

sanchu52

score 140

Eclipseを勉強中です。
eclipseで実行しています。
動的プロジェクトファイル名SampleServletでsample.htmlを実行すると
ダイアログが出て、
タイトル「ファイルのアップロード」
その下に「参照ボタン」クリック、ファイル選択でファイル(c:\tmp\abcd.txt)を選択して送信すると
エラーが出ます。
//eclipseのコンソールのエラー内容
情報: Server version:        Apache Tomcat/9.0.7 [日 5月 13 11:53:50 JST 2018]
情報: Server built:          Apr 3 2018 19:53:05 UTC [日 5月 13 11:53:50 JST 2018]
情報: Server number:         9.0.7.0 [日 5月 13 11:53:50 JST 2018]
情報: OS Name:               Windows 10 [日 5月 13 11:53:50 JST 2018]
情報: OS Version:            10.0 [日 5月 13 11:53:50 JST 2018]
情報: Architecture:          amd64 [日 5月 13 11:53:50 JST 2018]
情報: Java Home:             C:\pleiades\pleiades\java\10 [日 5月 13 11:53:50 JST 2018]
情報: JVM Version:           10+46 [日 5月 13 11:53:50 JST 2018]
情報: JVM Vendor:            "Oracle Corporation" [日 5月 13 11:53:50 JST 2018]
情報: CATALINA_BASE:         C:\pleiades\pleiades\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1 [日 5月 13 11:53:50 JST 2018]
情報: CATALINA_HOME:         C:\pleiades\pleiades\tomcat\9 [日 5月 13 11:53:50 JST 2018]
情報: Command line argument: -Dcatalina.base=C:\pleiades\pleiades\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1 [日 5月 13 11:53:50 JST 2018]
情報: Command line argument: -Dcatalina.home=C:\pleiades\pleiades\tomcat\9 [日 5月 13 11:53:50 JST 2018]
情報: Command line argument: -Dwtp.deploy=C:\pleiades\pleiades\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps [日 5月 13 11:53:50 JST 2018]
情報: Command line argument: -Dfile.encoding=UTF-8 [日 5月 13 11:53:50 JST 2018]
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\pleiades\pleiades\java\10\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/pleiades/pleiades/eclipse/jre/bin/../jre/bin/server;C:/pleiades/pleiades/eclipse/jre/bin/../jre/bin;C:/pleiades/pleiades/eclipse/jre/bin/../jre/lib/amd64;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;c:\Program Files\java\jdk-10.0.1\bin;"C:\Program Files\Java\jdk-10.0.1\bin;";C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Users\nakamura\AppData\Local\Microsoft\WindowsApps;;C:\pleiades\pleiades\eclipse;;.] [日 5月 13 11:53:50 JST 2018]
情報: Initializing ProtocolHandler ["http-nio-8080"] [日 5月 13 11:53:50 JST 2018]
情報: Using a shared selector for servlet write/read [日 5月 13 11:53:50 JST 2018]
情報: Initializing ProtocolHandler ["ajp-nio-8009"] [日 5月 13 11:53:50 JST 2018]
情報: Using a shared selector for servlet write/read [日 5月 13 11:53:50 JST 2018]
情報: Initialization processed in 935 ms [日 5月 13 11:53:50 JST 2018]
情報: サービス [Catalina] を起動します [日 5月 13 11:53:50 JST 2018]
情報: Starting Servlet Engine: Apache Tomcat/9.0.7 [日 5月 13 11:53:50 JST 2018]
情報: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. [日 5月 13 11:53:51 JST 2018]
情報: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. [日 5月 13 11:53:51 JST 2018]
情報: Starting ProtocolHandler ["http-nio-8080"] [日 5月 13 11:53:51 JST 2018]
情報: Starting ProtocolHandler ["ajp-nio-8009"] [日 5月 13 11:53:51 JST 2018]
情報: Server startup in 872 ms [日 5月 13 11:53:51 JST 2018]
重大: サーブレット [sample.FileUpload] のServlet.service()が例外を投げました [日 5月 13 11:54:00 JST 2018]

//内部ブラウザhttp://localhost:8080/SampleServlet/sampleのエラー
HTTPステータス 500 - Internal Server Error
Type Exception Report
メッセージ Unable to process parts as no multi-part configuration has been provided

説明 The server encountered an unexpected condition that prevented it from fulfilling the request.

例外
java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
org.apache.catalina.connector.Request.parseParts(Request.java:2746)
org.apache.catalina.connector.Request.getParts(Request.java:2712)
org.apache.catalina.connector.Request.getPart(Request.java:2875)
org.apache.catalina.connector.RequestFacade.getPart(RequestFacade.java:1105)
sample.SampleServlet.doPost(SampleServlet.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
注意 原因のすべてのスタックトレースは、のログに記録されています
Apache Tomcat/9.0.7
以上です。
SampleServletをeclipseで単独で実行しても以下のエラーになります。
内部ブラウザhttp://localhost:8080/SampleServlet/sampleに
HTTPステータス 405 - Method Not Allowed
Type ステータスレポート

メッセージ HTTPのGETメソッドは、このURLではサポートされていません。

説明 The method received in the request-line is known by the origin server but not supported by the target resource.
Apache Tomcat/9.0.7

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

//  FileUpload/WebContent/sample.html
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=UTF-8">
<title>アップロード</title>
</head>
<body>
    <h1>ファイルのアップロード</h1>
    <form action="sample" enctype="multipart/form-data" method="POST">
        入力:<input type="file" size="20" name="fname">
        <input    type="submit" value="送信">
    </form>
</body>
</html>

//SampleServlet/src/sample/SampleServlet.java
package sample;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet("/sample")
public class SampleServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public SampleServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        super.doGet(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        ServletContext con = this.getServletContext();
        Part part = request.getPart("fname");
        String fname = "FILE" + new Date().getTime() + ".data";
        String disposition = part.getHeader("Content-Disposition");
        String[] headers = disposition.split(";");
        for (String header : headers) {
            String str = header.trim();
            if (str.startsWith("filename=")) {
                str = str.substring(10, str.length() - 1);
                String[] paths = str.split("\\\\");
                fname = paths[paths.length - 1];
            }
        }
        part.write(fname);
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("<html><body><h1>アップロードしました。</h1></body></html>");
    }

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • webarata3

    2018/05/13 00:45

    プロウグラムの目的が見えません。ファイルをアップロードして何処かに保管するのでしょうか? このプログラムで何をしたいのかを書いていただけると応えられるかもしれません。

    キャンセル

  • sanchu52

    2018/05/13 08:50

    すみません。質問を修正しました。

    キャンセル

  • sanchu52

    2018/05/13 08:52

    質問を修正されていませんね。もう一度修正します。お待ちください

    キャンセル

回答 1

checkベストアンサー

+1

ファイルアップロードするには、次のようなプログラムを書かないといけません。

@MultipartConfigアノテーションのlocation属性の場所にファイルは保管されます。この場所は事前に作っておく必要があります(下の例の場合 C:\tempフォルダは最初に作っておく必要があります)。

package sample;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet("/sample")
@MultipartConfig(fileSizeThreshold = 5000000, maxFileSize = 10000000, location = "c:\\temp")
public class Servlet3 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Part part = request.getPart("fname");
        part.write("test.file");

        response.setContentType("text/html; charset=utf-8");
        try (PrintWriter pw = response.getWriter()) {
            pw.println("アップロードしました");
        }
    }
}

ドキュメントはhttps://docs.oracle.com/javaee/7/tutorial/servlets011.htm#BABFGCHBです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/13 09:53

    c:\tmabcd.txtは作成済です。送信ボタンを押すと
    私のこのファイルでは/sample に保存されるんですか。
    お願いいたします。

    キャンセル

  • 2018/05/13 10:41

    上記の例だと、c:\temp\test.fileに保存されます。ファイル名は任意のものに変更できます。

    キャンセル

  • 2018/05/13 10:48

    申し訳ありません。動的プロジェクトが間違っていました。
    ごちゃごちゃしたので、編集しなおします。

    キャンセル

  • 2018/05/13 11:58

    今夜お仕事です、寝ます。

    キャンセル

  • 2018/05/13 12:32

    @MultipartConfigがないとファイルアップロードは処理できません。

    キャンセル

  • 2018/05/13 15:51

    プロジェクト内のContext.xmlのContextというタグを探して、以下のようにタグを書き直しなさいと出ています。Contextというタグが見つからないのですが、どうしたらいいでしょうか。

    <Context allowCausualMultipartParsing="true">

    キャンセル

  • 2018/05/13 17:31

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

    キャンセル

  • 2018/05/13 17:33

    <Context allowCasualMultipartParsing="true" >
    </Context>
    の変更で正常動作しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Servlet でのログイン処理について

    Servletにて、ログイン画面を作成しておりますが、 うまくできません。 どこを修正するべきか、教えていただけないでしょうか? ORACLEのデータベースの表一覧に一致

  • 解決済

    JSP submitの分岐 簡単なチャットアプリケーション

    前提・実現したいこと 閲覧頂きありがとうございます。 現在java研修中で、簡単なローカルホストで動くチャットアプリケーションをつくっています。 下のソースで(関係あ

  • 解決済

    eclipseでファイルの場所がわからない

    eclipseでサーブレットの勉強をしています String path = getServletContext().getRealPath("/WEB-INF/test.txt"

  • 解決済

    Javaサーブレット内のHttp通信Putメソッドでボディー部にKey/Valueパラメータを設定し...

    PutメソッドのHTTP通信を使用してボディーにKey/Valueパラメータを渡す方法を探しています。 BodyにKey/Valueのパラメータを設定して、受け渡し先で

  • 受付中

    ファイルにSystem.outを出力したいです。

    サーブレットで一つシステムを作成しているのですが、ログが出力されないので困っています。 アクセスログなどはcatlinayyyymmddといった形ででるのですが… To

  • 解決済

    Servlet フィルターについて

    前回質問させた頂いた続きになります。 編集中のページに、別のユーザーで編集ページに入らせない処理を書いています。 編集ページを抜けた判定を、フィルターで実装しようと処理

  • 解決済

    Tomcatのログイン設定

    Tomcatの管理者権限アカウント設定の場所なんですが tomcat-users.xmlであってるんでしょうか? ここに<role rolename="manager-gui"

  • 受付中

    Tomcatが上手く起動しない

    前提・実現したいこと アプリケーションの開発初心者です。 これから勉強しようとしています。 こちらでの質問も初めてですが、 皆様のお力をどうかお貸しください。 発生し

同じタグがついた質問を見る

  • Eclipse

    1657questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。