0

UploadServlet 서블릿을 Apache Tomcat 8.0.14를 통해 컴파일하려고합니다. 내 web.xml을 잘하고 UploadServlet.java 제대로 컴파일했지만 시도가 실행 아직 때 내가 @로 오류java.lang.ClassNotFoundException : org.apache.commons.fileupload.FileItemFactory

ERROR

HTTP Status 500 - Error instantiating servlet class UploadServlet 

exception 
javax.servlet.ServletException: Error instantiating servlet class UploadServlet 

root cause 
java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory 

root cause 
java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory 

UploadServlet.java

import java.io.*; 
import java.util.*; 

import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
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.FileUploadException; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 
import org.apache.commons.io.output.*; 

public class UploadServlet extends HttpServlet { 

    private boolean isMultipart; 
    private String filePath; 
    private int maxFileSize = 50 * 1024; 
    private int maxMemSize = 4 * 1024; 
    private File file ; 

    public void init(){ 

     filePath = getServletContext().getInitParameter("file-upload"); 
    } 
    public void doPost(HttpServletRequest request, 
       HttpServletResponse response) 
       throws ServletException, java.io.IOException { 

     isMultipart = ServletFileUpload.isMultipartContent(request); 
     response.setContentType("text/html"); 
     java.io.PrintWriter out = response.getWriter(); 
     if(!isMultipart){ 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet upload</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<p>No file uploaded</p>"); 
     out.println("</body>"); 
     out.println("</html>"); 
     return; 
     } 

     DiskFileItemFactory factory = new DiskFileItemFactory(); 

     factory.setSizeThreshold(maxMemSize); 

     factory.setRepository(new File("C:\\apache-tomcat-8.0.14\\temp")); 


     ServletFileUpload upload = new ServletFileUpload(factory); 

     upload.setSizeMax(maxFileSize); 

     try{ 

     List fileItems = upload.parseRequest(request); 

     Iterator i = fileItems.iterator(); 

     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet upload</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     while (i.hasNext()) 
     { 
     FileItem fi = (FileItem)i.next(); 
     if (!fi.isFormField()) 
     { 

      String fieldName = fi.getFieldName(); 
      String fileName = fi.getName(); 
      String contentType = fi.getContentType(); 
      boolean isInMemory = fi.isInMemory(); 
      long sizeInBytes = fi.getSize(); 
      System.out.println(fileName); 

      if(fileName.lastIndexOf("\\") >= 0) 
      { 
       file = new File(filePath + 
       fileName.substring(fileName.lastIndexOf("\\"))) ; 
      } 
      else 
      { 
       file = new File(filePath + 
       fileName.substring(fileName.lastIndexOf("\\")+1)) ; 
      } 
      fi.write(file) ; 
      out.println("Uploaded Filename: " + fileName + "<br>"); 
     } 
     } 
     out.println("</body>"); 
     out.println("</html>"); 
    }catch(Exception ex) { 
     System.out.println(ex); 
    } 
    } 
    public void doGet(HttpServletRequest request, 
         HttpServletResponse response) 
     throws ServletException, java.io.IOException { 

     throw new ServletException("GET method used with " + 
       getClass().getName()+": POST method required."); 
    } 
} 
+0

클래스 경로에 클래스 org.apache.commons.fileupload.FileItemFactory가 없습니다. Maven을 사용하여 프로젝트를 빌드하고 있습니까? – maslan

+0

나는 무엇이 녀석인지 모른다. 참고로 저는 숭고한 텍스트 편집기 – saikumarm

+0

을 사용하여 커먼즈를 컴파일하는 동안 사용했던 모든 항아리를 사용하고 있으며 배포 도중에 추가합니다. –

답변

4

WEB-INF/libcommons-fileupload.jarcommons-io.jar을 입력해야합니다. 클래스 패스는 빌드하는 동안 사용되지만 런타임 중에도 사용할 수 있어야합니다.

실제로 Eclipse와 같은 Java EE 개발을 위해 IDE를 사용했다면이 Jars를 WEB-INF/lib에 넣으면 빌드 용 claspath에 자동으로 표시되므로 충분할 것입니다.

0

을 다음 얻을 가스, WEB-INF/lib 폴더에 .jar 파일을 추가하는 것을 잊어 버렸습니다. 문제가 해결되었습니다.