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

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

新規登録して質問してみよう
ただいま回答率
85.50%
サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

0回答

3980閲覧

サーブレットでのファイルアップロードについて

Ritz_Malheur

総合スコア11

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2015/08/05 09:22

質問させていただきます。

サーブレットの勉強をしており、
ファイルアップロードの項目でつまってしまいました。

問題①
『'開始中 ローカル・ホストのTomcat8(Java8)'に問題が発生しました。
サーバー ローカル・ホストのTomcat8(Java8)は始動に失敗しました。』
と出てしまい、動かなくなってしまいました。

直前の作業としては、
Eclipseでソースを書いている時に、『Ctrl + Shift + O』を押して
import文を整えたところ、
教科書とは違う、
『 import org.apache.tomcat.util.http.fileupload.FileItem; 』
という文がimportされてしまって、コンパイルエラーになっており、
その文を
『 import org.apache.commons.fileupload.servlet.ServletFileUpload; 』
に書き換えました。

問題②
『mvn clean』や『clean compile』をすると実行できるようなりますが、
今まで問題なく動作していたサーブレットが実行できなくなってしまいました。

いずれも、htmlの画面までは表示されますが、
そこから遷移せず、404エラーが出てしまいます。

どなたかわかる方がいらっしゃいましたら、教えていただけませんでしょうか?
宜しくお願いいたします。

<実行環境>
・Eclipse 4.4
・Maven
・Tomcat8
・commons-fileupload-1.3.1.jar
・commons-io-2.4.jar

package servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; 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 org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class FileUploadServlet */ @WebServlet("/fileupload") public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FileUploadServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // リクエスト処理 String message = "テキストファイルをアップロードできませんでした。"; if (ServletFileUpload.isMultipartContent(request)) { String dataDir = getServletContext().getRealPath("/") + "data"; DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload uploader = new ServletFileUpload(factory); uploader.setFileSizeMax(1024 * 1024); // 1MB try { List<FileItem> fList = uploader.parseRequest(request); for (FileItem fItem : fList) { if (!fItem.isFormField()) { File tmpFile = new File(fItem.getName()); String fileName = tmpFile.getName(); if (fileNameCheck(fileName)) { File file = new File(dataDir + File.separator + fileName); fItem.write(file); message = "テキストファイル「" + fileName + "」をアップロードしました。"; } else { message = "テキストファイルを正しく指定してください。"; } } } } catch (Exception e) { e.printStackTrace(); } } else { message = "form タグの enctype 属性に multipart/form-data を指定してください。"; } // レスポンス処理 response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"); out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">"); out.println("<head>"); out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />"); out.println("<title>ファイルアップロード</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>" + message + "</p>"); out.println("</body>"); out.println("</html>"); out.close(); } private boolean fileNameCheck(String fileName) { String regex = "^\\S+\\.txt$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(fileName); return matcher.matches(); } }

html

1<?xml version="1.0" encoding="UTF-8" ?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml"> 4<head> 5<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 6<title>ファイルアップロード</title> 7</head> 8<body> 9 <h1>アップロードするテキストファイルを指定してください</h1> 10 <form action="fileupload" method="post" enctype="multipart/form-data"> 11 <p> 12 <input type="file" name="txtfile" value="" /> 13 </p> 14 <p> 15 <input type="submit" value="送信" /> 16 </p> 17 </form> 18</body> 19</html>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eripong

2015/08/05 10:29

起動時に他のエラーメッセージや、例外スタックトレースは出ていませんか?あれば追記してもらえませんか?
退会済みユーザー

退会済みユーザー

2015/08/10 05:06

始動しなかった、ということなので、私も起動時にエラーメッセージが出ていると思います。下記の情報を追記されると回答が集まるでしょう。 1. Tomcatの起動はどのように行っていますか? 2. Tomcatを`TOMCAT_HOME/bin/startup.bat`等で起動しているのであれば、`TOMCAT_HOME/logs/`配下にログが出力されているはずです。その中の`catalina.out`等に例外スタックトレースは出ていませんか? 3. Eclipseから起動している場合は、コンソールビューにエラーメッセージや例外スタックトレースは出ていませんか? 4. Mavenから起動している場合は、Mavenを起動しているターミナルやコマンドプロンプトにエラーメッセージや例外スタックトレースは出ていませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問