質問させていただきます。
サーブレットの勉強をしており、
ファイルアップロードの項目でつまってしまいました。
問題①
『'開始中 ローカル・ホストの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>
あなたの回答
tips
プレビュー