0

I am new to Java/Java Web. Currently, I am learning how to upload file into server.
I am facing a problem and I have been trying to solve this for 2 days. I have been searching a lot in stackoverflow and other resources without any result.

This is the resource that I am learning; http://www.tutorialspoint.com/servlets/servlets-file-uploading.htm

I am sure the tutorial is using Windows from 'c:\' while I use Ubuntu.

Here it is my code:

<web-app>
....
<context-param> 
    <description>Location to store uploaded file</description> 
    <param-name>file-upload</param-name> 
    <param-value>
         /home/someone/test_upload/
     </param-value> 
</context-param>
....
</web-app>


I wrote an index.html contains form upload. Everything was OK, the form was showing on browser.

And this is my servlet (import is OK; I added commons-fileupload-1.3.1.jar in my build path):

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( ){
      // Get the file location where it would be stored.
      filePath = 
             getServletContext().getInitParameter("file-upload"); 
   }

   public void doPost(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, java.io.IOException {

      // Check that we have a file upload request
      isMultipart = ServletFileUpload.isMultipartContent(request);
      response.setContentType("text/html");
      java.io.PrintWriter out = response.getWriter( );

      DiskFileItemFactory factory = new DiskFileItemFactory();
      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);
      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("\\resources\\"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory); //when this line is active, everything is messed up
      // maximum file size to be uploaded.
      //upload.setSizeMax( maxFileSize );


      [...] 

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().print("the test");
    }

I try my best to debug the servlet. I wrote from line to line until I find an error on line

ServletFileUpload upload = new ServletFileUpload(factory);

This is the error page:

HTTP Status 404 - /testupload/

type Status report

message /testupload/

description The requested resource is not available.

VMware vFabric tc Runtime 2.9.3.RELEASE/7.0.42.A.RELEASE

To make you easy to analyze, I think something wrong with my factory setting such as factory.setSizeThreshold(maxMemSize); and factory.setRepository(new File("\\resources\\"));

Maybe my analyze is wrong too. And please consider the setting because I am using Ubuntu.

Would you please help me how to fix this?

---------------------------------- my eclipse console --------------------------------

Mar 27, 2014 6:40:33 PM com.springsource.tcserver.security.PropertyDecoder <init>
INFO: tc Runtime property decoder using memory-based key
Mar 27, 2014 6:40:33 PM com.springsource.tcserver.security.PropertyDecoder <init>
INFO: tcServer Runtime property decoder has been initialized in 342 ms
Mar 27, 2014 6:40:34 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Mar 27, 2014 6:40:34 PM com.springsource.tcserver.serviceability.rmi.JmxSocketListener init
INFO: Started up JMX registry on 127.0.0.1:6969 in 145 ms
Mar 27, 2014 6:40:34 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1213 ms
Mar 27, 2014 6:40:34 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Mar 27, 2014 6:40:34 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: VMware vFabric tc Runtime 2.9.3.RELEASE/7.0.42.A.RELEASE
Mar 27, 2014 6:40:34 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /home/someone/Documents/springsource/vfabric-tc-server-developer-2.9.3.RELEASE/base-instance/conf/Catalina/localhost/testupload.xml
Mar 27, 2014 6:40:34 PM org.apache.catalina.startup.SetContextPropertiesRule begin
WARNING: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:test_upload' did not find a matching property.
Mar 27, 2014 6:40:35 PM org.apache.catalina.core.ContainerBase addChildInternal
SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/testupload]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:656)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1635)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2397)
    at java.lang.Class.getDeclaredFields(Class.java:1806)
    at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
    at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:263)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:142)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:67)
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:405)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 10 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    ... 24 more

Mar 27, 2014 6:40:35 PM org.apache.catalina.startup.HostConfig deployDescriptor
SEVERE: Error deploying configuration descriptor /home/someone/Documents/springsource/vfabric-tc-server-developer-2.9.3.RELEASE/base-instance/conf/Catalina/localhost/testupload.xml
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/testupload]]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:656)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1635)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

Mar 27, 2014 6:40:35 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /home/someone/Documents/springsource/vfabric-tc-server-developer-2.9.3.RELEASE/base-instance/webapps/manager
Mar 27, 2014 6:40:36 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /home/someone/Documents/springsource/vfabric-tc-server-developer-2.9.3.RELEASE/base-instance/webapps/ROOT
Mar 27, 2014 6:40:36 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Mar 27, 2014 6:40:36 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1526 ms
user1034754
  • 71
  • 2
  • 8

2 Answers2

1

You are missing the commons-fileupload.jar in the classpath. Please add this jar to your build path of the project and package the .war along with it and deploy!

Note : This link will help you download it

Keerthivasan
  • 12,760
  • 2
  • 32
  • 53
0

You are missing org.apache.commons.fileupload.FileItemFactory, so missing mons-fileupload

You need to add this to your classpath.

farrellmr
  • 1,815
  • 2
  • 15
  • 26